File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / bird / conf / conf.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Aug 22 12:33:54 2017 UTC (6 years, 10 months ago) by misho
Branches: bird, MAIN
CVS tags: v1_6_3p0, v1_6_3, HEAD
bird 1.6.3

    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 files (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(const 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(const 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(struct config *cfg, byte *c);
  151: 
  152: struct symbol *cf_get_symbol(byte *c);
  153: struct symbol *cf_default_name(char *template, int *counter);
  154: struct symbol *cf_define_symbol(struct symbol *symbol, int type, void *def);
  155: void cf_push_scope(struct symbol *);
  156: void cf_pop_scope(void);
  157: struct symbol *cf_walk_symbols(struct config *cf, struct symbol *sym, int *pos);
  158: char *cf_symbol_class_name(struct symbol *sym);
  159: 
  160: static inline int cf_symbol_is_constant(struct symbol *sym)
  161: { return (sym->class & 0xff00) == SYM_CONSTANT; }
  162: 
  163: 
  164: /* Parser */
  165: 
  166: int cf_parse(void);
  167: 
  168: /* Sysdep hooks */
  169: 
  170: void sysdep_preconfig(struct config *);
  171: int sysdep_commit(struct config *, struct config *);
  172: void sysdep_shutdown_done(void);
  173: 
  174: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>