Remove the olsr-specific duplicated types
[olsrd.git] / src / olsr_cfg.h
1 /*
2  * The olsr.org Optimized Link-State Routing daemon(olsrd)
3  * Copyright (c) 2004, Andreas Tonnesen(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 #include "common/autobuf.h"
47
48 #ifndef LINUX_POLICY_ROUTING
49 #if defined linux
50 #  define LINUX_POLICY_ROUTING 1
51 #else
52 #  define LINUX_POLICY_ROUTING 0
53 #endif
54 #endif
55
56 /* Default values not declared in olsr_protocol.h */
57 #define DEF_POLLRATE        0.05
58 #define DEF_NICCHGPOLLRT    2.5
59 #define DEF_WILL_AUTO       true
60 #define DEF_ALLOW_NO_INTS   true
61 #define DEF_TOS             16
62 #define DEF_DEBUGLVL        1
63 #define DEF_IPC_CONNECTIONS 0
64 #define DEF_USE_HYST        false
65 #define DEF_FIB_METRIC      FIBM_FLAT
66 #define DEF_LQ_LEVEL        2
67 #define DEF_LQ_FISH         0
68 #define DEF_LQ_DIJK_LIMIT   255
69 #define DEF_LQ_DIJK_INTER   0.0
70 #define DEF_LQ_NAT_THRESH   1.0
71 #define DEF_LQ_AGING        0.1
72 #define DEF_CLEAR_SCREEN    false
73
74 /* Bounds */
75
76 #define MIN_INTERVAL        0.01
77
78 #define MAX_POLLRATE        10.0
79 #define MIN_POLLRATE        0.01
80 #define MAX_NICCHGPOLLRT    100.0
81 #define MIN_NICCHGPOLLRT    1.0
82 #define MAX_DEBUGLVL        9
83 #define MIN_DEBUGLVL        0
84 #define MAX_TOS             16
85 #define MIN_TOS             0
86 #define MAX_WILLINGNESS     7
87 #define MIN_WILLINGNESS     0
88 #define MAX_MPR_COVERAGE    20
89 #define MIN_MPR_COVERAGE    1
90 #define MAX_TC_REDUNDANCY   2
91 #define MIN_TC_REDUNDANCY   0
92 #define MAX_HYST_PARAM      1.0
93 #define MIN_HYST_PARAM      0.0
94 #define MAX_LQ_LEVEL        2
95 #define MIN_LQ_LEVEL        0
96 #define MAX_LQ_AGING        1.0
97 #define MIN_LQ_AGING        0.01
98
99 /* Option values */
100 #define CFG_FIBM_FLAT          "flat"
101 #define CFG_FIBM_CORRECT       "correct"
102 #define CFG_FIBM_APPROX        "approx"
103
104 #define CFG_IP6T_AUTO          "auto"
105 #define CFG_IP6T_SITELOCAL     "site-local"
106 #define CFG_IP6T_UNIQUELOCAL   "unique-local"
107 #define CFG_IP6T_GLOBAL        "global"
108
109 #define OLSR_IP6T_AUTO         0
110 #define OLSR_IP6T_SITELOCAL    1
111 #define OLSR_IP6T_UNIQUELOCAL  2
112 #define OLSR_IP6T_GLOBAL       3
113
114 #ifndef IPV6_ADDR_GLOBAL
115 #define IPV6_ADDR_GLOBAL       0x0000U
116 #endif
117
118 #ifndef IPV6_ADDR_SITELOCAL
119 #define IPV6_ADDR_SITELOCAL    0x0040U
120 #endif
121
122 #include "interfaces.h"
123
124 struct olsr_msg_params
125 {
126   float                    emission_interval;
127   float                    validity_time;
128 };
129
130 struct olsr_lq_mult
131 {
132   union olsr_ip_addr addr;
133   uint32_t value;
134   struct olsr_lq_mult *next;
135 };
136
137 struct olsr_if_weight
138 {
139   int        value;
140   bool  fixed;
141 };
142
143 struct if_config_options
144 {
145   union olsr_ip_addr       ipv4_broadcast;
146   int                      ipv6_addrtype;
147   union olsr_ip_addr       ipv6_multi_site;
148   union olsr_ip_addr       ipv6_multi_glbl;
149   struct olsr_if_weight    weight;
150   struct olsr_msg_params   hello_params;
151   struct olsr_msg_params   tc_params;
152   struct olsr_msg_params   mid_params;
153   struct olsr_msg_params   hna_params;
154   struct olsr_lq_mult      *lq_mult;
155   bool                autodetect_chg;
156 };
157
158
159
160 struct olsr_if
161 {
162   char                     *name;
163   char                     *config;
164   bool                configured;
165   bool                host_emul;
166   union olsr_ip_addr       hemu_ip;
167   struct interface         *interf;
168   struct if_config_options *cnf;
169   struct olsr_if           *next;
170 };
171
172 struct ip_prefix_list
173 {
174   struct olsr_ip_prefix    net;
175   struct ip_prefix_list    *next;
176 };
177
178 struct hyst_param
179 {
180   float                    scaling;
181   float                    thr_high;
182   float                    thr_low;
183 };
184
185 struct plugin_param
186 {
187   char                     *key;
188   char                     *value;
189   struct plugin_param      *next;
190 };
191
192 struct plugin_entry
193 {
194   char                     *name;
195   struct plugin_param      *params;
196   struct plugin_entry      *next;
197 };
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 {
212  int                      ip_version;
213   size_t                   ipsize;               /* Size of address */
214   uint8_t                maxplen;              /* maximum prefix len */
215   unsigned char            no_fork:1;
216   unsigned char            host_emul:1;
217   unsigned char            allow_no_interfaces:1;
218   unsigned char            willingness_auto:1;
219   unsigned char            use_hysteresis:1;
220   unsigned char            clear_screen:1;
221   unsigned char            del_gws:1;            /* Delete InternetGWs at startup */
222   uint16_t               tos;
223   uint8_t                rttable;
224   uint8_t                rttable_default;
225   uint8_t                ipc_connections;
226   int8_t                 debug_level;
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 olsr_if          *interfaces;
233   //float                    pollrate;
234   uint32_t               pollrate; /* in microseconds */
235   float                    nic_chgs_pollrate;
236   uint8_t                tc_redundancy;
237   uint8_t                mpr_coverage;
238   uint8_t                lq_level;
239   uint8_t                lq_fish;
240   float                    lq_dinter;
241   float                    lq_aging;
242   char                    *lq_algorithm;
243   uint8_t                lq_dlimit;
244   uint8_t                willingness;
245
246   /* Stuff set by olsrd */
247   uint16_t               system_tick_divider;  /* Tick resolution */
248   union olsr_ip_addr       main_addr;            /* Main address of this node */
249   float                    will_int;
250   int                      exit_value;           /* Global return value for process termination */
251   float                    max_tc_vtime;
252
253   int                      ioctl_s;              /* Socket used for ioctl calls */
254 #if LINUX_POLICY_ROUTING
255   int                      rtnl_s;               /* Socket used for rtnetlink messages */
256 #endif
257
258 #if defined __FreeBSD__ || defined __MacOSX__ || defined __NetBSD__ || defined __OpenBSD__
259   int                      rts;                  /* Socket used for route changes on BSDs */
260 #endif
261   float                    lq_nat_thresh;
262 };
263
264 /*
265  * Global olsrd configuragtion
266  */
267 extern struct olsrd_config *olsr_cnf;
268
269
270 #if defined __cplusplus
271 extern "C" {
272 #endif
273
274
275 /*
276  * List functions
277  */
278
279 void ip_prefix_list_add(struct ip_prefix_list **, const union olsr_ip_addr *, uint8_t);
280
281 int ip_prefix_list_remove(struct ip_prefix_list **, const union olsr_ip_addr *, uint8_t);
282
283 struct ip_prefix_list *ip_prefix_list_find(struct ip_prefix_list *, const union olsr_ip_addr *net, uint8_t prefix_len);
284
285
286 /*
287  * Interface to parser
288  */
289
290 struct olsrd_config *olsrd_parse_cnf(const char *);
291
292 int olsrd_sanity_check_cnf(struct olsrd_config *);
293
294 void olsrd_free_cnf(struct olsrd_config *);
295
296 void olsrd_print_cnf(const struct olsrd_config *);
297
298 int olsrd_write_cnf(const struct olsrd_config *, const char *);
299
300 void olsrd_write_cnf_buf(struct autobuf *, const struct olsrd_config *, bool);
301
302 void init_default_if_config(struct if_config_options *);
303
304 struct if_config_options *get_default_if_config(void);
305
306 struct olsrd_config *olsrd_get_default_cnf(void);
307
308 int check_pollrate(float *pollrate);
309
310 static inline float conv_pollrate_to_secs(uint32_t p)   { return p / 1000000.0; }
311
312 static inline uint32_t conv_pollrate_to_microsecs(float p) { return p * 1000000; }
313
314 #if defined WIN32
315 void win32_stdio_hack(unsigned int);
316
317 void *win32_olsrd_malloc(size_t size);
318
319 void win32_olsrd_free(void *ptr);
320 #endif
321
322
323 #if defined __cplusplus
324 }
325 #endif
326
327 #endif
328
329 /*
330  * Local Variables:
331  * c-basic-offset: 2
332  * indent-tabs-mode: nil
333  * End:
334  */