File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / bird / nest / cli.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Aug 22 12:33:54 2017 UTC (6 years, 10 months ago) by misho
Branches: bird, MAIN
CVS tags: v1_6_8p3, v1_6_3p0, v1_6_3, HEAD
bird 1.6.3

    1: /*
    2:  *	BIRD Internet Routing Daemon -- Command-Line Interface
    3:  *
    4:  *	(c) 1999--2000 Martin Mares <mj@ucw.cz>
    5:  *
    6:  *	Can be freely distributed and used under the terms of the GNU GPL.
    7:  */
    8: 
    9: #ifndef _BIRD_CLI_H_
   10: #define _BIRD_CLI_H_
   11: 
   12: #include "lib/resource.h"
   13: #include "lib/event.h"
   14: 
   15: #define CLI_RX_BUF_SIZE 4096
   16: #define CLI_TX_BUF_SIZE 4096
   17: #define CLI_MAX_ASYNC_QUEUE 4096
   18: 
   19: #define CLI_MSG_SIZE 500
   20: #define CLI_LINE_SIZE 512
   21: 
   22: struct cli_out {
   23:   struct cli_out *next;
   24:   byte *wpos, *outpos, *end;
   25:   byte buf[0];
   26: };
   27: 
   28: typedef struct cli {
   29:   node n;				/* Node in list of all log hooks */
   30:   pool *pool;
   31:   void *priv;				/* Private to sysdep layer */
   32:   byte *rx_buf, *rx_pos, *rx_aux;	/* sysdep */
   33:   struct cli_out *tx_buf, *tx_pos, *tx_write;
   34:   event *event;
   35:   void (*cont)(struct cli *c);
   36:   void (*cleanup)(struct cli *c);
   37:   void *rover;				/* Private to continuation routine */
   38:   int last_reply;
   39:   int restricted;			/* CLI is restricted to read-only commands */
   40:   struct linpool *parser_pool;		/* Pool used during parsing */
   41:   byte *ring_buf;			/* Ring buffer for asynchronous messages */
   42:   byte *ring_end, *ring_read, *ring_write;	/* Pointers to the ring buffer */
   43:   uint ring_overflow;			/* Counter of ring overflows */
   44:   uint log_mask;			/* Mask of allowed message levels */
   45:   uint log_threshold;			/* When free < log_threshold, store only important messages */
   46:   uint async_msg_size;			/* Total size of async messages queued in tx_buf */
   47: } cli;
   48: 
   49: extern pool *cli_pool;
   50: extern struct cli *this_cli;		/* Used during parsing */
   51: 
   52: #define CLI_ASYNC_CODE 10000
   53: 
   54: /* Functions to be called by command handlers */
   55: 
   56: void cli_printf(cli *, int, char *, ...);
   57: #define cli_msg(x...) cli_printf(this_cli, x)
   58: void cli_set_log_echo(cli *, uint mask, uint size);
   59: 
   60: /* Functions provided to sysdep layer */
   61: 
   62: cli *cli_new(void *);
   63: void cli_init(void);
   64: void cli_free(cli *);
   65: void cli_kick(cli *);
   66: void cli_written(cli *);
   67: void cli_echo(uint class, byte *msg);
   68: 
   69: static inline int cli_access_restricted(void)
   70: {
   71:   if (this_cli && this_cli->restricted)
   72:     return (cli_printf(this_cli, 8007, "Access denied"), 1);
   73:   else
   74:     return 0;
   75: }
   76: 
   77: /* Functions provided by sysdep layer */
   78: 
   79: void cli_write_trigger(cli *);
   80: int cli_get_command(cli *);
   81: 
   82: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>