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