convert ip_prefix_list to common/list datastructure
[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_CFG_H
43 #define _OLSRD_CFG_H
44
45 /* Default values not declared in olsr_protocol.h */
46 #define DEF_POLLRATE           0.05
47 #define DEF_NICCHGPOLLRT       2.5
48 #define DEF_WILL_AUTO          true
49 #define DEF_ALLOW_NO_INTS      true
50 #define DEF_TOS                16
51 #define DEF_DEBUGLVL           1
52 #define DEF_IPC_CONNECTIONS    0
53 #define DEF_USE_HYST           false
54 #define DEF_FIB_METRIC         FIBM_FLAT
55 #define DEF_LQ_ALWAYS_SEND_TC  true
56 #define DEF_LQ_FISH            0
57 #define DEF_LQ_DIJK_LIMIT      255
58 #define DEF_LQ_DIJK_INTER      0.0
59 #define DEF_LQ_NAT_THRESH      1.0
60 #define DEF_LQ_AGING           0.1
61 #define DEF_CLEAR_SCREEN       false
62
63 /* Bounds */
64
65 #define MIN_INTERVAL        0.01
66
67 #define MAX_POLLRATE        10.0
68 #define MIN_POLLRATE        0.01
69 #define MAX_NICCHGPOLLRT    100.0
70 #define MIN_NICCHGPOLLRT    1.0
71 #define MAX_DEBUGLVL        9
72 #define MIN_DEBUGLVL        0
73 #define MAX_TOS             16
74 #define MAX_WILLINGNESS     7
75 #define MIN_WILLINGNESS     0
76 #define MAX_MPR_COVERAGE    20
77 #define MIN_MPR_COVERAGE    1
78 #define MAX_TC_REDUNDANCY   2
79 #define MAX_HYST_PARAM      1.0
80 #define MIN_HYST_PARAM      0.0
81 #define MAX_LQ_AGING        1.0
82 #define MIN_LQ_AGING        0.01
83
84 /* Option values */
85 #define CFG_FIBM_FLAT          "flat"
86 #define CFG_FIBM_CORRECT       "correct"
87 #define CFG_FIBM_APPROX        "approx"
88
89 #define CFG_IP6T_AUTO          "auto"
90 #define CFG_IP6T_SITELOCAL     "site-local"
91 #define CFG_IP6T_UNIQUELOCAL   "unique-local"
92 #define CFG_IP6T_GLOBAL        "global"
93
94 #define OLSR_IP6T_AUTO         0
95 #define OLSR_IP6T_SITELOCAL    1
96 #define OLSR_IP6T_UNIQUELOCAL  2
97 #define OLSR_IP6T_GLOBAL       3
98
99 #ifndef IPV6_ADDR_GLOBAL
100 #define IPV6_ADDR_GLOBAL       0x0000U
101 #endif
102
103 #ifndef IPV6_ADDR_SITELOCAL
104 #define IPV6_ADDR_SITELOCAL    0x0040U
105 #endif
106
107 #include "interfaces.h"
108 #include "olsr_ip_acl.h"
109
110 struct olsr_msg_params {
111   float emission_interval;
112   float validity_time;
113 };
114
115 struct olsr_lq_mult {
116   union olsr_ip_addr addr;
117   uint32_t value;
118   struct olsr_lq_mult *next;
119 };
120
121 struct olsr_if_weight {
122   int value;
123   bool fixed;
124 };
125
126 struct olsr_if_options {
127   union olsr_ip_addr ipv4_broadcast;
128   int ipv6_addrtype;
129   union olsr_ip_addr ipv6_multi_site;
130   union olsr_ip_addr ipv6_multi_glbl;
131   struct olsr_if_weight weight;
132   struct olsr_msg_params hello_params;
133   struct olsr_msg_params tc_params;
134   struct olsr_msg_params mid_params;
135   struct olsr_msg_params hna_params;
136   struct olsr_lq_mult *lq_mult;
137   bool autodetect_chg;
138 };
139
140 struct olsr_if_config {
141   char *name;
142   char *config;
143   union olsr_ip_addr hemu_ip;
144   struct interface *interf;
145   struct olsr_if_options *cnf;
146   struct olsr_if_config *next;
147 };
148
149 struct plugin_param {
150   char *key;
151   char *value;
152   struct plugin_param *next;
153 };
154
155 struct plugin_entry {
156   char *name;
157   struct plugin_param *params;
158   struct plugin_entry *next;
159 };
160
161 typedef enum {
162   FIBM_FLAT,
163   FIBM_CORRECT,
164   FIBM_APPROX
165 } olsr_fib_metric_options;
166
167 /*
168  * The config struct
169  */
170
171 struct olsr_config {
172   int ip_version;
173   size_t ipsize;                       /* Size of address */
174   uint8_t maxplen;                     /* maximum prefix len */
175   unsigned char no_fork:1;
176   unsigned char allow_no_interfaces:1;
177   unsigned char willingness_auto:1;
178   unsigned char clear_screen:1;
179   unsigned char del_gws:1;             /* Delete InternetGWs at startup */
180   uint16_t tos;
181   uint8_t rtproto;
182   uint8_t rttable;
183   uint8_t rttable_default;
184   uint8_t ipc_connections;
185   int8_t debug_level;
186   olsr_fib_metric_options fib_metric;
187
188   struct plugin_entry *plugins;
189   struct list_node hna_entries;
190   struct ip_acl ipc_nets;
191   struct olsr_if_config *if_configs;
192   uint32_t pollrate;                   /* in microseconds */
193   float nic_chgs_pollrate;
194   uint8_t tc_redundancy;
195   uint8_t mpr_coverage;
196   uint8_t lq_fish;
197   float lq_dinter;
198   uint8_t lq_dlimit;
199   uint8_t willingness;
200
201   /* Stuff set by olsrd */
202   uint16_t system_tick_divider;        /* Tick resolution */
203   union olsr_ip_addr main_addr;        /* Main address of this node */
204   float will_int;
205   int exit_value;                      /* Global return value for process termination */
206   float max_tc_vtime;
207
208   int ioctl_s;                         /* Socket used for ioctl calls */
209 #if defined linux
210   int rts_linux;                       /* Socket used for rtnetlink messages */
211 #endif
212
213 #if defined __FreeBSD__ || defined __MacOSX__ || defined __NetBSD__ || defined __OpenBSD__
214   int rts_bsd;                         /* Socket used for route changes on BSDs */
215 #endif
216   float lq_nat_thresh;
217 };
218
219 /*
220  * Global olsrd configuragtion
221  */
222 extern struct olsr_config *EXPORT(olsr_cnf);
223
224 /*
225  * Interface to parser
226  */
227 struct olsr_config *olsr_parse_cfg(int, char **, const char *);
228 int olsr_sanity_check_cfg(struct olsr_config *);
229 void olsr_free_cfg(struct olsr_config *);
230 struct olsr_config *olsr_get_default_cfg(void);
231
232 /*
233  * Check pollrate function
234  */
235 static inline float
236 conv_pollrate_to_secs(uint32_t p)
237 {
238   return p / 1000000.0;
239 }
240 static inline uint32_t
241 conv_pollrate_to_microsecs(float p)
242 {
243   return p * 1000000;
244 }
245
246 #endif /* _OLSRD_CFG_H */
247
248 /*
249  * Local Variables:
250  * c-basic-offset: 2
251  * indent-tabs-mode: nil
252  * End:
253  */