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