lqnatthresh: maintain an advantage for the current (NAT) inet gw
[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  */
40
41
42 #ifndef _OLSRD_CFGPARSER_H
43 #define _OLSRD_CFGPARSER_H
44
45 #include "olsr_types.h"
46
47 #ifndef LINUX_POLICY_ROUTING
48 #if defined linux
49 #  define LINUX_POLICY_ROUTING 1
50 #else
51 #  define LINUX_POLICY_ROUTING 0
52 #endif
53 #endif
54
55 /* Default values not declared in olsr_protocol.h */
56 #define DEF_POLLRATE        0.05
57 #define DEF_NICCHGPOLLRT    2.5
58 #define DEF_WILL_AUTO       OLSR_TRUE
59 #define DEF_ALLOW_NO_INTS   OLSR_TRUE
60 #define DEF_TOS             16
61 #define DEF_DEBUGLVL        1
62 #define DEF_IPC_CONNECTIONS 0
63 #define DEF_USE_HYST        OLSR_FALSE
64 #define DEF_FIB_METRIC      FIBM_FLAT
65 #define DEF_LQ_LEVEL        2
66 #define DEF_LQ_FISH         0
67 #define DEF_LQ_DIJK_LIMIT   255
68 #define DEF_LQ_DIJK_INTER   0.0
69 #define DEF_LQ_NAT_THRESH   1.0
70 #define DEF_LQ_WSIZE        12
71 #define DEF_CLEAR_SCREEN    OLSR_FALSE
72
73 /* Bounds */
74
75 #define MIN_INTERVAL        0.01
76
77 #define MAX_POLLRATE        10.0
78 #define MIN_POLLRATE        0.01
79 #define MAX_NICCHGPOLLRT    100.0
80 #define MIN_NICCHGPOLLRT    1.0
81 #define MAX_DEBUGLVL        9
82 #define MIN_DEBUGLVL        0
83 #define MAX_TOS             16
84 #define MIN_TOS             0
85 #define MAX_WILLINGNESS     7
86 #define MIN_WILLINGNESS     0
87 #define MAX_MPR_COVERAGE    20
88 #define MIN_MPR_COVERAGE    1
89 #define MAX_TC_REDUNDANCY   2
90 #define MIN_TC_REDUNDANCY   0
91 #define MAX_HYST_PARAM      1.0
92 #define MIN_HYST_PARAM      0.0
93 #define MAX_LQ_LEVEL        2
94 #define MIN_LQ_LEVEL        0
95 #define MAX_LQ_WSIZE        128
96 #define MIN_LQ_WSIZE        3
97
98 /* Option values */
99 #define CFG_FIBM_FLAT          "flat"
100 #define CFG_FIBM_CORRECT       "correct"
101 #define CFG_FIBM_APPROX        "approx"
102
103 #ifndef IPV6_ADDR_SITELOCAL
104 #define IPV6_ADDR_SITELOCAL    0x0040U
105 #endif
106
107 #include "interfaces.h"
108
109 struct olsr_msg_params
110 {
111   float                    emission_interval;
112   float                    validity_time;
113 };
114
115 struct olsr_lq_mult
116 {
117   union olsr_ip_addr addr;
118   float val;
119   struct olsr_lq_mult *next;
120 };
121
122 struct olsr_if_weight
123 {
124   int        value;
125   olsr_bool  fixed;
126 };
127
128 struct if_config_options
129 {
130   union olsr_ip_addr       ipv4_broadcast;
131   int                      ipv6_addrtype;
132   union olsr_ip_addr       ipv6_multi_site;
133   union olsr_ip_addr       ipv6_multi_glbl;
134   struct olsr_if_weight    weight;
135   struct olsr_msg_params   hello_params;
136   struct olsr_msg_params   tc_params;
137   struct olsr_msg_params   mid_params;
138   struct olsr_msg_params   hna_params;
139   struct olsr_lq_mult      *lq_mult;
140   olsr_bool                autodetect_chg;
141 };
142
143
144
145 struct olsr_if
146 {
147   char                     *name;
148   char                     *config;
149   olsr_bool                configured;
150   olsr_bool                host_emul;
151   union olsr_ip_addr       hemu_ip;
152   struct interface         *interf;
153   struct if_config_options *cnf;
154   struct olsr_if           *next;
155 };
156
157 struct ip_prefix_list
158 {
159   struct olsr_ip_prefix    net;
160   struct ip_prefix_list    *next;
161 };
162
163 struct hyst_param
164 {
165   float                    scaling;
166   float                    thr_high;
167   float                    thr_low;
168 };
169
170 struct plugin_param
171 {
172   char                     *key;
173   char                     *value;
174   struct plugin_param      *next;
175 };
176
177 struct plugin_entry
178 {
179   char                     *name;
180   struct plugin_param      *params;
181   struct plugin_entry      *next;
182 };
183
184
185 typedef enum {
186   FIBM_FLAT,
187   FIBM_CORRECT,
188   FIBM_APPROX
189 } olsr_fib_metric_options;
190
191 /*
192  * The config struct
193  */
194
195 struct olsrd_config
196 {
197   int                      debug_level;
198   olsr_bool                no_fork;
199   olsr_bool                host_emul;
200   int                      ip_version;
201   olsr_bool                allow_no_interfaces;
202   olsr_u16_t               tos;
203   olsr_u8_t                rttable;
204   olsr_u8_t                willingness;
205   olsr_bool                willingness_auto;
206   int                      ipc_connections;
207   olsr_bool                use_hysteresis;
208   olsr_fib_metric_options  fib_metric;
209   struct hyst_param        hysteresis_param;
210   struct plugin_entry      *plugins;
211   struct ip_prefix_list    *hna_entries;
212   struct ip_prefix_list    *ipc_nets;
213   struct olsr_if           *interfaces;
214   float                    pollrate;
215   float                    nic_chgs_pollrate;
216   olsr_bool                clear_screen;
217   olsr_u8_t                tc_redundancy;
218   olsr_u8_t                mpr_coverage;
219   olsr_u8_t                lq_level;
220   olsr_u8_t                lq_fish;
221   float                    lq_dinter;
222   olsr_u32_t               lq_wsize;
223   olsr_u8_t                lq_dlimit;
224
225   /* Stuff set by olsrd */
226   olsr_u16_t               system_tick_divider;  /* Tick resolution */
227   olsr_u8_t                maxplen;              /* maximum prefix len */
228   size_t                   ipsize;               /* Size of address */
229   olsr_bool                del_gws;              /* Delete InternetGWs at startup */
230   union olsr_ip_addr       main_addr;            /* Main address of this node */
231   float                    will_int;
232   float                    max_jitter;
233   int                      exit_value;           /* Global return value for process termination */
234   float                    max_tc_vtime;
235
236   int                      ioctl_s;              /* Socket used for ioctl calls */
237 #if LINUX_POLICY_ROUTING
238   int                      rtnl_s;               /* Socket used for rtnetlink messages */
239 #endif
240
241 #if defined __FreeBSD__ || defined __MacOSX__ || defined __NetBSD__ || defined __OpenBSD__
242   int                      rts;                  /* Socket used for route changes on BSDs */
243 #endif
244   float                    lq_nat_thresh;
245 };
246
247 #if defined __cplusplus
248 extern "C" {
249 #endif
250
251
252 /*
253  * List functions
254  */
255
256 void ip_prefix_list_add(struct ip_prefix_list **, const union olsr_ip_addr *, olsr_u8_t);
257
258 int ip_prefix_list_remove(struct ip_prefix_list **, const union olsr_ip_addr *, olsr_u8_t);
259
260 struct ip_prefix_list *ip_prefix_list_find(struct ip_prefix_list *, const union olsr_ip_addr *net, olsr_u8_t prefix_len);
261
262
263 /*
264  * Interface to parser
265  */
266
267 struct olsrd_config *
268 olsrd_parse_cnf(const char *);
269
270 int
271 olsrd_sanity_check_cnf(struct olsrd_config *);
272
273 void
274 olsrd_free_cnf(struct olsrd_config *);
275
276 void
277 olsrd_print_cnf(struct olsrd_config *);
278
279 int
280 olsrd_write_cnf(struct olsrd_config *, const char *);
281
282 int
283 olsrd_write_cnf_buf(struct olsrd_config *, char *, olsr_u32_t);
284
285 struct if_config_options *
286 get_default_if_config(void);
287
288 struct olsrd_config *
289 olsrd_get_default_cnf(void);
290
291 #if defined WIN32
292 void 
293 win32_stdio_hack(unsigned int);
294
295 void*
296 win32_olsrd_malloc(size_t size);
297
298 void
299 win32_olsrd_free(void* ptr);
300 #endif
301
302 #if defined __cplusplus
303 }
304 #endif
305
306 #endif
307
308 /*
309  * Local Variables:
310  * c-basic-offset: 2
311  * End:
312  */