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