]> git.ipfire.org Git - thirdparty/bird.git/blob - conf/conf.h
unsigned [int] -> uint
[thirdparty/bird.git] / conf / conf.h
1 /*
2 * BIRD Internet Routing Daemon -- Configuration File Handling
3 *
4 * (c) 1998--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_CONF_H_
10 #define _BIRD_CONF_H_
11
12 #include "lib/resource.h"
13 #include "lib/timer.h"
14
15
16 /* Configuration structure */
17
18 struct config {
19 pool *pool; /* Pool the configuration is stored in */
20 linpool *mem; /* Linear pool containing configuration data */
21 list protos; /* Configured protocol instances (struct proto_config) */
22 list tables; /* Configured routing tables (struct rtable_config) */
23 list roa_tables; /* Configured ROA tables (struct roa_table_config) */
24 list logfiles; /* Configured log fils (sysdep) */
25
26 int mrtdump_file; /* Configured MRTDump file (sysdep, fd in unix) */
27 char *syslog_name; /* Name used for syslog (NULL -> no syslog) */
28 struct rtable_config *master_rtc; /* Configuration of master routing table */
29 struct iface_patt *router_id_from; /* Configured list of router ID iface patterns */
30
31 u32 router_id; /* Our Router ID */
32 ip_addr listen_bgp_addr; /* Listening BGP socket should use this address */
33 unsigned listen_bgp_port; /* Listening BGP socket should use this port (0 is default) */
34 u32 listen_bgp_flags; /* Listening BGP socket should use these flags */
35 unsigned proto_default_debug; /* Default protocol debug mask */
36 unsigned proto_default_mrtdump; /* Default protocol mrtdump mask */
37 struct timeformat tf_route; /* Time format for 'show route' */
38 struct timeformat tf_proto; /* Time format for 'show protocol' */
39 struct timeformat tf_log; /* Time format for the logfile */
40 struct timeformat tf_base; /* Time format for other purposes */
41 u32 gr_wait; /* Graceful restart wait timeout */
42
43 int cli_debug; /* Tracing of CLI connections and commands */
44 int latency_debug; /* I/O loop tracks duration of each event */
45 u32 latency_limit; /* Events with longer duration are logged (us) */
46 u32 watchdog_warning; /* I/O loop watchdog limit for warning (us) */
47 u32 watchdog_timeout; /* Watchdog timeout (in seconds, 0 = disabled) */
48 char *err_msg; /* Parser error message */
49 int err_lino; /* Line containing error */
50 char *err_file_name; /* File name containing error */
51 char *file_name; /* Name of main configuration file */
52 int file_fd; /* File descriptor of main configuration file */
53 struct symbol **sym_hash; /* Lexer: symbol hash table */
54 struct symbol **sym_fallback; /* Lexer: fallback symbol hash table */
55 int obstacle_count; /* Number of items blocking freeing of this config */
56 int shutdown; /* This is a pseudo-config for daemon shutdown */
57 bird_clock_t load_time; /* When we've got this configuration */
58 };
59
60 /* Please don't use these variables in protocols. Use proto_config->global instead. */
61 extern struct config *config; /* Currently active configuration */
62 extern struct config *new_config; /* Configuration being parsed */
63
64 struct config *config_alloc(byte *name);
65 int config_parse(struct config *);
66 int cli_parse(struct config *);
67 void config_free(struct config *);
68 int config_commit(struct config *, int type, int timeout);
69 int config_confirm(void);
70 int config_undo(void);
71 void config_init(void);
72 void cf_error(char *msg, ...) NORET;
73 void config_add_obstacle(struct config *);
74 void config_del_obstacle(struct config *);
75 void order_shutdown(void);
76
77 #define RECONFIG_NONE 0
78 #define RECONFIG_HARD 1
79 #define RECONFIG_SOFT 2
80 #define RECONFIG_UNDO 3
81
82 #define CONF_DONE 0
83 #define CONF_PROGRESS 1
84 #define CONF_QUEUED 2
85 #define CONF_UNQUEUED 3
86 #define CONF_CONFIRM 4
87 #define CONF_SHUTDOWN -1
88 #define CONF_NOTHING -2
89
90
91 /* Pools */
92
93 extern linpool *cfg_mem;
94
95 #define cfg_alloc(size) lp_alloc(cfg_mem, size)
96 #define cfg_allocu(size) lp_allocu(cfg_mem, size)
97 #define cfg_allocz(size) lp_allocz(cfg_mem, size)
98 char *cfg_strdup(char *c);
99 void cfg_copy_list(list *dest, list *src, unsigned node_size);
100
101 /* Lexer */
102
103 extern int (*cf_read_hook)(byte *buf, uint max, int fd);
104
105 struct symbol {
106 struct symbol *next;
107 struct sym_scope *scope;
108 int class;
109 int aux;
110 void *aux2;
111 void *def;
112 char name[1];
113 };
114
115 #define SYM_MAX_LEN 64
116
117 /* Remember to update cf_symbol_class_name() */
118 #define SYM_VOID 0
119 #define SYM_PROTO 1
120 #define SYM_TEMPLATE 2
121 #define SYM_FUNCTION 3
122 #define SYM_FILTER 4
123 #define SYM_TABLE 5
124 #define SYM_ROA 6
125
126 #define SYM_VARIABLE 0x100 /* 0x100-0x1ff are variable types */
127 #define SYM_CONSTANT 0x200 /* 0x200-0x2ff are variable types */
128
129 #define SYM_TYPE(s) (((struct f_val *) (s)->def)->type)
130 #define SYM_VAL(s) (((struct f_val *) (s)->def)->val)
131
132 struct include_file_stack {
133 void *buffer; /* Internal lexer state */
134 char *file_name; /* File name */
135 int fd; /* File descriptor */
136 int lino; /* Current line num */
137 int depth; /* Include depth, 0 = cannot include */
138
139 struct include_file_stack *prev; /* Previous record in stack */
140 struct include_file_stack *up; /* Parent (who included this file) */
141 };
142
143 extern struct include_file_stack *ifs;
144
145
146 int cf_lex(void);
147 void cf_lex_init(int is_cli, struct config *c);
148 void cf_lex_unwind(void);
149
150 struct symbol *cf_find_symbol(byte *c);
151 struct symbol *cf_default_name(char *template, int *counter);
152 struct symbol *cf_define_symbol(struct symbol *symbol, int type, void *def);
153 void cf_push_scope(struct symbol *);
154 void cf_pop_scope(void);
155 struct symbol *cf_walk_symbols(struct config *cf, struct symbol *sym, int *pos);
156 char *cf_symbol_class_name(struct symbol *sym);
157
158 static inline int cf_symbol_is_constant(struct symbol *sym)
159 { return (sym->class & 0xff00) == SYM_CONSTANT; }
160
161
162 /* Parser */
163
164 int cf_parse(void);
165
166 /* Sysdep hooks */
167
168 void sysdep_preconfig(struct config *);
169 int sysdep_commit(struct config *, struct config *);
170 void sysdep_shutdown_done(void);
171
172 #endif