New configfile parser and configuration scheme integrated
[olsrd.git] / src / olsrd_cfgparser.h
1 /*
2  * OLSR ad-hoc routing table management protocol config parser
3  * Copyright (C) 2004 Andreas T√łnnesen (andreto@olsr.org)
4  *
5  * This file is part of the olsr.org OLSR daemon.
6  *
7  * olsr.org is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * olsr.org is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with olsr.org; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20  * 
21  * 
22  * $Id: olsrd_cfgparser.h,v 1.1 2004/10/18 13:13:37 kattemat Exp $
23  *
24  */
25
26
27 #ifndef _OLSRD_CFGPARSER_H
28 #define _OLSRD_CFGPARSER_H
29
30
31 #ifndef IPV6_ADDR_SITELOCAL
32 #define IPV6_ADDR_SITELOCAL    0x0040U
33 #endif
34
35 #include "olsr_protocol.h"
36
37 #define DEFAULT_IF_CONFIG_NAME "default_ifcfg"
38
39 struct olsr_msg_params
40 {
41   float                    emission_interval;
42   float                    validity_time;
43 };
44
45 struct if_config_options
46 {
47   char                     *name;
48   union olsr_ip_addr       ipv4_broadcast;
49   int                      ipv6_addrtype;
50   union olsr_ip_addr       ipv6_multi_site;
51   union olsr_ip_addr       ipv6_multi_glbl;
52   struct olsr_msg_params   hello_params;
53   struct olsr_msg_params   tc_params;
54   struct olsr_msg_params   mid_params;
55   struct olsr_msg_params   hna_params;
56   struct if_config_options *next;
57 };
58
59 struct olsr_if
60 {
61   char                     *name;
62   char                     *config;
63   struct if_config_options *if_options;
64   struct olsr_if           *next;
65 };
66
67 struct hna4_entry
68 {
69   olsr_u32_t               net;
70   olsr_u32_t               netmask;
71   struct hna4_entry        *next;
72 };
73
74 struct hna6_entry
75 {
76   union olsr_ip_addr       net;
77   olsr_u16_t               prefix_len;
78   struct hna6_entry        *next;
79 };
80
81 struct hyst_param
82 {
83   float                    scaling;
84   float                    thr_high;
85   float                    thr_low;
86 };
87
88 struct plugin_entry
89 {
90   char                     *name;
91   struct plugin_entry      *next;
92 };
93
94 /*
95  * The config struct
96  */
97
98 struct olsrd_config
99 {
100   int                      debug_level;
101   int                      ip_version;
102   olsr_u8_t                allow_no_interfaces;
103   olsr_u16_t               tos;
104   olsr_u8_t                willingness_auto;
105   olsr_u8_t                willingness;
106   olsr_u8_t                open_ipc;
107   olsr_u8_t                use_hysteresis;
108   struct hyst_param        hysteresis_param;
109   float                    pollrate;
110   olsr_u8_t                tc_redundancy;
111   olsr_u8_t                mpr_coverage;
112   struct plugin_entry      *plugins;
113   struct hna4_entry        *hna4_entries;
114   struct hna6_entry        *hna6_entries;
115   struct olsr_if           *interfaces;
116   struct if_config_options *if_options;
117 };
118
119
120 /*
121  * Interface to parser
122  */
123
124 struct olsrd_config *
125 olsrd_parse_cnf(char *);
126
127 struct olsrd_config *
128 olsrd_get_default_cnf(void);
129
130 void
131 olsrd_free_cnf(struct olsrd_config *);
132
133 void
134 olsrd_print_cnf(struct olsrd_config *);
135
136 int
137 olsrd_write_cnf(struct olsrd_config *, char *);
138
139 #endif