Annotation of embedaddon/quagga/lib/vty.h, revision 1.1

1.1     ! misho       1: /* Virtual terminal [aka TeletYpe] interface routine
        !             2:    Copyright (C) 1997 Kunihiro Ishiguro
        !             3: 
        !             4: This file is part of GNU Zebra.
        !             5: 
        !             6: GNU Zebra is free software; you can redistribute it and/or modify it
        !             7: under the terms of the GNU General Public License as published by the
        !             8: Free Software Foundation; either version 2, or (at your option) any
        !             9: later version.
        !            10: 
        !            11: GNU Zebra is distributed in the hope that it will be useful, but
        !            12: WITHOUT ANY WARRANTY; without even the implied warranty of
        !            13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
        !            14: General Public License for more details.
        !            15: 
        !            16: You should have received a copy of the GNU General Public License
        !            17: along with GNU Zebra; see the file COPYING.  If not, write to the Free
        !            18: Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
        !            19: 02111-1307, USA.  */
        !            20: 
        !            21: #ifndef _ZEBRA_VTY_H
        !            22: #define _ZEBRA_VTY_H
        !            23: 
        !            24: #include "thread.h"
        !            25: #include "log.h"
        !            26: 
        !            27: #define VTY_BUFSIZ 512
        !            28: #define VTY_MAXHIST 20
        !            29: 
        !            30: /* VTY struct. */
        !            31: struct vty 
        !            32: {
        !            33:   /* File descripter of this vty. */
        !            34:   int fd;
        !            35: 
        !            36:   /* Is this vty connect to file or not */
        !            37:   enum {VTY_TERM, VTY_FILE, VTY_SHELL, VTY_SHELL_SERV} type;
        !            38: 
        !            39:   /* Node status of this vty */
        !            40:   int node;
        !            41: 
        !            42:   /* What address is this vty comming from. */
        !            43:   char *address;
        !            44: 
        !            45:   /* Failure count */
        !            46:   int fail;
        !            47: 
        !            48:   /* Output buffer. */
        !            49:   struct buffer *obuf;
        !            50: 
        !            51:   /* Command input buffer */
        !            52:   char *buf;
        !            53: 
        !            54:   /* Command cursor point */
        !            55:   int cp;
        !            56: 
        !            57:   /* Command length */
        !            58:   int length;
        !            59: 
        !            60:   /* Command max length. */
        !            61:   int max;
        !            62: 
        !            63:   /* Histry of command */
        !            64:   char *hist[VTY_MAXHIST];
        !            65: 
        !            66:   /* History lookup current point */
        !            67:   int hp;
        !            68: 
        !            69:   /* History insert end point */
        !            70:   int hindex;
        !            71: 
        !            72:   /* For current referencing point of interface, route-map,
        !            73:      access-list etc... */
        !            74:   void *index;
        !            75: 
        !            76:   /* For multiple level index treatment such as key chain and key. */
        !            77:   void *index_sub;
        !            78: 
        !            79:   /* For escape character. */
        !            80:   unsigned char escape;
        !            81: 
        !            82:   /* Current vty status. */
        !            83:   enum {VTY_NORMAL, VTY_CLOSE, VTY_MORE, VTY_MORELINE} status;
        !            84: 
        !            85:   /* IAC handling: was the last character received the
        !            86:      IAC (interpret-as-command) escape character (and therefore the next
        !            87:      character will be the command code)?  Refer to Telnet RFC 854. */
        !            88:   unsigned char iac;
        !            89: 
        !            90:   /* IAC SB (option subnegotiation) handling */
        !            91:   unsigned char iac_sb_in_progress;
        !            92:   /* At the moment, we care only about the NAWS (window size) negotiation,
        !            93:      and that requires just a 5-character buffer (RFC 1073):
        !            94:        <NAWS char> <16-bit width> <16-bit height> */
        !            95: #define TELNET_NAWS_SB_LEN 5
        !            96:   unsigned char sb_buf[TELNET_NAWS_SB_LEN];
        !            97:   /* How many subnegotiation characters have we received?  We just drop
        !            98:      those that do not fit in the buffer. */
        !            99:   size_t sb_len;
        !           100: 
        !           101:   /* Window width/height. */
        !           102:   int width;
        !           103:   int height;
        !           104: 
        !           105:   /* Configure lines. */
        !           106:   int lines;
        !           107: 
        !           108:   /* Terminal monitor. */
        !           109:   int monitor;
        !           110: 
        !           111:   /* In configure mode. */
        !           112:   int config;
        !           113: 
        !           114:   /* Read and write thread. */
        !           115:   struct thread *t_read;
        !           116:   struct thread *t_write;
        !           117: 
        !           118:   /* Timeout seconds and thread. */
        !           119:   unsigned long v_timeout;
        !           120:   struct thread *t_timeout;
        !           121: };
        !           122: 
        !           123: /* Integrated configuration file. */
        !           124: #define INTEGRATE_DEFAULT_CONFIG "Quagga.conf"
        !           125: 
        !           126: /* Small macro to determine newline is newline only or linefeed needed. */
        !           127: #define VTY_NEWLINE  ((vty->type == VTY_TERM) ? "\r\n" : "\n")
        !           128: 
        !           129: /* Default time out value */
        !           130: #define VTY_TIMEOUT_DEFAULT 600
        !           131: 
        !           132: /* Vty read buffer size. */
        !           133: #define VTY_READ_BUFSIZ 512
        !           134: 
        !           135: /* Directory separator. */
        !           136: #ifndef DIRECTORY_SEP
        !           137: #define DIRECTORY_SEP '/'
        !           138: #endif /* DIRECTORY_SEP */
        !           139: 
        !           140: #ifndef IS_DIRECTORY_SEP
        !           141: #define IS_DIRECTORY_SEP(c) ((c) == DIRECTORY_SEP)
        !           142: #endif
        !           143: 
        !           144: /* GCC have printf type attribute check.  */
        !           145: #ifdef __GNUC__
        !           146: #define PRINTF_ATTRIBUTE(a,b) __attribute__ ((__format__ (__printf__, a, b)))
        !           147: #else
        !           148: #define PRINTF_ATTRIBUTE(a,b)
        !           149: #endif /* __GNUC__ */
        !           150: 
        !           151: /* Utility macros to convert VTY argument to unsigned long or integer. */
        !           152: #define VTY_GET_LONG(NAME,V,STR) \
        !           153: do { \
        !           154:   char *endptr = NULL; \
        !           155:   (V) = strtoul ((STR), &endptr, 10); \
        !           156:   if (*endptr != '\0' || (V) == ULONG_MAX) \
        !           157:     { \
        !           158:       vty_out (vty, "%% Invalid %s value%s", NAME, VTY_NEWLINE); \
        !           159:       return CMD_WARNING; \
        !           160:     } \
        !           161: } while (0)
        !           162: 
        !           163: #define VTY_GET_INTEGER_RANGE(NAME,V,STR,MIN,MAX) \
        !           164: do { \
        !           165:   unsigned long tmpl; \
        !           166:   VTY_GET_LONG(NAME, tmpl, STR); \
        !           167:   if ( (tmpl < (MIN)) || (tmpl > (MAX))) \
        !           168:     { \
        !           169:       vty_out (vty, "%% Invalid %s value%s", NAME, VTY_NEWLINE); \
        !           170:       return CMD_WARNING; \
        !           171:     } \
        !           172:   (V) = tmpl; \
        !           173: } while (0)
        !           174: 
        !           175: #define VTY_GET_INTEGER(NAME,V,STR) \
        !           176:   VTY_GET_INTEGER_RANGE(NAME,V,STR,0U,UINT32_MAX)
        !           177: 
        !           178: #define VTY_GET_IPV4_ADDRESS(NAME,V,STR)                                      \
        !           179: do {                                                                             \
        !           180:   int retv;                                                                   \
        !           181:   retv = inet_aton ((STR), &(V));                                             \
        !           182:   if (!retv)                                                                  \
        !           183:     {                                                                         \
        !           184:       vty_out (vty, "%% Invalid %s value%s", NAME, VTY_NEWLINE);              \
        !           185:       return CMD_WARNING;                                                     \
        !           186:     }                                                                         \
        !           187: } while (0)
        !           188: 
        !           189: #define VTY_GET_IPV4_PREFIX(NAME,V,STR)                                       \
        !           190: do {                                                                             \
        !           191:   int retv;                                                                   \
        !           192:   retv = str2prefix_ipv4 ((STR), &(V));                                       \
        !           193:   if (retv <= 0)                                                              \
        !           194:     {                                                                         \
        !           195:       vty_out (vty, "%% Invalid %s value%s", NAME, VTY_NEWLINE);              \
        !           196:       return CMD_WARNING;                                                     \
        !           197:     }                                                                         \
        !           198: } while (0)
        !           199: 
        !           200: /* Exported variables */
        !           201: extern char integrate_default[];
        !           202: 
        !           203: /* Prototypes. */
        !           204: extern void vty_init (struct thread_master *);
        !           205: extern void vty_init_vtysh (void);
        !           206: extern void vty_terminate (void);
        !           207: extern void vty_reset (void);
        !           208: extern struct vty *vty_new (void);
        !           209: extern int vty_out (struct vty *, const char *, ...) PRINTF_ATTRIBUTE(2, 3);
        !           210: extern void vty_read_config (char *, char *);
        !           211: extern void vty_time_print (struct vty *, int);
        !           212: extern void vty_serv_sock (const char *, unsigned short, const char *);
        !           213: extern void vty_close (struct vty *);
        !           214: extern char *vty_get_cwd (void);
        !           215: extern void vty_log (const char *level, const char *proto, 
        !           216:                      const char *fmt, struct timestamp_control *, va_list);
        !           217: extern int vty_config_lock (struct vty *);
        !           218: extern int vty_config_unlock (struct vty *);
        !           219: extern int vty_shell (struct vty *);
        !           220: extern int vty_shell_serv (struct vty *);
        !           221: extern void vty_hello (struct vty *);
        !           222: 
        !           223: /* Send a fixed-size message to all vty terminal monitors; this should be
        !           224:    an async-signal-safe function. */
        !           225: extern void vty_log_fixed (const char *buf, size_t len);
        !           226: 
        !           227: #endif /* _ZEBRA_VTY_H */

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