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