Simplify NIIT configuration to boolean
[olsrd.git] / src / olsr_cfg.h
1
2 /*
3  * The olsr.org Optimized Link-State Routing daemon(olsrd)
4  * Copyright (c) 2004, Andreas Tonnesen(andreto@olsr.org)
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * * Redistributions of source code must retain the above copyright
12  *   notice, this list of conditions and the following disclaimer.
13  * * Redistributions in binary form must reproduce the above copyright
14  *   notice, this list of conditions and the following disclaimer in
15  *   the documentation and/or other materials provided with the
16  *   distribution.
17  * * Neither the name of olsr.org, olsrd nor the names of its
18  *   contributors may be used to endorse or promote products derived
19  *   from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  * POSSIBILITY OF SUCH DAMAGE.
33  *
34  * Visit http://www.olsr.org for more information.
35  *
36  * If you find this software useful feel free to make a donation
37  * to the project. For more information see the website or contact
38  * the copyright holders.
39  *
40  */
41
42 #ifndef _OLSRD_CFGPARSER_H
43 #define _OLSRD_CFGPARSER_H
44
45 #include "olsr_types.h"
46
47 /*set to 1 to collect all startup sleep into one sleep (just as long as the longest sleep) useful if many errors on many interfaces*/
48 #define OLSR_COLLECT_STARTUP_SLEEP 1
49
50 /* set to 1 to enable a second rtnetlink socket 
51  * used for listening and reating on interface change events
52  * (requires LINUX_POLICY_ROUTING to be enabled aswell) */
53 #define LINUX_RTNETLINK_LISTEN 1
54
55 #define TESTLIB_PATH 0
56 #define SYSLOG_NUMBERING 0
57 #define SOURCE_IP_ROUTES 0
58
59 #ifndef LINUX_POLICY_ROUTING
60 #if defined linux
61 #  define LINUX_POLICY_ROUTING 1
62 #else
63 #  define LINUX_POLICY_ROUTING 0
64 #endif
65 #endif
66
67 /* Default values not declared in olsr_protocol.h */
68 #define DEF_POLLRATE        0.05
69 #define DEF_NICCHGPOLLRT    2.5
70 #define DEF_WILL_AUTO       false
71 #define DEF_WILLINGNESS     3
72 #define DEF_ALLOW_NO_INTS   true
73 #define DEF_TOS             16
74 #define DEF_DEBUGLVL        1
75 #define DEF_IPC_CONNECTIONS 0
76 #define DEF_USE_HYST        false
77 #define DEF_FIB_METRIC      FIBM_FLAT
78 #define DEF_LQ_LEVEL        2
79 #define DEF_LQ_FISH         1
80 #define DEF_LQ_DIJK_LIMIT   255
81 #define DEF_LQ_DIJK_INTER   0.0
82 #define DEF_LQ_NAT_THRESH   0.5
83 #define DEF_LQ_AGING        0.1
84 #define DEF_CLEAR_SCREEN    true
85 #define DEF_OLSRPORT        698
86 #define DEF_RTPROTO         0 /* 0 means OS-specific default */
87 #define DEF_RTTABLE         254
88 #define DEF_MIN_TC_VTIME    0.0
89 #define DEF_USE_NIIT        true
90
91 /* Bounds */
92
93 #define MIN_INTERVAL        0.01
94
95 #define MAX_POLLRATE        1.0
96 #define MIN_POLLRATE        0.01
97 #define MAX_NICCHGPOLLRT    100.0
98 #define MIN_NICCHGPOLLRT    1.0
99 #define MAX_DEBUGLVL        9
100 #define MIN_DEBUGLVL        0
101 #define MAX_TOS             16
102 #define MIN_TOS             0
103 #define MAX_WILLINGNESS     7
104 #define MIN_WILLINGNESS     0
105 #define MAX_MPR_COVERAGE    20
106 #define MIN_MPR_COVERAGE    1
107 #define MAX_TC_REDUNDANCY   2
108 #define MIN_TC_REDUNDANCY   0
109 #define MAX_HYST_PARAM      1.0
110 #define MIN_HYST_PARAM      0.0
111 #define MAX_LQ_LEVEL        2
112 #define MIN_LQ_LEVEL        0
113 #define MAX_LQ_AGING        1.0
114 #define MIN_LQ_AGING        0.01
115
116 /* Option values */
117 #define CFG_FIBM_FLAT          "flat"
118 #define CFG_FIBM_CORRECT       "correct"
119 #define CFG_FIBM_APPROX        "approx"
120
121 #ifndef IPV6_ADDR_SITELOCAL
122 #define IPV6_ADDR_SITELOCAL    0x0040U
123 #endif
124
125 #include "interfaces.h"
126
127 struct olsr_msg_params {
128   float emission_interval;
129   float validity_time;
130 };
131
132 struct olsr_lq_mult {
133   union olsr_ip_addr addr;
134   uint32_t value;
135   struct olsr_lq_mult *next;
136 };
137
138 struct olsr_if_weight {
139   int value;
140   bool fixed;
141 };
142
143 struct if_config_options {
144   union olsr_ip_addr ipv4_multicast;
145   union olsr_ip_addr ipv6_multicast;
146
147   union olsr_ip_addr ipv4_src;
148   struct olsr_ip_prefix ipv6_src;
149
150   int mode;
151
152   struct olsr_if_weight weight;
153   struct olsr_msg_params hello_params;
154   struct olsr_msg_params tc_params;
155   struct olsr_msg_params mid_params;
156   struct olsr_msg_params hna_params;
157   struct olsr_lq_mult *lq_mult;
158   int orig_lq_mult_cnt;
159   bool autodetect_chg;
160 };
161
162 struct olsr_if {
163   char *name;
164   bool configured;
165   bool host_emul;
166   union olsr_ip_addr hemu_ip;
167   struct interface *interf;
168   struct if_config_options *cnf, *cnfi;
169   struct olsr_if *next;
170 };
171
172 struct ip_prefix_list {
173   struct olsr_ip_prefix net;
174   struct ip_prefix_list *next;
175 };
176
177 struct hyst_param {
178   float scaling;
179   float thr_high;
180   float thr_low;
181 };
182
183 struct plugin_param {
184   char *key;
185   char *value;
186   struct plugin_param *next;
187 };
188
189 struct plugin_entry {
190   char *name;
191   struct plugin_param *params;
192   struct plugin_entry *next;
193 };
194
195 typedef enum {
196   FIBM_FLAT,
197   FIBM_CORRECT,
198   FIBM_APPROX
199 } olsr_fib_metric_options;
200
201 /*
202  * The config struct
203  */
204
205 struct olsrd_config {
206   uint16_t olsrport;
207   int debug_level;
208   bool no_fork;
209   bool host_emul;
210   int ip_version;
211   bool allow_no_interfaces;
212   uint16_t tos;
213   uint8_t rtproto;
214   uint8_t rttable;
215   uint8_t rttable_default;
216   uint8_t willingness;
217   bool willingness_auto;
218   int ipc_connections;
219   bool use_hysteresis;
220   olsr_fib_metric_options fib_metric;
221   struct hyst_param hysteresis_param;
222   struct plugin_entry *plugins;
223   struct ip_prefix_list *hna_entries;
224   struct ip_prefix_list *ipc_nets;
225   struct if_config_options *interface_defaults;
226   struct olsr_if *interfaces;
227   float pollrate;
228   float nic_chgs_pollrate;
229   bool clear_screen;
230   uint8_t tc_redundancy;
231   uint8_t mpr_coverage;
232   uint8_t lq_level;
233   uint8_t lq_fish;
234   float lq_dinter;
235   float lq_aging;
236   char *lq_algorithm;
237   uint8_t lq_dlimit;
238
239   float min_tc_vtime;
240   /* Stuff set by olsrd */
241   uint8_t maxplen;                     /* maximum prefix len */
242   size_t ipsize;                       /* Size of address */
243   bool del_gws;                        /* Delete InternetGWs at startup */
244   union olsr_ip_addr main_addr;        /* Main address of this node */
245   float will_int;
246   float max_jitter;
247   int exit_value;                      /* Global return value for process termination */
248   float max_tc_vtime;
249
250   char *lock_file;
251
252   bool use_niit;
253   int niit_if_index;
254
255   int ioctl_s;                         /* Socket used for ioctl calls */
256 #if LINUX_POLICY_ROUTING
257   int rtnl_s;                          /* Socket used for rtnetlink messages */
258 #endif
259
260 #if defined __FreeBSD__ || defined __FreeBSD_kernel__ || defined __MacOSX__ || defined __NetBSD__ || defined __OpenBSD__
261   int rts;                             /* Socket used for route changes on BSDs */
262 #endif
263   float lq_nat_thresh;
264 };
265
266 #if defined __cplusplus
267 extern "C" {
268 #endif
269
270 /*
271  * List functions
272  */
273
274   void ip_prefix_list_add(struct ip_prefix_list **, const union olsr_ip_addr *, uint8_t);
275
276   int ip_prefix_list_remove(struct ip_prefix_list **, const union olsr_ip_addr *, uint8_t);
277
278   struct ip_prefix_list *ip_prefix_list_find(struct ip_prefix_list *, const union olsr_ip_addr *net, uint8_t prefix_len);
279
280 /*
281  * Interface to parser
282  */
283
284   int olsrd_parse_cnf(const char *);
285
286   int olsrd_sanity_check_cnf(struct olsrd_config *);
287
288   void olsrd_free_cnf(struct olsrd_config *);
289
290   void olsrd_print_cnf(struct olsrd_config *);
291
292   int olsrd_write_cnf(struct olsrd_config *, const char *);
293
294   int olsrd_write_cnf_buf(struct olsrd_config *, char *, uint32_t);
295
296   struct if_config_options *get_default_if_config(void);
297
298   struct olsrd_config *olsrd_get_default_cnf(void);
299
300 #if defined WIN32
301   void win32_stdio_hack(unsigned int);
302
303   void *win32_olsrd_malloc(size_t size);
304
305   void win32_olsrd_free(void *ptr);
306 #endif
307
308 #if defined __cplusplus
309 }
310 #endif
311 #endif
312
313 /*
314  * Local Variables:
315  * c-basic-offset: 2
316  * indent-tabs-mode: nil
317  * End:
318  */