Added sanity check function in config parser
[olsrd.git] / src / olsr_cfg.h
1 /*
2  * OLSR ad-hoc routing table management protocol config parser
3  * Copyright (C) 2004 Andreas T√łnnesen (andreto@olsr.org)
4  *
5  * This file is part of the olsr.org OLSR daemon.
6  *
7  * olsr.org is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * olsr.org is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with olsr.org; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20  * 
21  * 
22  * $Id: olsr_cfg.h,v 1.13 2004/11/20 21:42:35 kattemat Exp $
23  *
24  */
25
26
27 #ifndef _OLSRD_CFGPARSER_H
28 #define _OLSRD_CFGPARSER_H
29
30 #include "olsr_protocol.h"
31
32 /* Default valuse not declared in olsr_protocol.h */
33 #define DEF_POLLRATE        0.05
34 #define DEF_WILL_AUTO       OLSR_TRUE
35 #define DEF_ALLOW_NO_INTS   OLSR_TRUE
36 #define DEF_TOS             16
37 #define DEF_DEBUGLVL        1
38 #define DEF_IPC_CONNECTIONS 0
39 #define DEF_USE_HYST        OLSR_TRUE
40 #define DEF_LQ_LEVEL        0
41 #define DEF_LQ_WSIZE        10
42 #define DEF_CLEAR_SCREEN    OLSR_FALSE
43
44 /* Bounds */
45
46 #define MIN_INTERVAL        0.01
47
48 #define MAX_POLLRATE        10.0
49 #define MIN_POLLRATE        0.01
50 #define MAX_DEBUGLVL        9
51 #define MIN_DEBUGLVL        0
52 #define MAX_TOS             16
53 #define MIN_TOS             0
54 #define MAX_WILLINGNESS     7
55 #define MIN_WILLINGNESS     1
56 #define MAX_MPR_COVERAGE    20
57 #define MIN_MPR_COVERAGE    1
58 #define MAX_TC_REDUNDANCY   2
59 #define MIN_TC_REDUNDANCY   0
60 #define MAX_HYST_PARAM      1.0
61 #define MIN_HYST_PARAM      0.0
62
63
64 #ifndef IPV6_ADDR_SITELOCAL
65 #define IPV6_ADDR_SITELOCAL    0x0040U
66 #endif
67
68
69 #ifdef MAKELIB
70
71 struct interface 
72 {
73   int foo;
74 };
75
76 #else 
77
78 #ifdef MAKEBIN
79
80 struct interface 
81 {
82   int foo;
83 };
84
85 #else
86
87 /* Part of olsrd */
88
89 #include "interfaces.h"
90
91 #endif
92
93 #endif
94
95 struct olsr_msg_params
96 {
97   float                    emission_interval;
98   float                    validity_time;
99 };
100
101 struct if_config_options
102 {
103   union olsr_ip_addr       ipv4_broadcast;
104   int                      ipv6_addrtype;
105   union olsr_ip_addr       ipv6_multi_site;
106   union olsr_ip_addr       ipv6_multi_glbl;
107   struct olsr_msg_params   hello_params;
108   struct olsr_msg_params   tc_params;
109   struct olsr_msg_params   mid_params;
110   struct olsr_msg_params   hna_params;
111 };
112
113
114
115 struct olsr_if
116 {
117   char                     *name;
118   char                     *config;
119   int                      index;
120   olsr_bool                configured;
121   struct interface         *interf;
122   struct if_config_options *cnf;
123   struct olsr_if           *next;
124 };
125
126 struct hna4_entry
127 {
128   union olsr_ip_addr       net;
129   union olsr_ip_addr       netmask;
130   struct hna4_entry        *next;
131 };
132
133 struct hna6_entry
134 {
135   union olsr_ip_addr       net;
136   olsr_u16_t               prefix_len;
137   struct hna6_entry        *next;
138 };
139
140 struct hyst_param
141 {
142   float                    scaling;
143   float                    thr_high;
144   float                    thr_low;
145 };
146
147 struct plugin_param
148 {
149   char                     *key;
150   char                     *value;
151   struct plugin_param      *next;
152 };
153
154 struct plugin_entry
155 {
156   char                     *name;
157   struct plugin_param      *params;
158   struct plugin_entry      *next;
159 };
160
161 struct ipc_host
162 {
163   union olsr_ip_addr       host;
164   struct ipc_host          *next;
165 };
166
167 struct ipc_net
168 {
169   union olsr_ip_addr       net;
170   union olsr_ip_addr       mask;
171   struct ipc_net           *next;
172 };
173
174 /*
175  * The config struct
176  */
177
178 struct olsrd_config
179 {
180   int                      debug_level;
181   int                      ip_version;
182   olsr_bool                allow_no_interfaces;
183   olsr_u16_t               tos;
184   olsr_bool                willingness_auto;
185   olsr_u8_t                willingness;
186   int                      ipc_connections;
187   olsr_bool                open_ipc;
188   olsr_bool                use_hysteresis;
189   struct hyst_param        hysteresis_param;
190   float                    pollrate;
191   olsr_u8_t                tc_redundancy;
192   olsr_u8_t                mpr_coverage;
193   olsr_bool                clear_screen;
194   olsr_u8_t                lq_level;
195   olsr_u32_t               lq_wsize;
196   struct plugin_entry      *plugins;
197   struct hna4_entry        *hna4_entries;
198   struct hna6_entry        *hna6_entries;
199   struct ipc_host          *ipc_hosts;
200   struct ipc_net           *ipc_nets;
201   struct olsr_if           *interfaces;
202   olsr_u16_t               ifcnt;
203 };
204
205
206 /*
207  * Interface to parser
208  */
209
210 struct olsrd_config *
211 olsrd_parse_cnf(char *);
212
213 int
214 olsrd_sanity_check_cnf(struct olsrd_config *);
215
216 void
217 olsrd_free_cnf(struct olsrd_config *);
218
219 void
220 olsrd_print_cnf(struct olsrd_config *);
221
222 int
223 olsrd_write_cnf(struct olsrd_config *, char *);
224
225 struct if_config_options *
226 get_default_if_config(void);
227
228 struct olsrd_config *
229 olsrd_get_default_cnf(void);
230
231 void *
232 olsrd_cnf_malloc(unsigned int);
233
234 void
235 olsrd_cnf_free(void *);
236
237 #endif