Added -nofork option
[olsrd.git] / src / olsr_cfg.h
1 /*
2  * The olsr.org Optimized Link-State Routing daemon(olsrd)
3  * Copyright (c) 2004, Andreas T√łnnesen(andreto@olsr.org)
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without 
7  * modification, are permitted provided that the following conditions 
8  * are met:
9  *
10  * * Redistributions of source code must retain the above copyright 
11  *   notice, this list of conditions and the following disclaimer.
12  * * Redistributions in binary form must reproduce the above copyright 
13  *   notice, this list of conditions and the following disclaimer in 
14  *   the documentation and/or other materials provided with the 
15  *   distribution.
16  * * Neither the name of olsr.org, olsrd nor the names of its 
17  *   contributors may be used to endorse or promote products derived 
18  *   from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
23  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
24  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
26  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
27  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
28  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
30  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
31  * POSSIBILITY OF SUCH DAMAGE.
32  *
33  * Visit http://www.olsr.org for more information.
34  *
35  * If you find this software useful feel free to make a donation
36  * to the project. For more information see the website or contact
37  * the copyright holders.
38  *
39  * $Id: olsr_cfg.h,v 1.22 2005/03/10 18:09:32 kattemat Exp $
40  */
41
42
43 #ifndef _OLSRD_CFGPARSER_H
44 #define _OLSRD_CFGPARSER_H
45
46 #include "olsr_types.h"
47
48 /* Default valuse not declared in olsr_protocol.h */
49 #define DEF_POLLRATE        0.05
50 #define DEF_WILL_AUTO       OLSR_TRUE
51 #define DEF_ALLOW_NO_INTS   OLSR_TRUE
52 #define DEF_TOS             16
53 #define DEF_DEBUGLVL        1
54 #define DEF_IPC_CONNECTIONS 0
55 #define DEF_USE_HYST        OLSR_TRUE
56 #define DEF_LQ_LEVEL        0
57 #define DEF_LQ_WSIZE        10
58 #define DEF_CLEAR_SCREEN    OLSR_FALSE
59
60 /* Bounds */
61
62 #define MIN_INTERVAL        0.01
63
64 #define MAX_POLLRATE        10.0
65 #define MIN_POLLRATE        0.01
66 #define MAX_DEBUGLVL        9
67 #define MIN_DEBUGLVL        0
68 #define MAX_TOS             16
69 #define MIN_TOS             0
70 #define MAX_WILLINGNESS     7
71 #define MIN_WILLINGNESS     1
72 #define MAX_MPR_COVERAGE    20
73 #define MIN_MPR_COVERAGE    1
74 #define MAX_TC_REDUNDANCY   2
75 #define MIN_TC_REDUNDANCY   0
76 #define MAX_HYST_PARAM      1.0
77 #define MIN_HYST_PARAM      0.0
78 #define MAX_LQ_LEVEL        2
79 #define MIN_LQ_LEVEL        0
80 #define MAX_LQ_WSIZE        128
81 #define MIN_LQ_WSIZE        3
82
83 #ifndef IPV6_ADDR_SITELOCAL
84 #define IPV6_ADDR_SITELOCAL    0x0040U
85 #endif
86
87 #include "interfaces.h"
88
89 struct olsr_msg_params
90 {
91   float                    emission_interval;
92   float                    validity_time;
93 };
94
95 struct olsr_lq_mult
96 {
97   union olsr_ip_addr addr;
98   float val;
99   struct olsr_lq_mult *next;
100 };
101
102 struct olsr_if_weight
103 {
104   int        value;
105   olsr_bool  fixed;
106 };
107
108 struct if_config_options
109 {
110   union olsr_ip_addr       ipv4_broadcast;
111   int                      ipv6_addrtype;
112   union olsr_ip_addr       ipv6_multi_site;
113   union olsr_ip_addr       ipv6_multi_glbl;
114   struct olsr_if_weight    weight;
115   struct olsr_msg_params   hello_params;
116   struct olsr_msg_params   tc_params;
117   struct olsr_msg_params   mid_params;
118   struct olsr_msg_params   hna_params;
119   struct olsr_lq_mult      *lq_mult;
120 };
121
122
123
124 struct olsr_if
125 {
126   char                     *name;
127   char                     *config;
128   int                      index;
129   olsr_bool                configured;
130   struct interface         *interf;
131   struct if_config_options *cnf;
132   struct olsr_if           *next;
133 };
134
135 struct hna4_entry
136 {
137   union olsr_ip_addr       net;
138   union olsr_ip_addr       netmask;
139   struct hna4_entry        *next;
140 };
141
142 struct hna6_entry
143 {
144   union olsr_ip_addr       net;
145   olsr_u16_t               prefix_len;
146   struct hna6_entry        *next;
147 };
148
149 struct hyst_param
150 {
151   float                    scaling;
152   float                    thr_high;
153   float                    thr_low;
154 };
155
156 struct plugin_param
157 {
158   char                     *key;
159   char                     *value;
160   struct plugin_param      *next;
161 };
162
163 struct plugin_entry
164 {
165   char                     *name;
166   struct plugin_param      *params;
167   struct plugin_entry      *next;
168 };
169
170 struct ipc_host
171 {
172   union olsr_ip_addr       host;
173   struct ipc_host          *next;
174 };
175
176 struct ipc_net
177 {
178   union olsr_ip_addr       net;
179   union olsr_ip_addr       mask;
180   struct ipc_net           *next;
181 };
182
183 /*
184  * The config struct
185  */
186
187 struct olsrd_config
188 {
189   int                      debug_level;
190   olsr_bool                no_fork;
191   int                      ip_version;
192   olsr_bool                allow_no_interfaces;
193   olsr_u16_t               tos;
194   olsr_bool                willingness_auto;
195   olsr_u8_t                willingness;
196   int                      ipc_connections;
197   olsr_bool                open_ipc;
198   olsr_bool                use_hysteresis;
199   struct hyst_param        hysteresis_param;
200   float                    pollrate;
201   olsr_u8_t                tc_redundancy;
202   olsr_u8_t                mpr_coverage;
203   olsr_bool                clear_screen;
204   olsr_u8_t                lq_level;
205   olsr_u32_t               lq_wsize;
206   struct plugin_entry      *plugins;
207   struct hna4_entry        *hna4_entries;
208   struct hna6_entry        *hna6_entries;
209   struct ipc_host          *ipc_hosts;
210   struct ipc_net           *ipc_nets;
211   struct olsr_if           *interfaces;
212   olsr_u16_t               ifcnt;
213 };
214
215 #if defined __cplusplus
216 extern "C" {
217 #endif
218
219 /*
220  * Interface to parser
221  */
222
223 struct olsrd_config *
224 olsrd_parse_cnf(const char *);
225
226 int
227 olsrd_sanity_check_cnf(struct olsrd_config *);
228
229 void
230 olsrd_free_cnf(struct olsrd_config *);
231
232 void
233 olsrd_print_cnf(struct olsrd_config *);
234
235 int
236 olsrd_write_cnf(struct olsrd_config *, const char *);
237
238 struct if_config_options *
239 get_default_if_config(void);
240
241 struct olsrd_config *
242 olsrd_get_default_cnf(void);
243
244 void *
245 olsrd_cnf_malloc(unsigned int);
246
247 void
248 olsrd_cnf_free(void *);
249
250 #if defined __cplusplus
251 }
252 #endif
253
254 #endif