4c5a9b16cba7e19a21e1a37d646dac6d4ec61d25
[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 #define TESTLIB_PATH 0
51 #define SYSLOG_NUMBERING 0
52
53 /* Default values not declared in olsr_protocol.h */
54 #define DEF_POLLRATE         0.1
55 #define DEF_NICCHGPOLLRT     2.5
56 #define DEF_WILL_AUTO        false
57 #define DEF_WILLINGNESS      3
58 #define DEF_ALLOW_NO_INTS    true
59 #define DEF_TOS              16
60 #define DEF_DEBUGLVL         1
61 #define DEF_IPC_CONNECTIONS  0
62 #define DEF_USE_HYST         false
63 #define DEF_FIB_METRIC       FIBM_FLAT
64 #define DEF_LQ_LEVEL         2
65 #define DEF_LQ_FISH          1
66 #define DEF_LQ_DIJK_LIMIT    255
67 #define DEF_LQ_DIJK_INTER    0.0
68 #define DEF_LQ_NAT_THRESH    0.5
69 #define DEF_LQ_AGING         0.1
70 #define DEF_CLEAR_SCREEN     true
71 #define DEF_OLSRPORT         698
72 #define DEF_RTPROTO          0 /* 0 means OS-specific default */
73 #define DEF_RTTABLE          254
74 #define DEF_RTTABLE_DEFAULT  111
75 #define DEF_RTTABLE_TUNNEL   112
76 #define DEF_RTTABLE          254
77 #define DEF_MIN_TC_VTIME     0.0
78 #define DEF_USE_NIIT         true
79 #define DEF_SMART_GW         false
80 #define DEF_GW_ALLOW_NAT     true
81 #define DEF_GW_UPLINK_NAT    true
82 #define DEF_UPLINK_SPEED     128
83 #define DEF_DOWNLINK_SPEED   1024
84 #define DEF_USE_SRCIP_ROUTES false;
85
86 /* Bounds */
87
88 #define MIN_INTERVAL         0.01
89
90 #define MAX_POLLRATE         1.0
91 #define MIN_POLLRATE         0.01
92 #define MAX_NICCHGPOLLRT     100.0
93 #define MIN_NICCHGPOLLRT     1.0
94 #define MAX_DEBUGLVL         9
95 #define MIN_DEBUGLVL         0
96 #define MAX_TOS              16
97 #define MIN_TOS              0
98 #define MAX_WILLINGNESS      7
99 #define MIN_WILLINGNESS      0
100 #define MAX_MPR_COVERAGE     20
101 #define MIN_MPR_COVERAGE     1
102 #define MAX_TC_REDUNDANCY    2
103 #define MIN_TC_REDUNDANCY    0
104 #define MAX_HYST_PARAM       1.0
105 #define MIN_HYST_PARAM       0.0
106 #define MAX_LQ_LEVEL         2
107 #define MIN_LQ_LEVEL         0
108 #define MAX_LQ_AGING         1.0
109 #define MIN_LQ_AGING         0.01
110
111 #define MIN_SMARTGW_SPEED    1
112 #define MAX_SMARTGW_SPEED    320000000
113
114 /* Option values */
115 #define CFG_FIBM_FLAT          "flat"
116 #define CFG_FIBM_CORRECT       "correct"
117 #define CFG_FIBM_APPROX        "approx"
118
119 #ifndef IPV6_ADDR_SITELOCAL
120 #define IPV6_ADDR_SITELOCAL    0x0040U
121 #endif
122
123 #include "interfaces.h"
124
125 enum smart_gw_uplinktype {
126   GW_UPLINK_IPV4,
127   GW_UPLINK_IPV6,
128   GW_UPLINK_IPV46,
129   GW_UPLINK_CNT,
130 };
131
132 struct olsr_msg_params {
133   float emission_interval;
134   float validity_time;
135 };
136
137 struct olsr_lq_mult {
138   union olsr_ip_addr addr;
139   uint32_t value;
140   struct olsr_lq_mult *next;
141 };
142
143 struct olsr_if_weight {
144   int value;
145   bool fixed;
146 };
147
148 struct if_config_options {
149   union olsr_ip_addr ipv4_multicast;
150   union olsr_ip_addr ipv6_multicast;
151
152   union olsr_ip_addr ipv4_src;
153   struct olsr_ip_prefix ipv6_src;
154
155   int mode;
156
157   struct olsr_if_weight weight;
158   struct olsr_msg_params hello_params;
159   struct olsr_msg_params tc_params;
160   struct olsr_msg_params mid_params;
161   struct olsr_msg_params hna_params;
162   struct olsr_lq_mult *lq_mult;
163   int orig_lq_mult_cnt;
164   bool autodetect_chg;
165 };
166
167 struct olsr_if {
168   char *name;
169   bool configured;
170   bool host_emul;
171   union olsr_ip_addr hemu_ip;
172   struct interface *interf;
173   struct if_config_options *cnf, *cnfi;
174   struct olsr_if *next;
175 };
176
177 struct ip_prefix_list {
178   struct olsr_ip_prefix net;
179   struct ip_prefix_list *next;
180 };
181
182 struct hyst_param {
183   float scaling;
184   float thr_high;
185   float thr_low;
186 };
187
188 struct plugin_param {
189   char *key;
190   char *value;
191   struct plugin_param *next;
192 };
193
194 struct plugin_entry {
195   char *name;
196   struct plugin_param *params;
197   struct plugin_entry *next;
198 };
199
200 typedef enum {
201   FIBM_FLAT,
202   FIBM_CORRECT,
203   FIBM_APPROX
204 } olsr_fib_metric_options;
205
206 /*
207  * The config struct
208  */
209
210 struct olsrd_config {
211   uint16_t olsrport;
212   int debug_level;
213   bool no_fork;
214   bool host_emul;
215   int ip_version;
216   bool allow_no_interfaces;
217   uint16_t tos;
218   bool rt_policy;
219   uint8_t rt_proto;
220   uint8_t rt_table, rt_table_default, rt_table_tunnel;
221   uint16_t rt_table_pri, rt_table_tunnel_pri;
222   uint16_t rt_table_defaultolsr_pri, rt_table_default_pri;
223   uint8_t willingness;
224   bool willingness_auto;
225   int ipc_connections;
226   bool use_hysteresis;
227   olsr_fib_metric_options fib_metric;
228   struct hyst_param hysteresis_param;
229   struct plugin_entry *plugins;
230   struct ip_prefix_list *hna_entries;
231   struct ip_prefix_list *ipc_nets;
232   struct if_config_options *interface_defaults;
233   struct olsr_if *interfaces;
234   float pollrate;
235   float nic_chgs_pollrate;
236   bool clear_screen;
237   uint8_t tc_redundancy;
238   uint8_t mpr_coverage;
239   uint8_t lq_level;
240   uint8_t lq_fish;
241   float lq_dinter;
242   float lq_aging;
243   char *lq_algorithm;
244   uint8_t lq_dlimit;
245
246   float min_tc_vtime;
247
248   char *lock_file;
249   bool use_niit;
250
251   bool smart_gw_active, smart_gw_allow_nat, smart_gw_uplink_nat;
252   enum smart_gw_uplinktype smart_gw_type;
253   uint32_t smart_gw_uplink, smart_gw_downlink;
254   struct olsr_ip_prefix smart_gw_prefix;
255
256   /* Main address of this node */
257   union olsr_ip_addr main_addr;
258   bool use_src_ip_routes;
259
260   /* Stuff set by olsrd */
261   uint8_t maxplen;                     /* maximum prefix len */
262   size_t ipsize;                       /* Size of address */
263   bool del_gws;                        /* Delete InternetGWs at startup */
264   float will_int;
265   float max_jitter;
266   int exit_value;                      /* Global return value for process termination */
267   float max_tc_vtime;
268
269   int niit4to6_if_index, niit6to4_if_index;
270
271   /*many potential parameters or helper variables for smartgateway*/
272   bool has_ipv4_gateway, has_ipv6_gateway;
273
274   int ioctl_s;                         /* Socket used for ioctl calls */
275 #ifdef LINUX_NETLINK_ROUTING
276   int rtnl_s;                          /* Socket used for rtnetlink messages */
277   int rt_monitor_socket;
278 #endif
279
280 #if defined __FreeBSD__ || defined __FreeBSD_kernel__ || defined __MacOSX__ || defined __NetBSD__ || defined __OpenBSD__
281   int rts;                             /* Socket used for route changes on BSDs */
282 #endif
283   float lq_nat_thresh;
284 };
285
286 #if defined __cplusplus
287 extern "C" {
288 #endif
289
290   extern const char *GW_UPLINK_TXT[];
291
292 /*
293  * List functions
294  */
295
296   void ip_prefix_list_add(struct ip_prefix_list **, const union olsr_ip_addr *, uint8_t);
297
298   int ip_prefix_list_remove(struct ip_prefix_list **, const union olsr_ip_addr *, uint8_t);
299
300   struct ip_prefix_list *ip_prefix_list_find(struct ip_prefix_list *, const union olsr_ip_addr *net, uint8_t prefix_len);
301
302 /*
303  * Interface to parser
304  */
305
306   int olsrd_parse_cnf(const char *);
307
308   int olsrd_sanity_check_cnf(struct olsrd_config *);
309
310   void olsrd_free_cnf(struct olsrd_config *);
311
312   void olsrd_print_cnf(struct olsrd_config *);
313
314   int olsrd_write_cnf(struct olsrd_config *, const char *);
315
316   int olsrd_write_cnf_buf(struct olsrd_config *, char *, uint32_t);
317
318   struct if_config_options *get_default_if_config(void);
319
320   struct olsrd_config *olsrd_get_default_cnf(void);
321
322 #if defined WIN32
323   void win32_stdio_hack(unsigned int);
324
325   void *win32_olsrd_malloc(size_t size);
326
327   void win32_olsrd_free(void *ptr);
328 #endif
329
330 #if defined __cplusplus
331 }
332 #endif
333 #endif
334
335 /*
336  * Local Variables:
337  * c-basic-offset: 2
338  * indent-tabs-mode: nil
339  * End:
340  */