* more fixups for the generated .c file
[olsrd.git] / src / olsr_cfg.h
1 /*
2  * The olsr.org Optimized Link-State Routing daemon(olsrd)
3  * Copyright (c) 2004, Andreas T√łnnesen(andreto@olsr.org)
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without 
7  * modification, are permitted provided that the following conditions 
8  * are met:
9  *
10  * * Redistributions of source code must retain the above copyright 
11  *   notice, this list of conditions and the following disclaimer.
12  * * Redistributions in binary form must reproduce the above copyright 
13  *   notice, this list of conditions and the following disclaimer in 
14  *   the documentation and/or other materials provided with the 
15  *   distribution.
16  * * Neither the name of olsr.org, olsrd nor the names of its 
17  *   contributors may be used to endorse or promote products derived 
18  *   from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
23  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
24  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
26  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
27  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
28  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
30  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
31  * POSSIBILITY OF SUCH DAMAGE.
32  *
33  * Visit http://www.olsr.org for more information.
34  *
35  * If you find this software useful feel free to make a donation
36  * to the project. For more information see the website or contact
37  * the copyright holders.
38  *
39  * $Id: olsr_cfg.h,v 1.30 2006/04/17 18:31:09 kattemat Exp $
40  */
41
42
43 #ifndef _OLSRD_CFGPARSER_H
44 #define _OLSRD_CFGPARSER_H
45
46 #include "olsr_types.h"
47
48 /* Default valuse not declared in olsr_protocol.h */
49 #define DEF_POLLRATE        0.05
50 #define DEF_NICCHGPOLLRT    2.5
51 #define DEF_WILL_AUTO       OLSR_TRUE
52 #define DEF_ALLOW_NO_INTS   OLSR_TRUE
53 #define DEF_TOS             16
54 #define DEF_DEBUGLVL        1
55 #define DEF_IPC_CONNECTIONS 0
56 #define DEF_USE_HYST        OLSR_FALSE
57 #define DEF_LQ_LEVEL        2
58 #define DEF_LQ_FISH         0
59 #define DEF_LQ_DIJK_LIMIT   255
60 #define DEF_LQ_DIJK_INTER   0.0
61 #define DEF_LQ_WSIZE        10
62 #define DEF_CLEAR_SCREEN    OLSR_FALSE
63
64 /* Bounds */
65
66 #define MIN_INTERVAL        0.01
67
68 #define MAX_POLLRATE        10.0
69 #define MIN_POLLRATE        0.01
70 #define MAX_NICCHGPOLLRT    100.0
71 #define MIN_NICCHGPOLLRT    1.0
72 #define MAX_DEBUGLVL        9
73 #define MIN_DEBUGLVL        0
74 #define MAX_TOS             16
75 #define MIN_TOS             0
76 #define MAX_WILLINGNESS     7
77 #define MIN_WILLINGNESS     0
78 #define MAX_MPR_COVERAGE    20
79 #define MIN_MPR_COVERAGE    1
80 #define MAX_TC_REDUNDANCY   2
81 #define MIN_TC_REDUNDANCY   0
82 #define MAX_HYST_PARAM      1.0
83 #define MIN_HYST_PARAM      0.0
84 #define MAX_LQ_LEVEL        2
85 #define MIN_LQ_LEVEL        0
86 #define MAX_LQ_WSIZE        128
87 #define MIN_LQ_WSIZE        3
88
89 #ifndef IPV6_ADDR_SITELOCAL
90 #define IPV6_ADDR_SITELOCAL    0x0040U
91 #endif
92
93 #include "interfaces.h"
94
95 struct olsr_msg_params
96 {
97   float                    emission_interval;
98   float                    validity_time;
99 };
100
101 struct olsr_lq_mult
102 {
103   union olsr_ip_addr addr;
104   float val;
105   struct olsr_lq_mult *next;
106 };
107
108 struct olsr_if_weight
109 {
110   int        value;
111   olsr_bool  fixed;
112 };
113
114 struct if_config_options
115 {
116   union olsr_ip_addr       ipv4_broadcast;
117   int                      ipv6_addrtype;
118   union olsr_ip_addr       ipv6_multi_site;
119   union olsr_ip_addr       ipv6_multi_glbl;
120   struct olsr_if_weight    weight;
121   struct olsr_msg_params   hello_params;
122   struct olsr_msg_params   tc_params;
123   struct olsr_msg_params   mid_params;
124   struct olsr_msg_params   hna_params;
125   struct olsr_lq_mult      *lq_mult;
126   olsr_bool                autodetect_chg;
127 };
128
129
130
131 struct olsr_if
132 {
133   char                     *name;
134   char                     *config;
135   int                      index;
136   olsr_bool                configured;
137   olsr_bool                host_emul;
138   union olsr_ip_addr       hemu_ip;
139   struct interface         *interf;
140   struct if_config_options *cnf;
141   struct olsr_if           *next;
142 };
143
144 struct hna4_entry
145 {
146   union olsr_ip_addr       net;
147   union olsr_ip_addr       netmask;
148   struct hna4_entry        *next;
149 };
150
151 struct hna6_entry
152 {
153   union olsr_ip_addr       net;
154   olsr_u16_t               prefix_len;
155   struct hna6_entry        *next;
156 };
157
158 struct hyst_param
159 {
160   float                    scaling;
161   float                    thr_high;
162   float                    thr_low;
163 };
164
165 struct plugin_param
166 {
167   char                     *key;
168   char                     *value;
169   struct plugin_param      *next;
170 };
171
172 struct plugin_entry
173 {
174   char                     *name;
175   struct plugin_param      *params;
176   struct plugin_entry      *next;
177 };
178
179 struct ipc_host
180 {
181   union olsr_ip_addr       host;
182   struct ipc_host          *next;
183 };
184
185 struct ipc_net
186 {
187   union olsr_ip_addr       net;
188   union olsr_ip_addr       mask;
189   struct ipc_net           *next;
190 };
191
192 /*
193  * The config struct
194  */
195
196 struct olsrd_config
197 {
198   int                      debug_level;
199   olsr_bool                no_fork;
200   olsr_bool                host_emul;
201   int                      ip_version;
202   olsr_bool                allow_no_interfaces;
203   olsr_u16_t               tos;
204   olsr_bool                willingness_auto;
205   olsr_u8_t                willingness;
206   int                      ipc_connections;
207   olsr_bool                open_ipc;
208   olsr_bool                use_hysteresis;
209   struct hyst_param        hysteresis_param;
210   float                    pollrate;
211   float                    nic_chgs_pollrate;
212   olsr_u8_t                tc_redundancy;
213   olsr_u8_t                mpr_coverage;
214   olsr_bool                clear_screen;
215   olsr_u8_t                lq_level;
216   olsr_u32_t               lq_wsize;
217   olsr_u8_t                lq_fish;
218   olsr_u8_t                lq_dlimit;
219   float                    lq_dinter;
220   struct plugin_entry      *plugins;
221   struct hna4_entry        *hna4_entries;
222   struct hna6_entry        *hna6_entries;
223   struct ipc_host          *ipc_hosts;
224   struct ipc_net           *ipc_nets;
225   struct olsr_if           *interfaces;
226   olsr_u16_t               ifcnt;
227
228   /* Stuff set by olsrd */
229   size_t                   ipsize;               /* Size of address */
230   olsr_u16_t               system_tick_divider;  /* Tick resolution */
231   olsr_bool                del_gws;              /* Delete InternetGWs at startup */
232   union olsr_ip_addr       main_addr;            /* Main address of this node */
233   float                    will_int;
234   float                    max_jitter;
235   int                      exit_value; /* Global return value for process termination */
236   float                    max_tc_vtime;
237
238   int                      ioctl_s;              /* Socket used for ioctl calls */
239   int                      rts;                  /* Socket used for route changes on BSDs */
240 };
241
242 #if defined __cplusplus
243 extern "C" {
244 #endif
245
246 /*
247  * Interface to parser
248  */
249
250 struct olsrd_config *
251 olsrd_parse_cnf(const char *);
252
253 int
254 olsrd_sanity_check_cnf(struct olsrd_config *);
255
256 void
257 olsrd_free_cnf(struct olsrd_config *);
258
259 void
260 olsrd_print_cnf(struct olsrd_config *);
261
262 int
263 olsrd_write_cnf(struct olsrd_config *, const char *);
264
265 int
266 olsrd_write_cnf_buf(struct olsrd_config *, char *, olsr_u32_t);
267
268 struct if_config_options *
269 get_default_if_config(void);
270
271 struct olsrd_config *
272 olsrd_get_default_cnf(void);
273
274 void *
275 olsrd_cnf_malloc(unsigned int);
276
277 void
278 olsrd_cnf_free(void *);
279
280 #if defined __cplusplus
281 }
282 #endif
283
284 #endif