Removed superfluous maxplen config var
[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 #include "olsr_logging.h"
110
111 struct olsr_msg_params {
112   float emission_interval;
113   float validity_time;
114 };
115
116 struct olsr_lq_mult {
117   union olsr_ip_addr addr;
118   uint32_t value;
119   struct olsr_lq_mult *next;
120 };
121
122 struct olsr_if_weight {
123   int value;
124   bool fixed;
125 };
126
127 struct olsr_if_options {
128   union olsr_ip_addr ipv4_broadcast;
129   int ipv6_addrtype;
130   union olsr_ip_addr ipv6_multi_site;
131   union olsr_ip_addr ipv6_multi_glbl;
132   struct olsr_if_weight weight;
133   struct olsr_msg_params hello_params;
134   struct olsr_msg_params tc_params;
135   struct olsr_msg_params mid_params;
136   struct olsr_msg_params hna_params;
137   struct olsr_lq_mult *lq_mult;
138   bool autodetect_chg;
139 };
140
141 struct olsr_if_config {
142   char *name;
143   char *config;
144   union olsr_ip_addr hemu_ip;
145   struct interface *interf;
146   struct olsr_if_options *cnf;
147   struct olsr_if_config *next;
148 };
149
150 struct plugin_param {
151   char *key;
152   char *value;
153   struct plugin_param *next;
154 };
155
156 struct plugin_entry {
157   char *name;
158   struct plugin_param *params;
159   struct plugin_entry *next;
160 };
161
162 typedef enum {
163   FIBM_FLAT,
164   FIBM_CORRECT,
165   FIBM_APPROX
166 } olsr_fib_metric_options;
167
168 /*
169  * The config struct
170  */
171
172 struct olsr_config {
173   int ip_version;
174   size_t ipsize;                       /* Size of address */
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   olsr_fib_metric_options fib_metric;
186
187   /* logging information */
188   int8_t debug_level;                  /* old style */
189   bool log_event[LOG_SEVERITY_COUNT][LOG_SOURCE_COUNT]; /* new style */
190   bool log_target_stderr;
191   char *log_target_file;
192   bool log_target_syslog;
193
194   struct plugin_entry *plugins;
195   struct list_node hna_entries;
196   struct ip_acl ipc_nets;
197   struct olsr_if_config *if_configs;
198   uint32_t pollrate;                   /* in microseconds */
199   float nic_chgs_pollrate;
200   uint8_t tc_redundancy;
201   uint8_t mpr_coverage;
202   uint8_t lq_fish;
203   float lq_dinter;
204   uint8_t lq_dlimit;
205   uint8_t willingness;
206
207   /* Stuff set by olsrd */
208   uint16_t system_tick_divider;        /* Tick resolution */
209   union olsr_ip_addr main_addr;        /* Main address of this node */
210   float will_int;
211   int exit_value;                      /* Global return value for process termination */
212   float max_tc_vtime;
213
214   int ioctl_s;                         /* Socket used for ioctl calls */
215 #if defined linux
216   int rts_linux;                       /* Socket used for rtnetlink messages */
217 #endif
218
219 #if defined __FreeBSD__ || defined __MacOSX__ || defined __NetBSD__ || defined __OpenBSD__
220   int rts_bsd;                         /* Socket used for route changes on BSDs */
221 #endif
222   float lq_nat_thresh;
223 };
224
225 /*
226  * Global olsrd configuragtion
227  */
228 extern struct olsr_config *EXPORT(olsr_cnf);
229
230 /*
231  * Interface to parser
232  */
233 struct olsr_config *olsr_parse_cfg(int, char **, const char *);
234 int olsr_sanity_check_cfg(struct olsr_config *);
235 void olsr_free_cfg(struct olsr_config *);
236 struct olsr_config *olsr_get_default_cfg(void);
237
238 /*
239  * Check pollrate function
240  */
241 static inline float
242 conv_pollrate_to_secs(uint32_t p)
243 {
244   return p / 1000000.0;
245 }
246 static inline uint32_t
247 conv_pollrate_to_microsecs(float p)
248 {
249   return p * 1000000;
250 }
251
252 #endif /* _OLSRD_CFG_H */
253
254 /*
255  * Local Variables:
256  * c-basic-offset: 2
257  * indent-tabs-mode: nil
258  * End:
259  */