Added bounds checking for config file parsing
[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.12 2004/11/20 18:46:03 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   struct if_config_options *next;
112 };
113
114
115
116 struct olsr_if
117 {
118   char                     *name;
119   char                     *config;
120   int                      index;
121   olsr_bool                configured;
122   struct interface         *interf;
123   struct if_config_options *cnf;
124   struct olsr_if           *next;
125 };
126
127 struct hna4_entry
128 {
129   union olsr_ip_addr       net;
130   union olsr_ip_addr       netmask;
131   struct hna4_entry        *next;
132 };
133
134 struct hna6_entry
135 {
136   union olsr_ip_addr       net;
137   olsr_u16_t               prefix_len;
138   struct hna6_entry        *next;
139 };
140
141 struct hyst_param
142 {
143   float                    scaling;
144   float                    thr_high;
145   float                    thr_low;
146 };
147
148 struct plugin_param
149 {
150   char                     *key;
151   char                     *value;
152   struct plugin_param      *next;
153 };
154
155 struct plugin_entry
156 {
157   char                     *name;
158   struct plugin_param      *params;
159   struct plugin_entry      *next;
160 };
161
162 struct ipc_host
163 {
164   union olsr_ip_addr       host;
165   struct ipc_host          *next;
166 };
167
168 struct ipc_net
169 {
170   union olsr_ip_addr       net;
171   union olsr_ip_addr       mask;
172   struct ipc_net           *next;
173 };
174
175 /*
176  * The config struct
177  */
178
179 struct olsrd_config
180 {
181   int                      debug_level;
182   int                      ip_version;
183   olsr_bool                allow_no_interfaces;
184   olsr_u16_t               tos;
185   olsr_bool                willingness_auto;
186   olsr_u8_t                willingness;
187   int                      ipc_connections;
188   olsr_bool                open_ipc;
189   olsr_bool                use_hysteresis;
190   struct hyst_param        hysteresis_param;
191   float                    pollrate;
192   olsr_u8_t                tc_redundancy;
193   olsr_u8_t                mpr_coverage;
194   olsr_bool                clear_screen;
195   olsr_u8_t                lq_level;
196   olsr_u32_t               lq_wsize;
197   struct plugin_entry      *plugins;
198   struct hna4_entry        *hna4_entries;
199   struct hna6_entry        *hna6_entries;
200   struct ipc_host          *ipc_hosts;
201   struct ipc_net           *ipc_nets;
202   struct olsr_if           *interfaces;
203   olsr_u16_t               ifcnt;
204 };
205
206
207 /*
208  * Interface to parser
209  */
210
211 struct olsrd_config *
212 olsrd_parse_cnf(char *);
213
214 void
215 olsrd_free_cnf(struct olsrd_config *);
216
217 void
218 olsrd_print_cnf(struct olsrd_config *);
219
220 int
221 olsrd_write_cnf(struct olsrd_config *, char *);
222
223 struct if_config_options *
224 get_default_if_config(void);
225
226 struct olsrd_config *
227 olsrd_get_default_cnf(void);
228
229 void *
230 olsrd_cnf_malloc(unsigned int);
231
232 void
233 olsrd_cnf_free(void *);
234
235 #endif