Annotation of embedaddon/bird/nest/cli.h, revision 1.1

1.1     ! misho       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>