1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
|
/* VTY external interface -- header
* Copyright (C) 1997, 98 Kunihiro Ishiguro
*
* Revisions: Copyright (C) 2010 Chris Hall (GMCH), Highwayman
*
* This file is part of GNU Zebra.
*
* GNU Zebra is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2, or (at your option) any
* later version.
*
* GNU Zebra is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Zebra; see the file COPYING. If not, write to the Free
* Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef _ZEBRA_VTY_H
#define _ZEBRA_VTY_H
#include "misc.h"
#include "vargs.h"
#include "command_common.h" /* NB: *not* command.h */
#include "vty_common.h" /* struct vty & VTY types */
#include "thread.h"
#include "log.h"
#include "qpthreads.h"
#include "qpselect.h"
#include "qtimers.h"
#include "qpnexus.h"
#include "list_util.h"
#include "vector.h"
#include "qstring.h"
#include "qpath.h"
/*==============================================================================
* These are definitions and functions for things which are required outside
* the vty and command family.
*/
/*------------------------------------------------------------------------------
*
*/
enum { VTY_HIST_COUNT = 55 } ;
/* Integrated configuration file. */
#define INTEGRATE_DEFAULT_CONFIG "Quagga.conf"
/* Conversion of "\n" to "\r\n" is done at output time. */
#define VTY_NEWLINE "\n"
#define VTY_NL "\n"
/* For indenting, mostly. */
extern const char vty_spaces_string[] ;
enum { VTY_MAX_SPACES = 40 } ;
#define VTY_SPACES(n) (vty_spaces_string + ((n) < VTY_MAX_SPACES \
? VTY_MAX_SPACES - (n) : 0))
/* Vty read buffer size. */
#define VTY_READ_BUFSIZ 512
/* Directory separator. */
#ifndef DIRECTORY_SEP
#define DIRECTORY_SEP '/'
#endif /* DIRECTORY_SEP */
#ifndef IS_DIRECTORY_SEP
#define IS_DIRECTORY_SEP(c) ((c) == DIRECTORY_SEP)
#endif
/* Utility macros to convert VTY argument to unsigned long or integer. */
#define VTY_GET_LONG(NAME,V,STR) \
do { \
char *endptr = NULL; \
(V) = strtoul ((STR), &endptr, 0); \
if (*endptr != '\0' || (V) == ULONG_MAX) \
{ \
vty_out (vty, "%% Invalid %s value%s", NAME, VTY_NEWLINE); \
return CMD_WARNING; \
} \
} while (0)
#define VTY_GET_INTEGER_RANGE(NAME,V,STR,MIN,MAX) \
do { \
unsigned long tmpl; \
VTY_GET_LONG(NAME, tmpl, STR); \
if ( (tmpl < (MIN)) || (tmpl > (MAX))) \
{ \
vty_out (vty, "%% Invalid %s value%s", NAME, VTY_NEWLINE); \
return CMD_WARNING; \
} \
(V) = tmpl; \
} 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) \
do { \
int retv; \
retv = inet_aton ((STR), &(V)); \
if (!retv) \
{ \
vty_out (vty, "%% Invalid %s value%s", NAME, VTY_NEWLINE); \
return CMD_WARNING; \
} \
} while (0)
#define VTY_GET_IPV4_PREFIX(NAME,V,STR) \
do { \
int retv; \
retv = str2prefix_ipv4 ((STR), &(V)); \
if (retv <= 0) \
{ \
vty_out (vty, "%% Invalid %s value%s", NAME, VTY_NEWLINE); \
return CMD_WARNING; \
} \
} while (0)
/*------------------------------------------------------------------------------
* Exported variables
*/
extern char integrate_default[];
/*------------------------------------------------------------------------------
* Prototypes.
*/
extern void vty_init (struct thread_master *);
extern void vty_init_r (qpn_nexus, qpn_nexus);
extern void vty_start(const char *addr, unsigned short port, const char *path) ;
#define vty_serv_sock(addr, port, path) vty_start(addr, port, path)
extern void vty_restart(const char *addr, unsigned short port,
const char *path) ;
extern void vty_terminate (void);
extern void vty_reset (void);
extern void vty_reset_because(const char* why) ;
extern int vty_out (struct vty *, const char *, ...) PRINTF_ATTRIBUTE(2, 3);
extern int vty_write(struct vty *vty, const void* buf, int n) ;
extern int vty_out_indent(struct vty *vty, int indent) ;
extern void vty_out_clear(struct vty *vty) ;
extern void vty_sigchld(void) ;
extern void vty_read_config (const char* config_file,
const char* config_default);
extern void vty_read_config_first_cmd_special(const char* config_file,
const char* config_default,
cmd_command first_cmd,
bool ignore_warnings) ;
extern qpath vty_getcwd(qpath qp);
/*------------------------------------------------------------------------------
* vtysh
*/
extern void vty_hello (vty vty);
extern struct vty* vty_open(enum vty_type type, node_type_t node) ;
extern void vty_close_final(vty vty);
extern void vty_init_vtysh (void);
#endif /* _ZEBRA_VTY_H */
|