6edded78f42b1faa7fbd5208242f848f5d8e69b4
[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.9 2004/11/12 20:48:19 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
42
43 #ifndef IPV6_ADDR_SITELOCAL
44 #define IPV6_ADDR_SITELOCAL    0x0040U
45 #endif
46
47
48 #ifdef MAKELIB
49
50 struct interface 
51 {
52   int foo;
53 };
54
55 #else 
56
57 #ifdef MAKEBIN
58
59 struct interface 
60 {
61   int foo;
62 };
63
64 #else
65
66 /* Part of olsrd */
67
68 #include "interfaces.h"
69
70 #endif
71
72 #endif
73
74 struct olsr_msg_params
75 {
76   float                    emission_interval;
77   float                    validity_time;
78 };
79
80 struct if_config_options
81 {
82   union olsr_ip_addr       ipv4_broadcast;
83   int                      ipv6_addrtype;
84   union olsr_ip_addr       ipv6_multi_site;
85   union olsr_ip_addr       ipv6_multi_glbl;
86   struct olsr_msg_params   hello_params;
87   struct olsr_msg_params   tc_params;
88   struct olsr_msg_params   mid_params;
89   struct olsr_msg_params   hna_params;
90   struct if_config_options *next;
91 };
92
93
94
95 struct olsr_if
96 {
97   char                     *name;
98   char                     *config;
99   int                      index;
100   olsr_bool                configured;
101   struct interface         *interf;
102   struct if_config_options *cnf;
103   struct olsr_if           *next;
104 };
105
106 struct hna4_entry
107 {
108   union olsr_ip_addr       net;
109   union olsr_ip_addr       netmask;
110   struct hna4_entry        *next;
111 };
112
113 struct hna6_entry
114 {
115   union olsr_ip_addr       net;
116   olsr_u16_t               prefix_len;
117   struct hna6_entry        *next;
118 };
119
120 struct hyst_param
121 {
122   float                    scaling;
123   float                    thr_high;
124   float                    thr_low;
125 };
126
127 struct plugin_param
128 {
129   char                     *key;
130   char                     *value;
131   struct plugin_param      *next;
132 };
133
134 struct plugin_entry
135 {
136   char                     *name;
137   struct plugin_param      *params;
138   struct plugin_entry      *next;
139 };
140
141 struct ipc_host
142 {
143   union olsr_ip_addr       host;
144   struct ipc_host          *next;
145 };
146
147 struct ipc_net
148 {
149   union olsr_ip_addr       net;
150   union olsr_ip_addr       mask;
151   struct ipc_net           *next;
152 };
153
154 /*
155  * The config struct
156  */
157
158 struct olsrd_config
159 {
160   int                      debug_level;
161   int                      ip_version;
162   olsr_bool                allow_no_interfaces;
163   olsr_u16_t               tos;
164   olsr_bool                willingness_auto;
165   olsr_u8_t                willingness;
166   int                      ipc_connections;
167   olsr_bool                open_ipc;
168   olsr_bool                use_hysteresis;
169   struct hyst_param        hysteresis_param;
170   float                    pollrate;
171   olsr_u8_t                tc_redundancy;
172   olsr_u8_t                mpr_coverage;
173   olsr_u8_t                lq_level;
174   struct plugin_entry      *plugins;
175   struct hna4_entry        *hna4_entries;
176   struct hna6_entry        *hna6_entries;
177   struct ipc_host          *ipc_hosts;
178   struct ipc_net           *ipc_nets;
179   struct olsr_if           *interfaces;
180   olsr_u16_t               ifcnt;
181 };
182
183
184 /*
185  * Interface to parser
186  */
187
188 struct olsrd_config *
189 olsrd_parse_cnf(char *);
190
191 void
192 olsrd_free_cnf(struct olsrd_config *);
193
194 void
195 olsrd_print_cnf(struct olsrd_config *);
196
197 int
198 olsrd_write_cnf(struct olsrd_config *, char *);
199
200 struct if_config_options *
201 get_default_if_config(void);
202
203 struct olsrd_config *
204 olsrd_get_default_cnf(void);
205
206 #endif