0d90f21fcc299c73f37716646df743b936a90821
[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   uint32_t emission_interval;
115   uint32_t 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_lq_mult *lq_mult;
137   bool autodetect_chg;
138   enum interface_mode mode;
139 };
140
141 struct olsr_if_config {
142   char *name;
143   char *config;
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;                      /* AF_INET of AF_INET6 */
173   size_t ipsize;                       /* Size of address */
174
175   unsigned char no_fork:1;             /* Should olsrd run in foreground? */
176   unsigned char allow_no_interfaces:1; /* Should olsrd stop if no ifaces? */
177   unsigned char willingness_auto:1;    /* Willingness in auto mode? */
178   unsigned char clear_screen:1;        /* Clear screen during debug output? */
179   unsigned char del_gws:1;             /* Delete InternetGWs at startup? */
180   unsigned char source_ip_mode:1;      /* Run OLSR routing in sourceip mode */
181
182   uint16_t tos;                        /* IP Type of Service Byte */
183   uint8_t rtproto;                     /* Policy routing proto, 0 == operating sys default */
184   uint8_t rttable;                     /* Policy routing table, 254(main) is default */
185   uint8_t rttable_default;             /* Polroute table for default route, 0==use rttable */
186   olsr_fib_metric_options fib_metric;  /* Determines route metrics update mode */
187
188   /* logging information */
189   bool log_event[LOG_SEVERITY_COUNT][LOG_SOURCE_COUNT]; /* New style */
190   bool log_target_stderr;              /* Log output to stderr? */
191   char *log_target_file;               /* Filename for log output file, NULL if unused */
192   bool log_target_syslog;              /* Log output also to syslog? */
193
194   struct plugin_entry *plugins;        /* List of plugins to load with plparams */
195   struct list_entity hna_entries;      /* List of manually configured HNA entries */
196   struct olsr_if_config *if_configs;   /* List of devices to be used by olsrd */
197
198   uint32_t pollrate;               /* Main loop poll rate, in milliseconds */
199   uint32_t nic_chgs_pollrate;      /* Interface poll rate */
200   uint32_t lq_nat_thresh;              /* Link quality NAT threshold, 1000 == unused */
201   uint8_t tc_redundancy;               /* TC anncoument mode, 0=only MPR, 1=MPR+MPRS, 2=All sym neighs */
202   uint8_t mpr_coverage;                /* How many additional MPRs should be selected */
203   uint8_t lq_fish;                     /* 0==Fisheye off, 1=Fisheye on */
204   uint32_t lq_dinter;              /* Dijkstra Calculation interval */
205   uint8_t lq_dlimit;                   /* Dijkstra Calculation limit */
206   uint8_t willingness;                 /* Manual Configured Willingness value */
207
208   uint16_t olsr_port;                  /* port number used for OLSR packages */
209   char *dlPath;                        /* absolute path for dynamic libraries */
210
211   uint16_t comport_http;               /* communication port for http connections */
212   uint16_t comport_http_limit;         /* maximum number of connections (including interactive ones) */
213   uint16_t comport_txt;                /* communication port for txt connections */
214   uint16_t comport_txt_limit;          /* maximum number of interactive connections */
215
216   struct olsr_msg_params tc_params;
217   struct olsr_msg_params mid_params;
218   struct olsr_msg_params hna_params;
219
220   /*
221    * Someone has added global variables to the config struct.
222    * Because this saves binary link info we keep it that way.
223    * ========= Please add globals below this line. =========
224    */
225
226   union olsr_ip_addr router_id;        /* Main address of this node */
227   uint32_t will_int;                      /* Willingness update interval if willingness_auto */
228   int exit_value;                      /* Global return value for process termination */
229
230   int ioctl_s;                         /* Socket used for ioctl calls */
231 #if defined linux
232   int rts_linux;                       /* Socket used for rtnetlink messages */
233 #endif
234 #if defined __FreeBSD__ || defined __MacOSX__ || defined __NetBSD__ || defined __OpenBSD__
235   int rts_bsd;                         /* Socket used for route changes on BSDs */
236 #endif
237 };
238
239 /*
240  * Global olsrd configuragtion
241  */
242 extern struct olsr_config *EXPORT(olsr_cnf);
243
244 /*
245  * Interface to parser
246  */
247
248 typedef enum {
249   CFG_ERROR,                           /* Severe parsing error, e.g. file not found, mixed up args */
250   CFG_WARN,                            /* Non-severe error, e.g. use of deprecated option */
251   CFG_EXIT,                            /* Given options will exit() e.g. "--version" or "--help" */
252   CFG_OK                               /* Config is parsed and does not have any errors */
253 } olsr_parse_cfg_result;
254
255 olsr_parse_cfg_result olsr_parse_cfg(int argc, char *argv[], const char *file, char *rmsg, struct olsr_config **rcfg);
256 struct olsr_if_options *olsr_get_default_if_options(void);
257 struct olsr_config *olsr_get_default_cfg(void);
258 int olsr_sanity_check_cfg(struct olsr_config *cfg);
259 void olsr_free_cfg(struct olsr_config *cfg);
260
261 #endif /* _OLSRD_CFG_H */
262
263 /*
264  * Local Variables:
265  * c-basic-offset: 2
266  * indent-tabs-mode: nil
267  * End:
268  */