adc5934c47b163f462248920360206736fe6950c
[olsrd.git] / src / defs.h
1 /*
2  * OLSR ad-hoc routing table management protocol
3  * Copyright (C) 2004 Andreas T√łnnesen (andreto@ifi.uio.no)
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: defs.h,v 1.14 2004/10/09 22:32:47 kattemat Exp $
23  *
24  */
25
26 #ifndef _OLSR_DEFS
27 #define _OLSR_DEFS
28
29
30 #include <sys/time.h>
31 #include <net/route.h>
32
33 #include <stdio.h>
34 #include <stdlib.h>
35 #include <string.h>
36 #include <unistd.h>
37 #include <errno.h>
38 #include <time.h>
39
40 #define UP             1
41 #define DOWN           0
42
43 #include "log.h"
44 #include "olsr_protocol.h"
45 #include "process_routes.h" /* Needed for rt_entry */
46 #include "net.h" /* IPaddr -> string conversions is used by everyone */
47 #include "olsr.h" /* Everybody uses theese */
48
49 #define VERSION "0.4.8-pre"
50 #define SOFTWARE_VERSION "olsr.org - " VERSION
51
52 #define HOPCNT_MAX              16      /* maximum hops number */
53 #define MAXMESSAGESIZE          1500    /* max broadcast size */
54 #define UDP_IP_HDRSIZE          28
55
56 #define OLSR_SELECT_TIMEOUT     2       /* The timeout for the main select loop */
57
58 #define MAX_IFS                 32
59
60
61 /* Debug helper macro */
62 #ifdef DEBUG
63 #define debug(format,args...) \
64    olsr_printf(1, "%s (%s:%d): ", __func__, __FILE__, __LINE__); \
65    olsr_printf(1, format, ##args);
66 #endif
67
68 /*
69  * Address list
70  */
71 struct addresses 
72 {
73   union olsr_ip_addr address;
74   struct addresses *next;
75 };
76
77
78 int exit_value; /* Global return value for process termination */
79
80 /* mantissa/exponent Vtime and Htime variables */
81 olsr_u8_t hello_vtime;
82 olsr_u8_t hello_nw_vtime;
83 olsr_u8_t tc_vtime;
84 olsr_u8_t mid_vtime;
85 olsr_u8_t hna_vtime;
86 olsr_u8_t htime;
87 olsr_u8_t htime_nw;
88
89
90 /* Timer data */
91 struct timeval now;             /* current idea of time */
92 struct tm *nowtm;               /* current idea of time (in tm) */
93
94 char ipv6_buf[100];             /* buffer for IPv6 inet_htop */
95 char ipv6_mult[50];             /* IPv6 multicast group */
96
97 int disp_pack_in;               /* display incoming packet content? */
98 int disp_pack_out;               /* display outgoing packet content? */
99
100
101 int use_ipc; /* Should we use the ipc socket for the front-end */
102
103 int use_hysteresis;
104
105 int llinfo;
106
107 int inet_tnl_added; /* If Internet gateway tunnel is added */
108 int use_tunnel; /* Use Internet gateway tunneling */
109 int gw_tunnel; /* Work as Internet gateway */
110
111
112 /*
113  * Willingness
114  */
115 int willingness_set;
116 int my_willingness;
117
118
119 /*
120  * Timer values
121  */
122
123 extern float will_int;
124 extern float neighbor_hold_time_nw;
125 extern float mid_hold_time;
126 extern float hna_hold_time;
127 extern float dup_hold_time;
128 extern float hello_int_nw;
129 extern float mid_int;
130 extern float max_jitter;
131
132
133 /*
134  * Debug value
135  */
136 int debug_level;
137
138 /*
139  * Ipversion beeing used AF_INET or AF_INET6
140  * and size of an IP address
141  */
142 int ipversion;
143 size_t ipsize;
144
145 /*
146  * IPv6 addresstype to use
147  * global or site-local
148  */
149 int ipv6_addrtype;
150
151 /*
152  * Address of this hosts OLSR interfaces
153  * and main address of this node
154  * and number of OLSR interfaces on this host
155  */
156 union olsr_ip_addr main_addr;
157 int nbinterf;
158 int allow_no_int; /* Run if no interfaces are present? */
159
160 /*
161  * Hysteresis data
162  */
163
164 float hyst_scaling;
165 float hyst_threshold_low;
166 float hyst_threshold_high;
167
168
169 /*
170  * TC redundancy
171  */
172
173 int tc_redundancy;
174 int sending_tc;
175
176 /*
177  * MPR redundacy
178  */
179
180 int mpr_coverage;
181
182
183 /*
184  * OLSR UPD port
185  */
186
187 int olsr_udp_port;
188
189 /* Timeout multipliers */
190
191 int neighbor_timeout_mult;
192 int topology_timeout_mult;
193 int neighbor_timeout_mult_nw;
194 int mid_timeout_mult;
195 int hna_timeout_mult;
196
197 /* The socket used for all ioctls */
198
199 int ioctl_s;
200
201 extern float hello_int, tc_int, polling_int, hna_int;
202
203
204 struct timeval fwdtimer[MAX_IFS];       /* forwarding timer */
205
206 extern struct timeval hold_time_fwd;
207
208 extern struct sockaddr_in6 null_addr6;
209
210
211 extern int del_gws;
212 extern int inet_gw; /* Are we an internet gateway? */
213
214 extern int minsize;
215
216 extern int option_i;
217
218 /* Broadcast 255.255.255.255 */
219 extern int bcast_set;
220 extern struct sockaddr_in bcastaddr;
221
222
223 extern struct hna_entry *hna_old;
224
225
226
227 extern struct ip_tunnel_parm ipt;
228 extern union olsr_ip_addr tnl_addr; /* The gateway address if inet_tnl_added==1 */
229
230 olsr_u8_t changes;                /* is set if changes occur in MPRS set */ 
231
232 extern float                  topology_hold_time, neighbor_hold_time;
233
234
235 /* TC empty message sending */
236 extern struct timeval send_empty_tc;
237
238
239 /* Used by everyone */
240
241 extern int
242 olsr_printf(int, char *, ...);
243
244 /*
245  *IPC functions
246  *These are moved to a plugin soon
247  */
248
249 int
250 ipc_init(void);
251
252 int
253 ipc_input(int);
254
255 int
256 shutdown_ipc(void);
257
258 int
259 ipc_output(struct olsr *);
260
261 int
262 ipc_send_net_info(void);
263
264 int
265 ipc_route_send_rtentry(union olsr_kernel_route *, int, char *);
266
267
268
269
270 #endif