Statistics
| Branch: | Revision:

iof-bird-daemon / conf / conf.h @ bc7f4e0e

History | View | Annotate | Download (5.4 KB)

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
  char *err_msg;                        /* Parser error message */
45
  int err_lino;                                /* Line containing error */
46
  char *err_file_name;                        /* File name containing error */
47
  char *file_name;                        /* Name of main configuration file */
48
  int file_fd;                                /* File descriptor of main configuration file */
49
  struct symbol **sym_hash;                /* Lexer: symbol hash table */
50
  struct symbol **sym_fallback;                /* Lexer: fallback symbol hash table */
51
  int obstacle_count;                        /* Number of items blocking freeing of this config */
52
  int shutdown;                                /* This is a pseudo-config for daemon shutdown */
53
  bird_clock_t load_time;                /* When we've got this configuration */
54
};
55

    
56
/* Please don't use these variables in protocols. Use proto_config->global instead. */
57
extern struct config *config;                /* Currently active configuration */
58
extern struct config *new_config;        /* Configuration being parsed */
59

    
60
struct config *config_alloc(byte *name);
61
int config_parse(struct config *);
62
int cli_parse(struct config *);
63
void config_free(struct config *);
64
int config_commit(struct config *, int type, int timeout);
65
int config_confirm(void);
66
int config_undo(void);
67
void config_init(void);
68
void cf_error(char *msg, ...) NORET;
69
void config_add_obstacle(struct config *);
70
void config_del_obstacle(struct config *);
71
void order_shutdown(void);
72

    
73
#define RECONFIG_NONE        0
74
#define RECONFIG_HARD        1
75
#define RECONFIG_SOFT        2
76
#define RECONFIG_UNDO        3
77

    
78
#define CONF_DONE        0
79
#define CONF_PROGRESS        1
80
#define CONF_QUEUED        2
81
#define CONF_UNQUEUED        3
82
#define CONF_CONFIRM        4
83
#define CONF_SHUTDOWN        -1
84
#define CONF_NOTHING        -2
85

    
86

    
87
/* Pools */
88

    
89
extern linpool *cfg_mem;
90

    
91
#define cfg_alloc(size) lp_alloc(cfg_mem, size)
92
#define cfg_allocu(size) lp_allocu(cfg_mem, size)
93
#define cfg_allocz(size) lp_allocz(cfg_mem, size)
94
char *cfg_strdup(char *c);
95
void cfg_copy_list(list *dest, list *src, unsigned node_size);
96

    
97
/* Lexer */
98

    
99
extern int (*cf_read_hook)(byte *buf, unsigned int max, int fd);
100

    
101
struct symbol {
102
  struct symbol *next;
103
  struct sym_scope *scope;
104
  int class;
105
  int aux;
106
  void *aux2;
107
  void *def;
108
  char name[1];
109
};
110

    
111
#define SYM_MAX_LEN 64
112

    
113
/* Remember to update cf_symbol_class_name() */
114
#define SYM_VOID 0
115
#define SYM_PROTO 1
116
#define SYM_TEMPLATE 2
117
#define SYM_FUNCTION 3
118
#define SYM_FILTER 4
119
#define SYM_TABLE 5
120
#define SYM_ROA 6
121

    
122
#define SYM_VARIABLE 0x100        /* 0x100-0x1ff are variable types */
123
#define SYM_CONSTANT 0x200        /* 0x200-0x2ff are variable types */
124

    
125
#define SYM_TYPE(s) (((struct f_val *) (s)->def)->type)
126
#define SYM_VAL(s) (((struct f_val *) (s)->def)->val)
127

    
128
struct include_file_stack {
129
  void *buffer;                                /* Internal lexer state */
130
  char *file_name;                        /* File name */
131
  int fd;                                /* File descriptor */
132
  int lino;                                /* Current line num */
133
  int depth;                                /* Include depth, 0 = cannot include */
134

    
135
  struct include_file_stack *prev;        /* Previous record in stack */
136
  struct include_file_stack *up;        /* Parent (who included this file) */
137
};
138

    
139
extern struct include_file_stack *ifs;
140

    
141

    
142
int cf_lex(void);
143
void cf_lex_init(int is_cli, struct config *c);
144
void cf_lex_unwind(void);
145

    
146
struct symbol *cf_find_symbol(byte *c);
147
struct symbol *cf_default_name(char *template, int *counter);
148
struct symbol *cf_define_symbol(struct symbol *symbol, int type, void *def);
149
void cf_push_scope(struct symbol *);
150
void cf_pop_scope(void);
151
struct symbol *cf_walk_symbols(struct config *cf, struct symbol *sym, int *pos);
152
char *cf_symbol_class_name(struct symbol *sym);
153

    
154
static inline int cf_symbol_is_constant(struct symbol *sym)
155
{ return (sym->class & 0xff00) == SYM_CONSTANT; }
156

    
157

    
158
/* Parser */
159

    
160
int cf_parse(void);
161

    
162
/* Sysdep hooks */
163

    
164
void sysdep_preconfig(struct config *);
165
int sysdep_commit(struct config *, struct config *);
166
void sysdep_shutdown_done(void);
167

    
168
#endif