Updated some structs that did not reflect their siblings in olsrd
[olsrd.git] / lib / dot_draw / src / olsrd_plugin.h
1 /*
2  * The olsr.org Optimized Link-State Routing daemon(olsrd)
3  * Copyright (c) 2004, Andreas T√łnnesen(andreto@olsr.org)
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without 
7  * modification, are permitted provided that the following conditions 
8  * are met:
9  *
10  * * Redistributions of source code must retain the above copyright 
11  *   notice, this list of conditions and the following disclaimer.
12  * * Redistributions in binary form must reproduce the above copyright 
13  *   notice, this list of conditions and the following disclaimer in 
14  *   the documentation and/or other materials provided with the 
15  *   distribution.
16  * * Neither the name of olsr.org, olsrd nor the names of its 
17  *   contributors may be used to endorse or promote products derived 
18  *   from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
23  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
24  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
26  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
27  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
28  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
30  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
31  * POSSIBILITY OF SUCH DAMAGE.
32  *
33  * Visit http://www.olsr.org for more information.
34  *
35  * If you find this software useful feel free to make a donation
36  * to the project. For more information see the website or contact
37  * the copyright holders.
38  *
39  * $Id: olsrd_plugin.h,v 1.10 2004/12/03 22:05:24 kattemat Exp $
40  */
41
42 /*
43  * Dynamic linked library for the olsr.org olsr daemon
44  */
45
46 #ifndef _OLSRD_PLUGIN_DEFS
47 #define _OLSRD_PLUGIN_DEFS
48
49
50 #include <sys/socket.h>
51 #include <netinet/in.h>
52 #include <arpa/inet.h>
53 #include <sys/time.h>
54 #include <time.h>
55 #include <math.h>
56
57 #include "olsr_plugin_io.h"
58
59
60 /*****************************************************************************
61  *                               Plugin data                                 *
62  *                       ALTER THIS TO YOUR OWN NEED                         *
63  *****************************************************************************/
64
65 #define PLUGIN_NAME    "OLSRD dot draw plugin"
66 #define PLUGIN_VERSION "0.3"
67 #define PLUGIN_AUTHOR   "Andreas T√łnnesen"
68 #define MOD_DESC PLUGIN_NAME " " PLUGIN_VERSION " by " PLUGIN_AUTHOR
69 #define PLUGIN_INTERFACE_VERSION 2
70
71 struct in_addr ipc_accept_ip;
72 int ipc_port;
73
74 /****************************************************************************
75  *           Various datastructures and definitions from olsrd              *
76  ****************************************************************************/
77
78 /*
79  * TYPES SECTION
80  */
81
82 typedef enum
83 {
84     OLSR_FALSE = 0,
85     OLSR_TRUE
86 }olsr_bool;
87
88
89
90 /* types */
91 #include <sys/types.h>
92
93 #ifndef WIN32
94 typedef u_int8_t        olsr_u8_t;
95 typedef u_int16_t       olsr_u16_t;
96 typedef u_int32_t       olsr_u32_t;
97 typedef int8_t          olsr_8_t;
98 typedef int16_t         olsr_16_t;
99 typedef int32_t         olsr_32_t;
100 #else
101 typedef unsigned char olsr_u8_t;
102 typedef unsigned short olsr_u16_t;
103 typedef unsigned int olsr_u32_t;
104 typedef char olsr_8_t;
105 typedef short olsr_16_t;
106 typedef int olsr_32_t;
107 #endif
108
109
110 /*
111  * VARIOUS DEFINITIONS
112  */
113
114 union olsr_ip_addr
115 {
116   olsr_u32_t v4;
117   struct in6_addr v6;
118 };
119
120 union hna_netmask
121 {
122   olsr_u32_t v4;
123   olsr_u16_t v6;
124 };
125
126 /*
127  * Hashing
128  */
129
130 #define HASHSIZE        32
131 #define HASHMASK        (HASHSIZE - 1)
132
133 #define MAXIFS         8 /* Maximum number of interfaces (from defs.h) in uOLSRd */
134
135
136
137 /*
138  * Neighbor structures
139  */
140
141 /* One hop neighbor */
142
143 struct neighbor_2_list_entry 
144 {
145   struct neighbor_2_entry      *neighbor_2;
146   struct timeval               neighbor_2_timer;
147   struct neighbor_2_list_entry *next;
148   struct neighbor_2_list_entry *prev;
149 };
150
151 struct neighbor_entry
152 {
153   union olsr_ip_addr           neighbor_main_addr;
154   olsr_u8_t                    status;
155   olsr_u8_t                    willingness;
156   olsr_bool                    is_mpr;
157   olsr_bool                    was_mpr; /* Used to detect changes in MPR */
158   olsr_bool                    skip;
159   int                          neighbor_2_nocov;
160   int                          linkcount;
161   struct neighbor_2_list_entry neighbor_2_list; 
162   struct neighbor_entry        *next;
163   struct neighbor_entry        *prev;
164 };
165
166
167 /* Two hop neighbor */
168
169
170 struct neighbor_list_entry 
171 {
172   struct        neighbor_entry *neighbor;
173   double path_link_quality;
174   double saved_path_link_quality;
175   struct        neighbor_list_entry *next;
176   struct        neighbor_list_entry *prev;
177 };
178
179 struct neighbor_2_entry
180 {
181   union olsr_ip_addr         neighbor_2_addr;
182   olsr_u8_t                  mpr_covered_count;    /*used in mpr calculation*/
183   olsr_u8_t                  processed;            /*used in mpr calculation*/
184   olsr_16_t                  neighbor_2_pointer;   /* Neighbor count */
185   struct neighbor_list_entry neighbor_2_nblist; 
186   struct neighbor_2_entry    *prev;
187   struct neighbor_2_entry    *next;
188 };
189
190 /* Topology entry */
191
192 struct topo_dst
193 {
194   union olsr_ip_addr T_dest_addr;
195   struct timeval T_time;
196   olsr_u16_t T_seq;
197   struct topo_dst *next;
198   struct topo_dst *prev;
199   double link_quality;
200   double inverse_link_quality;
201   double saved_link_quality;
202   double saved_inverse_link_quality;
203 };
204
205 struct tc_entry
206 {
207   union olsr_ip_addr T_last_addr;
208   struct topo_dst destinations;
209   struct tc_entry *next;
210   struct tc_entry *prev;
211 };
212
213 /* HNA */
214
215 /* hna_netmask declared in packet.h */
216
217 struct hna_net
218 {
219   union olsr_ip_addr A_network_addr;
220   union hna_netmask  A_netmask;
221   struct timeval     A_time;
222   struct hna_net     *next;
223   struct hna_net     *prev;
224 };
225
226 struct hna_entry
227 {
228   union olsr_ip_addr A_gateway_addr;
229   struct hna_net     networks;
230   struct hna_entry   *next;
231   struct hna_entry   *prev;
232 };
233
234 /* The lists */
235
236 struct neighbor_entry *neighbortable;
237 struct neighbor_2_entry *two_hop_neighbortable;
238 struct tc_entry *tc_table;
239 struct hna_entry *hna_set;
240
241
242 /* Buffer for olsr_ip_to_string */
243
244 char ipv6_buf[100]; /* buffer for IPv6 inet_htop */
245
246
247 /****************************************************************************
248  *                Function pointers to functions in olsrd                   *
249  *              These allow direct access to olsrd functions                *
250  ****************************************************************************/
251
252 /* The multi-purpose funtion. All other functions are fetched trough this */
253 int (*olsr_plugin_io)(int, void *, size_t);
254
255 /* Register a "process changes" function */
256 int (*register_pcf)(int (*)(int, int, int));
257
258 /* Add a socket to the main olsrd select loop */
259 void (*add_olsr_socket)(int, void(*)(int));
260
261 /* Remove a socket from the main olsrd select loop */
262 int (*remove_olsr_socket)(int, void(*)(int));
263
264 /* get the link status to a neighbor */
265 int (*check_neighbor_link)(union olsr_ip_addr *);
266
267 /* olsrd printf wrapper */
268 int (*olsr_printf)(int, char *, ...);
269
270 /* olsrd malloc wrapper */
271 void *(*olsr_malloc)(size_t, const char *);
272
273
274 /****************************************************************************
275  *                             Data from olsrd                              *
276  *           NOTE THAT POINTERS POINT TO THE DATA USED BY OLSRD!            *
277  *               NEVER ALTER DATA POINTED TO BY THESE POINTERS              * 
278  *                   UNLESS YOU KNOW WHAT YOU ARE DOING!!!                  *
279  ****************************************************************************/
280
281 /* These two are set automatically by olsrd at load time */
282 int                ipversion;  /* IPversion in use */
283 union olsr_ip_addr *main_addr; /* Main address */
284
285
286 size_t             ipsize;     /* Size of the ipadresses used */
287
288 /****************************************************************************
289  *                Functions that the plugin MUST provide                    *
290  ****************************************************************************/
291
292
293 /* Initialization function */
294 int
295 olsr_plugin_init(void);
296
297 /* IPC initialization function */
298 int
299 plugin_ipc_init(void);
300
301 int
302 register_olsr_param(char *, char *);
303
304 /* Destructor function */
305 void
306 olsr_plugin_exit(void);
307
308 /* Mulitpurpose funtion */
309 int
310 plugin_io(int, void *, size_t);
311
312 int 
313 get_plugin_interface_version(void);
314
315 #endif