b2a151eb68b1e19031976a2a4c4355e9b8deadfe
[olsrd.git] / src / olsr_cfg.h
1
2 /*
3  * The olsr.org Optimized Link-State Routing daemon(olsrd)
4  * Copyright (c) 2004-2009, the olsr.org team - see HISTORY file
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           50
47 #define DEF_NICCHGPOLLRT       2500
48 #define DEF_WILL_AUTO          true
49 #define DEF_ALLOW_NO_INTS      true
50 #define DEF_TOS                16
51 #define DEF_DEBUGLVL           "0"
52 #define DEF_IPC_CONNECTIONS    0
53 #define DEF_FIB_METRIC         FIBM_FLAT
54 #define DEF_LQ_ALWAYS_SEND_TC  true
55 #define DEF_LQ_FISH            0
56 #define DEF_LQ_DIJK_LIMIT      255
57 #define DEF_LQ_DIJK_INTER      0
58 #define DEF_LQ_NAT_THRESH      1000
59 #define DEF_CLEAR_SCREEN       false
60 #define DEF_HTTPPORT           8080
61 #define DEF_HTTPLIMIT          3
62 #define DEF_TXTPORT            2006
63 #define DEF_TXTLIMIT           3
64
65 /* Bounds */
66
67 #define MIN_INTERVAL        0.01
68
69 #define MAX_POLLRATE        10000
70 #define MIN_POLLRATE        10
71 #define MAX_NICCHGPOLLRT    100000
72 #define MIN_NICCHGPOLLRT    1000
73 #define MAX_DEBUGLVL        3
74 #define MIN_DEBUGLVL        -2
75 #define MAX_TOS             16
76 #define MAX_WILLINGNESS     7
77 #define MIN_WILLINGNESS     0
78 #define MAX_MPR_COVERAGE    20
79 #define MIN_MPR_COVERAGE    1
80 #define MAX_TC_REDUNDANCY   2
81 #define MAX_HYST_PARAM      1.0
82 #define MIN_HYST_PARAM      0.0
83 #define MAX_LQ_AGING        1.0
84 #define MIN_LQ_AGING        0.01
85
86 /* Option values */
87 #define CFG_FIBM_FLAT          "flat"
88 #define CFG_FIBM_CORRECT       "correct"
89 #define CFG_FIBM_APPROX        "approx"
90
91 #define CFG_IP6T_AUTO          "auto"
92 #define CFG_IP6T_SITELOCAL     "site-local"
93 #define CFG_IP6T_UNIQUELOCAL   "unique-local"
94 #define CFG_IP6T_GLOBAL        "global"
95
96 #define OLSR_IP6T_AUTO         0
97 #define OLSR_IP6T_SITELOCAL    1
98 #define OLSR_IP6T_UNIQUELOCAL  2
99 #define OLSR_IP6T_GLOBAL       3
100
101 #ifndef IPV6_ADDR_GLOBAL
102 #define IPV6_ADDR_GLOBAL       0x0000U
103 #endif
104
105 #ifndef IPV6_ADDR_SITELOCAL
106 #define IPV6_ADDR_SITELOCAL    0x0040U
107 #endif
108
109 #include "interfaces.h"
110 #include "olsr_ip_acl.h"
111 #include "olsr_cfg_data.h"
112
113 struct olsr_msg_params {
114   olsr_reltime emission_interval;
115   olsr_reltime validity_time;
116 };
117
118 struct olsr_lq_mult {
119   union olsr_ip_addr addr;
120   uint32_t value;
121   struct olsr_lq_mult *next;
122 };
123
124 struct olsr_if_weight {
125   int value;
126   bool fixed;
127 };
128
129 struct olsr_if_options {
130   union olsr_ip_addr ipv4_broadcast;
131   int ipv6_addrtype;
132   union olsr_ip_addr ipv6_multi_site;
133   union olsr_ip_addr ipv6_multi_glbl;
134   struct olsr_if_weight weight;
135   struct olsr_msg_params hello_params;
136   struct olsr_msg_params tc_params;
137   struct olsr_msg_params mid_params;
138   struct olsr_msg_params hna_params;
139   struct olsr_lq_mult *lq_mult;
140   bool autodetect_chg;
141   enum interface_mode mode;
142 };
143
144 struct olsr_if_config {
145   char *name;
146   char *config;
147   struct interface *interf;
148   struct olsr_if_options *cnf;
149   struct olsr_if_config *next;
150 };
151
152 struct plugin_param {
153   char *key;
154   char *value;
155   struct plugin_param *next;
156 };
157
158 struct plugin_entry {
159   char *name;
160   struct plugin_param *params;
161   struct plugin_entry *next;
162 };
163
164 typedef enum {
165   FIBM_FLAT,
166   FIBM_CORRECT,
167   FIBM_APPROX
168 } olsr_fib_metric_options;
169
170 /*
171  * The config struct
172  */
173
174 struct olsr_config {
175   int ip_version;                      /* AF_INET of AF_INET6 */
176   size_t ipsize;                       /* Size of address */
177
178   unsigned char no_fork:1;             /* Should olsrd run in foreground? */
179   unsigned char allow_no_interfaces:1; /* Should olsrd stop if no ifaces? */
180   unsigned char willingness_auto:1;    /* Willingness in auto mode? */
181   unsigned char clear_screen:1;        /* Clear screen during debug output? */
182   unsigned char del_gws:1;             /* Delete InternetGWs at startup? */
183   unsigned char fixed_origaddr:1;      /* Use a fixed originator addr == Node ID? */
184   unsigned char source_ip_mode:1;      /* Run OLSR routing in sourceip mode */
185
186   uint16_t tos;                        /* IP Type of Service Byte */
187   uint8_t rtproto;                     /* Policy routing proto, 0 == operating sys default */
188   uint8_t rttable;                     /* Policy routing table, 254(main) is default */
189   uint8_t rttable_default;             /* Polroute table for default route, 0==use rttable */
190   olsr_fib_metric_options fib_metric;  /* Determines route metrics update mode */
191
192   /* logging information */
193   bool log_event[LOG_SEVERITY_COUNT][LOG_SOURCE_COUNT]; /* New style */
194   bool log_target_stderr;              /* Log output to stderr? */
195   char *log_target_file;               /* Filename for log output file, NULL if unused */
196   bool log_target_syslog;              /* Log output also to syslog? */
197
198   struct plugin_entry *plugins;        /* List of plugins to load with plparams */
199   struct list_node hna_entries;        /* List of manually configured HNA entries */
200   struct ip_acl ipc_nets;              /* List of allowed IPC peer IPs */
201   struct olsr_if_config *if_configs;   /* List of devices to be used by olsrd */
202
203   olsr_reltime pollrate;               /* Main loop poll rate, in milliseconds */
204   olsr_reltime nic_chgs_pollrate;      /* Interface poll rate */
205   uint32_t lq_nat_thresh;              /* Link quality NAT threshold, 1000 == unused */
206   uint8_t tc_redundancy;               /* TC anncoument mode, 0=only MPR, 1=MPR+MPRS, 2=All sym neighs */
207   uint8_t mpr_coverage;                /* How many additional MPRs should be selected */
208   uint8_t lq_fish;                     /* 0==Fisheye off, 1=Fisheye on */
209   olsr_reltime lq_dinter;              /* Dijkstra Calculation interval */
210   uint8_t lq_dlimit;                   /* Dijkstra Calculation limit */
211   uint8_t willingness;                 /* Manual Configured Willingness value */
212
213   uint16_t olsr_port;                  /* port number used for OLSR packages */
214   char *dlPath;                        /* absolute path for dynamic libraries */
215
216   uint16_t comport_http;               /* communication port for http connections */
217   uint16_t comport_http_limit;         /* maximum number of connections (including interactive ones) */
218   uint16_t comport_txt;                /* communication port for txt connections */
219   uint16_t comport_txt_limit;          /* maximum number of interactive connections */
220
221   /*
222    * Someone has added global variables to the config struct.
223    * Because this saves binary link info we keep it that way.
224    * ========= Please add globals below this line. =========
225    */
226
227   union olsr_ip_addr router_id;        /* Main address of this node */
228   olsr_reltime will_int;                      /* Willingness update interval if willingness_auto */
229   int exit_value;                      /* Global return value for process termination */
230
231   int ioctl_s;                         /* Socket used for ioctl calls */
232 #if defined linux
233   int rts_linux;                       /* Socket used for rtnetlink messages */
234 #endif
235 #if defined __FreeBSD__ || defined __MacOSX__ || defined __NetBSD__ || defined __OpenBSD__
236   int rts_bsd;                         /* Socket used for route changes on BSDs */
237 #endif
238 };
239
240 /*
241  * Global olsrd configuragtion
242  */
243 extern struct olsr_config *EXPORT(olsr_cnf);
244
245 /*
246  * Interface to parser
247  */
248
249 typedef enum {
250   CFG_ERROR,                           /* Severe parsing error, e.g. file not found, mixed up args */
251   CFG_WARN,                            /* Non-severe error, e.g. use of deprecated option */
252   CFG_EXIT,                            /* Given options will exit() e.g. "--version" or "--help" */
253   CFG_OK                               /* Config is parsed and does not have any errors */
254 } olsr_parse_cfg_result;
255
256 olsr_parse_cfg_result olsr_parse_cfg(int argc, char *argv[], const char *file, char *rmsg, struct olsr_config **rcfg);
257 struct olsr_if_options *olsr_get_default_if_options(void);
258 struct olsr_config *olsr_get_default_cfg(void);
259 int olsr_sanity_check_cfg(struct olsr_config *cfg);
260 void olsr_free_cfg(struct olsr_config *cfg);
261
262 #endif /* _OLSRD_CFG_H */
263
264 /*
265  * Local Variables:
266  * c-basic-offset: 2
267  * indent-tabs-mode: nil
268  * End:
269  */