vty.h
上传用户:xiaozhuqw
上传日期:2009-11-15
资源大小:1338k
文件大小:6k
源码类别:

网络

开发平台:

Unix_Linux

  1. /* Virtual terminal [aka TeletYpe] interface routine
  2.    Copyright (C) 1997 Kunihiro Ishiguro
  3. This file is part of GNU Zebra.
  4. GNU Zebra is free software; you can redistribute it and/or modify it
  5. under the terms of the GNU General Public License as published by the
  6. Free Software Foundation; either version 2, or (at your option) any
  7. later version.
  8. GNU Zebra is distributed in the hope that it will be useful, but
  9. WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  11. General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with GNU Zebra; see the file COPYING.  If not, write to the Free
  14. Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  15. 02111-1307, USA.  */
  16. #ifndef _ZEBRA_VTY_H
  17. #define _ZEBRA_VTY_H
  18. #define VTY_BUFSIZ 512
  19. #define VTY_MAXHIST 20
  20. /* VTY struct. */
  21. struct vty 
  22. {
  23.   /* File descripter of this vty. */
  24.   int fd;
  25.   /* Is this vty connect to file or not */
  26.   enum {VTY_TERM, VTY_FILE, VTY_SHELL, VTY_SHELL_SERV} type;
  27.   /* Node status of this vty */
  28.   int node;
  29.   /* What address is this vty comming from. */
  30.   char *address;
  31.   /* Privilege level of this vty. */
  32.   int privilege;
  33.   /* Failure count */
  34.   int fail;
  35.   /* Output buffer. */
  36.   struct buffer *obuf;
  37.   /* Command input buffer */
  38.   char *buf;
  39.   /* Command cursor point */
  40.   int cp;
  41.   /* Command length */
  42.   int length;
  43.   /* Command max length. */
  44.   int max;
  45.   /* Histry of command */
  46.   char *hist[VTY_MAXHIST];
  47.   /* History lookup current point */
  48.   int hp;
  49.   /* History insert end point */
  50.   int hindex;
  51.   /* For current referencing point of interface, route-map,
  52.      access-list etc... */
  53.   void *index;
  54.   /* For multiple level index treatment such as key chain and key. */
  55.   void *index_sub;
  56.   /* For escape character. */
  57.   unsigned char escape;
  58.   /* Current vty status. */
  59.   enum {VTY_NORMAL, VTY_CLOSE, VTY_MORE, VTY_MORELINE,
  60.         VTY_START, VTY_CONTINUE} status;
  61.   /* IAC handling */
  62.   unsigned char iac;
  63.   /* IAC SB handling */
  64.   unsigned char iac_sb_in_progress;
  65.   struct buffer *sb_buffer;
  66.   /* Window width/height. */
  67.   int width;
  68.   int height;
  69.   int scroll_one;
  70.   /* Configure lines. */
  71.   int lines;
  72.   /* Current executing function pointer. */
  73.   int (*func) (struct vty *, void *arg);
  74.   /* Terminal monitor. */
  75.   int monitor;
  76.   /* In configure mode. */
  77.   int config;
  78.   /* Read and write thread. */
  79.   struct thread *t_read;
  80.   struct thread *t_write;
  81.   /* Timeout seconds and thread. */
  82.   unsigned long v_timeout;
  83.   struct thread *t_timeout;
  84.   /* Thread output function. */
  85.   struct thread *t_output;
  86.   /* Output data pointer. */
  87.   int (*output_func) (struct vty *, int);
  88.   void (*output_clean) (struct vty *);
  89.   void *output_rn;
  90.   unsigned long output_count;
  91.   int output_type;
  92.   void *output_arg;
  93. };
  94. /* Integrated configuration file. */
  95. #define INTEGRATE_DEFAULT_CONFIG "Zebra.conf"
  96. /* Small macro to determine newline is newline only or linefeed needed. */
  97. #define VTY_NEWLINE  ((vty->type == VTY_TERM) ? "rn" : "n")
  98. /* Default time out value */
  99. #define VTY_TIMEOUT_DEFAULT 600
  100. /* Vty read buffer size. */
  101. #define VTY_READ_BUFSIZ 512
  102. /* Directory separator. */
  103. #ifndef DIRECTORY_SEP
  104. #define DIRECTORY_SEP '/'
  105. #endif /* DIRECTORY_SEP */
  106. #ifndef IS_DIRECTORY_SEP
  107. #define IS_DIRECTORY_SEP(c) ((c) == DIRECTORY_SEP)
  108. #endif
  109. /* GCC have printf type attribute check.  */
  110. #ifdef __GNUC__
  111. #define PRINTF_ATTRIBUTE(a,b) __attribute__ ((__format__ (__printf__, a, b)))
  112. #else
  113. #define PRINTF_ATTRIBUTE(a,b)
  114. #endif /* __GNUC__ */
  115. /* Utility macro to convert VTY argument to unsigned integer.  */
  116. #define VTY_GET_INTEGER(NAME,V,STR)                              
  117. {                                                                
  118.   char *endptr = NULL;                                           
  119.   (V) = strtoul ((STR), &endptr, 10);                            
  120.   if ((V) == ULONG_MAX || *endptr != '')                       
  121.     {                                                            
  122.       vty_out (vty, "%% Invalid %s value%s", NAME, VTY_NEWLINE); 
  123.       return CMD_WARNING;                                        
  124.     }                                                            
  125. }
  126. #define VTY_GET_INTEGER_RANGE(NAME,V,STR,MIN,MAX)                
  127. {                                                                
  128.   char *endptr = NULL;                                           
  129.   (V) = strtoul ((STR), &endptr, 10);                            
  130.   if ((V) == ULONG_MAX || *endptr != ''                        
  131.       || (V) < (MIN) || (V) > (MAX))                             
  132.     {                                                            
  133.       vty_out (vty, "%% Invalid %s value%s", NAME, VTY_NEWLINE); 
  134.       return CMD_WARNING;                                        
  135.     }                                                            
  136. }
  137. /* Exported variables */
  138. extern char integrate_default[];
  139. /* Prototypes. */
  140. void vty_init (void);
  141. void vty_init_vtysh (void);
  142. void vty_reset (void);
  143. void vty_finish (void);
  144. struct vty *vty_new (void);
  145. int vty_out (struct vty *, const char *, ...) PRINTF_ATTRIBUTE(2, 3);
  146. void vty_read_config (char *, char *, char *);
  147. void vty_time_print (struct vty *, int);
  148. void vty_serv_sock (const char *, unsigned short, char *);
  149. void vty_close (struct vty *);
  150. char *vty_get_cwd (void);
  151. void vty_log (const char *, const char *, va_list);
  152. int vty_config_lock (struct vty *);
  153. int vty_config_unlock (struct vty *);
  154. int vty_shell (struct vty *);
  155. int vty_shell_serv (struct vty *);
  156. void vty_hello (struct vty *);
  157. #endif /* _ZEBRA_VTY_H */