|
version 1.1, 2012/02/21 17:26:12
|
version 1.1.1.4, 2016/11/02 10:09:11
|
|
Line 23 Software Foundation, Inc., 59 Temple Place - Suite 330
|
Line 23 Software Foundation, Inc., 59 Temple Place - Suite 330
|
| |
|
| #include "thread.h" |
#include "thread.h" |
| #include "log.h" |
#include "log.h" |
| |
#include "sockunion.h" |
| |
|
| #define VTY_BUFSIZ 512 |
#define VTY_BUFSIZ 512 |
| #define VTY_MAXHIST 20 |
#define VTY_MAXHIST 20 |
|
Line 33 struct vty
|
Line 34 struct vty
|
| /* File descripter of this vty. */ |
/* File descripter of this vty. */ |
| int fd; |
int fd; |
| |
|
| |
/* output FD, to support stdin/stdout combination */ |
| |
int wfd; |
| |
|
| /* Is this vty connect to file or not */ |
/* Is this vty connect to file or not */ |
| enum {VTY_TERM, VTY_FILE, VTY_SHELL, VTY_SHELL_SERV} type; |
enum {VTY_TERM, VTY_FILE, VTY_SHELL, VTY_SHELL_SERV} type; |
| |
|
| /* Node status of this vty */ |
/* Node status of this vty */ |
| int node; |
int node; |
| |
|
| /* What address is this vty comming from. */ |
|
| char *address; |
|
| |
|
| /* Failure count */ |
/* Failure count */ |
| int fail; |
int fail; |
| |
|
|
Line 118 struct vty
|
Line 119 struct vty
|
| /* Timeout seconds and thread. */ |
/* Timeout seconds and thread. */ |
| unsigned long v_timeout; |
unsigned long v_timeout; |
| struct thread *t_timeout; |
struct thread *t_timeout; |
| |
|
| |
/* What address is this vty comming from. */ |
| |
char address[SU_ADDRSTRLEN]; |
| }; |
}; |
| |
|
| /* Integrated configuration file. */ |
/* Integrated configuration file. */ |
|
Line 148 struct vty
|
Line 152 struct vty
|
| #define PRINTF_ATTRIBUTE(a,b) |
#define PRINTF_ATTRIBUTE(a,b) |
| #endif /* __GNUC__ */ |
#endif /* __GNUC__ */ |
| |
|
| /* Utility macros to convert VTY argument to unsigned long or integer. */ | /* Utility macros to convert VTY argument to unsigned long */ |
| #define VTY_GET_LONG(NAME,V,STR) \ | #define VTY_GET_ULONG(NAME,V,STR) \ |
| do { \ |
do { \ |
| char *endptr = NULL; \ |
char *endptr = NULL; \ |
| |
errno = 0; \ |
| (V) = strtoul ((STR), &endptr, 10); \ |
(V) = strtoul ((STR), &endptr, 10); \ |
| if (*endptr != '\0' || (V) == ULONG_MAX) \ | if (*(STR) == '-' || *endptr != '\0' || errno) \ |
| { \ |
{ \ |
| vty_out (vty, "%% Invalid %s value%s", NAME, VTY_NEWLINE); \ |
vty_out (vty, "%% Invalid %s value%s", NAME, VTY_NEWLINE); \ |
| return CMD_WARNING; \ |
return CMD_WARNING; \ |
| } \ |
} \ |
| } while (0) |
} while (0) |
| |
|
| #define VTY_GET_INTEGER_RANGE(NAME,V,STR,MIN,MAX) \ | /* |
| do { \ | * The logic below ((TMPL) <= ((MIN) && (TMPL) != (MIN)) is |
| unsigned long tmpl; \ | * done to circumvent the compiler complaining about |
| VTY_GET_LONG(NAME, tmpl, STR); \ | * comparing unsigned numbers against zero, if MIN is zero. |
| if ( (tmpl < (MIN)) || (tmpl > (MAX))) \ | * NB: The compiler isn't smart enough to supress the warning |
| { \ | * if you write (MIN) != 0 && tmpl < (MIN). |
| vty_out (vty, "%% Invalid %s value%s", NAME, VTY_NEWLINE); \ | */ |
| return CMD_WARNING; \ | #define VTY_GET_INTEGER_RANGE_HEART(NAME,TMPL,STR,MIN,MAX) \ |
| } \ | do { \ |
| (V) = tmpl; \ | VTY_GET_ULONG(NAME, (TMPL), STR); \ |
| | if ( ((TMPL) <= (MIN) && (TMPL) != (MIN)) || (TMPL) > (MAX) ) \ |
| | { \ |
| | vty_out (vty, "%% Invalid %s value%s", NAME, VTY_NEWLINE);\ |
| | return CMD_WARNING; \ |
| | } \ |
| } while (0) |
} while (0) |
| |
|
| #define VTY_GET_INTEGER(NAME,V,STR) \ | #define VTY_GET_INTEGER_RANGE(NAME,V,STR,MIN,MAX) \ |
| VTY_GET_INTEGER_RANGE(NAME,V,STR,0U,UINT32_MAX) | do { \ |
| | unsigned long tmpl; \ |
| | VTY_GET_INTEGER_RANGE_HEART(NAME,tmpl,STR,MIN,MAX); \ |
| | (V) = tmpl; \ |
| | } while (0) |
| |
|
| |
#define VTY_CHECK_INTEGER_RANGE(NAME,STR,MIN,MAX) \ |
| |
do { \ |
| |
unsigned long tmpl; \ |
| |
VTY_GET_INTEGER_RANGE_HEART(NAME,tmpl,STR,MIN,MAX); \ |
| |
} while (0) |
| |
|
| |
#define VTY_GET_INTEGER(NAME,V,STR) \ |
| |
VTY_GET_INTEGER_RANGE(NAME,V,STR,0U,UINT32_MAX) |
| |
|
| #define VTY_GET_IPV4_ADDRESS(NAME,V,STR) \ |
#define VTY_GET_IPV4_ADDRESS(NAME,V,STR) \ |
| do { \ |
do { \ |
| int retv; \ |
int retv; \ |
|
Line 197 do {
|
Line 220 do {
|
| } \ |
} \ |
| } while (0) |
} while (0) |
| |
|
| |
#define VTY_WARN_EXPERIMENTAL() \ |
| |
do { \ |
| |
vty_out (vty, "%% WARNING: this command is experimental. Both its name and" \ |
| |
" parameters may%s%% change in a future version of Quagga," \ |
| |
" possibly breaking your configuration!%s", \ |
| |
VTY_NEWLINE, VTY_NEWLINE); \ |
| |
} while (0) |
| |
|
| /* Exported variables */ |
/* Exported variables */ |
| extern char integrate_default[]; |
extern char integrate_default[]; |
| |
|
|
Line 206 extern void vty_init_vtysh (void);
|
Line 237 extern void vty_init_vtysh (void);
|
| extern void vty_terminate (void); |
extern void vty_terminate (void); |
| extern void vty_reset (void); |
extern void vty_reset (void); |
| extern struct vty *vty_new (void); |
extern struct vty *vty_new (void); |
| |
extern struct vty *vty_stdio (void (*atclose)(void)); |
| extern int vty_out (struct vty *, const char *, ...) PRINTF_ATTRIBUTE(2, 3); |
extern int vty_out (struct vty *, const char *, ...) PRINTF_ATTRIBUTE(2, 3); |
| extern void vty_read_config (char *, char *); |
extern void vty_read_config (char *, char *); |
| extern void vty_time_print (struct vty *, int); |
extern void vty_time_print (struct vty *, int); |
|
Line 222 extern void vty_hello (struct vty *);
|
Line 254 extern void vty_hello (struct vty *);
|
| |
|
| /* Send a fixed-size message to all vty terminal monitors; this should be |
/* Send a fixed-size message to all vty terminal monitors; this should be |
| an async-signal-safe function. */ |
an async-signal-safe function. */ |
| extern void vty_log_fixed (const char *buf, size_t len); | extern void vty_log_fixed (char *buf, size_t len); |
| |
|
| #endif /* _ZEBRA_VTY_H */ |
#endif /* _ZEBRA_VTY_H */ |