bc4bc56057c8209ff182b6fd0f0660b1a3f9846a
[olsrd.git] / lib / nameservice / src / olsrd_plugin.h
1 /*
2  * Copyright (c) 2005, Bruno Randolf <bruno.randolf@4g-systems.biz>
3  * Copyright (c) 2004, Andreas T√łnnesen(andreto-at-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 notice, 
11  *   this list of conditions and the following disclaimer.
12  * * Redistributions in binary form must reproduce the above copyright notice, 
13  *   this list of conditions and the following disclaimer in the documentation 
14  *   and/or other materials provided with the distribution.
15  * * Neither the name of the UniK olsr daemon nor the names of its contributors 
16  *   may be used to endorse or promote products derived from this software 
17  *   without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
21  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
22  * IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
23  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
24  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 
26  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
27  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
28  * OF THE POSSIBILITY OF SUCH DAMAGE.
29  *
30  */
31
32 /* $Id: olsrd_plugin.h,v 1.4 2005/03/01 21:35:14 tlopatic Exp $ */
33
34 /*
35  * Dynamic linked library for UniK OLSRd
36  */
37
38 #ifndef _OLSRD_PLUGIN_DEFS
39 #define _OLSRD_PLUGIN_DEFS
40
41
42 #include <sys/socket.h>
43 #include <netinet/in.h>
44 #include <arpa/inet.h>
45 #include <sys/time.h>
46 #include <time.h>
47 #include <math.h>
48
49 #include "olsr_plugin_io.h"
50 #include "olsr_types.h"
51 #include "olsr_cfg.h"
52 #include "hashing.h"
53 #include "interfaces.h"
54
55 char *
56 strndup(const char *ptr, size_t size);
57
58 #ifndef linux
59 #include <stdlib.h>
60 #endif
61
62 /* Use this as PARSER_TYPE to receive ALL messages! */
63 #define PROMISCUOUS 0xffffffff
64
65 /* Global config pointer */
66 struct olsrd_config *cfg;
67
68 /****************************************************************************
69  *           Various datastructures and definitions from olsrd              *
70  ****************************************************************************/
71
72 #define MAX_TTL               0xff
73
74
75 /*
76  *Link Types
77  */
78
79 #define UNSPEC_LINK           0
80 #define ASYM_LINK             1
81 #define SYM_LINK              2
82 #define LOST_LINK             3
83 #define HIDE_LINK             4
84 #define MAX_LINK              4
85
86
87 #define MAXIFS         8 /* Maximum number of interfaces (from defs.h) in uOLSRd */
88
89
90
91 /****************************************************************************
92  *                            PACKET SECTION                                *
93  ****************************************************************************/
94
95  /**********************************
96  * DEFINE YOUR CUSTOM PACKET HERE *
97  **********************************/
98 #include "nameservice_msg.h"
99
100 /* 
101  * ALWAYS USE THESE WRAPPERS TO
102  * ENSURE IPv4 <-> IPv6 compability 
103  */
104
105 union olsr_message
106 {
107   struct olsrmsg v4;
108   struct olsrmsg6 v6;
109 };
110
111
112
113
114 /***************************************************************************
115  *                 Functions provided by uolsrd_plugin.c                   *
116  *                  Similar to their siblings in olsrd                     *
117  ***************************************************************************/
118
119 char ipv6_buf[100]; /* buffer for IPv6 inet_htop */
120
121 /* All these could optionally be fetched from olsrd */
122
123 olsr_u32_t
124 olsr_hashing(union olsr_ip_addr *);
125
126 void
127 olsr_get_timestamp(olsr_u32_t, struct timeval *);
128
129 void
130 olsr_init_timer(olsr_u32_t, struct timeval *);
131
132 int
133 olsr_timed_out(struct timeval *);
134
135 char *
136 olsr_ip_to_string(union olsr_ip_addr *);
137
138
139
140 /****************************************************************************
141  *                Function pointers to functions in olsrd                   *
142  *              These allow direct access to olsrd functions                *
143  ****************************************************************************/
144
145 /* The multi-purpose funtion. All other functions are fetched trough this */
146 int (*olsr_plugin_io)(int, void *, size_t);
147
148 /* add a prser function */
149 void (*olsr_parser_add_function)(void (*)(union olsr_message *, struct interface *, union olsr_ip_addr *), int, int);
150
151 /* Register a timeout function */
152 int (*olsr_register_timeout_function)(void (*)(void));
153
154 /* Register a scheduled event */
155 int (*olsr_register_scheduler_event)(void (*)(void *), void *, float, float, olsr_u8_t *);
156
157 /* Get the next message seqno in line */
158 olsr_u16_t (*get_msg_seqno)(void);
159
160 int (*net_outbuffer_push)(struct interface *, olsr_u8_t *, olsr_u16_t);
161
162 /* Transmit package */
163 int (*net_output)(struct interface*);
164
165 /* Check the duplicate table for prior processing */
166 int (*check_dup_proc)(union olsr_ip_addr *, olsr_u16_t);
167
168 /* Default forward algorithm */
169 int (*default_fwd)(union olsr_message *, 
170                    union olsr_ip_addr *, 
171                    olsr_u16_t,  
172                    struct interface *, 
173                    union olsr_ip_addr *);
174
175 /* Add a socket to the main olsrd select loop */
176 void (*add_olsr_socket)(int, void(*)(int));
177
178 /* get the link status to a neighbor */
179 int (*check_neighbor_link)(union olsr_ip_addr *);
180
181 /* Mantissa/exponen conversions */
182 olsr_u8_t (*double_to_me)(double);
183
184 double (*me_to_double)(olsr_u8_t);
185
186 /* olsrd printf wrapper */
187 int (*olsr_printf)(int, char *, ...);
188
189 /* olsrd malloc wrapper */
190 void *(*olsr_malloc)(size_t, const char *);
191
192
193 /****************************************************************************
194  *                             Data from olsrd                              *
195  *           NOTE THAT POINTERS POINT TO THE DATA USED BY OLSRD!            *
196  *               NEVER ALTER DATA POINTED TO BY THESE POINTERS              * 
197  *                   UNLESS YOU KNOW WHAT YOU ARE DOING!!!                  *
198  ****************************************************************************/
199 /**
200  * The interface list from olsrd
201  */
202
203 struct interface   *ifs;
204
205 /* These two are set automatically by olsrd at load time */
206 int                ipversion;  /* IPversion in use */
207 union olsr_ip_addr *main_addr; /* Main address */
208
209
210 size_t             ipsize;     /* Size of the ipadresses used */
211 struct timeval     *now;       /* the olsrds schedulers idea of current time */
212
213
214 /****************************************************************************
215  *                Functions that the plugin MUST provide                    *
216  ****************************************************************************/
217
218
219 /* Initialization function */
220 int
221 olsr_plugin_init(void);
222
223 /* Destructor function */
224 void
225 olsr_plugin_exit(void);
226
227 /* Mulitpurpose funtion */
228 int
229 plugin_io(int, void *, size_t);
230
231 /* Plugin interface version */
232 int 
233 get_plugin_interface_version(void);
234
235
236 /*****************************************************************************
237  *                               Plugin data                                 *
238  *****************************************************************************/
239
240 #define MOD_DESC PLUGIN_NAME " " PLUGIN_VERSION
241 #define PLUGIN_INTERFACE_VERSION 2
242
243 #endif