include ADMIN_INTERFACE flag and src/cfgparser/cfgfile_gen.o
[olsrd.git] / lib / powerinfo / src / olsrd_plugin.c
1
2 /*
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.c,v 1.5 2005/04/10 11:52:05 kattemat Exp $ */
33
34
35 /*
36  * Dynamic linked library example for UniK OLSRd
37  */
38
39
40 #include "olsrd_plugin.h"
41 #include <stdio.h>
42 #include "plugin_loader.h"
43
44 void __attribute__ ((constructor)) 
45 my_init(void);
46
47 void __attribute__ ((destructor)) 
48 my_fini(void);
49
50 int
51 register_olsr_data(struct olsr_plugin_data *);
52
53 int
54 fetch_olsrd_data(void);
55
56 /*
57  * Returns the version of the plugin interface that is used
58  * THIS IS NOT THE VERSION OF YOUR PLUGIN!
59  */
60 int 
61 get_plugin_interface_version()
62 {
63   return PLUGIN_INTERFACE_VERSION;
64 }
65
66 /**
67  *Constructor
68  */
69 void
70 my_init()
71 {
72   /* Print plugin info to stdout */
73   printf("%s\n", MOD_DESC);
74
75   ifs = NULL;
76
77   return;
78 }
79
80 /**
81  *Destructor
82  */
83 void
84 my_fini()
85 {
86
87   /* Calls the destruction function
88    * olsr_plugin_exit()
89    * This function should be present in your
90    * sourcefile and all data destruction
91    * should happen there - NOT HERE!
92    */
93   olsr_plugin_exit();
94
95   return;
96 }
97
98 int
99 register_olsr_param(char *key, char *value)
100 {
101   return 1;
102 }
103
104 /**
105  *Register needed functions and pointers
106  *
107  *This function should not be changed!
108  *
109  */
110 int
111 register_olsr_data(struct olsr_plugin_data *data)
112 {
113   /* IPversion */
114   ipversion = data->ipversion;
115   /* Main address */
116   main_addr = data->main_addr;
117
118   /* Multi-purpose function */
119   olsr_plugin_io = data->olsr_plugin_io;
120
121   /* Set size of IP address */
122   if(ipversion == AF_INET)
123     {
124       ipsize = sizeof(olsr_u32_t);
125     }
126   else
127     {
128       ipsize = sizeof(struct in6_addr);
129     }
130
131   if(!fetch_olsrd_data())
132     {
133       fprintf(stderr, "Could not fetch the neccessary functions from olsrd!\n");
134       return 0;
135     }
136
137   /* Calls the initialization function
138    * olsr_plugin_init()
139    * This function should be present in your
140    * sourcefile and all data initialization
141    * should happen there - NOT HERE!
142    */
143   if(!olsr_plugin_init())
144     {
145       fprintf(stderr, "Could not initialize plugin!\n");
146       return 0;
147     }
148
149   if(!plugin_ipc_init())
150     {
151       fprintf(stderr, "Could not initialize plugin IPC!\n");
152       return 0;
153     }
154
155   return 1;
156 }
157
158
159
160 int
161 fetch_olsrd_data()
162 {
163   int retval = 1;
164
165
166   /* Packet buffer */
167   if(!olsr_plugin_io(GETF__NET_OUTBUFFER_PUSH, &net_outbuffer_push, sizeof(net_outbuffer_push)))
168   {
169     net_outbuffer_push = NULL;
170     retval = 0;
171   }
172
173   /* Olsr debug output function */
174   if(!olsr_plugin_io(GETF__OLSR_PRINTF, 
175                      &olsr_printf, 
176                      sizeof(olsr_printf)))
177   {
178     olsr_printf = NULL;
179     retval = 0;
180   }
181
182
183   /* Olsr malloc wrapper */
184   if(!olsr_plugin_io(GETF__OLSR_MALLOC, 
185                      &olsr_malloc, 
186                      sizeof(olsr_malloc)))
187   {
188     olsr_malloc = NULL;
189     retval = 0;
190   }
191
192   /* Parser registration */
193   if(!olsr_plugin_io(GETF__OLSR_PARSER_ADD_FUNCTION, 
194                      &olsr_parser_add_function, 
195                      sizeof(olsr_parser_add_function)))
196   {
197     olsr_parser_add_function = NULL;
198     retval = 0;
199   }
200
201   /* Scheduler timeout registration */
202   if(!olsr_plugin_io(GETF__OLSR_REGISTER_TIMEOUT_FUNCTION, 
203                      &olsr_register_timeout_function, 
204                      sizeof(olsr_register_timeout_function)))
205   {
206     olsr_register_timeout_function = NULL;
207     retval = 0;
208   }
209
210   /* Scheduler event registration */
211   if(!olsr_plugin_io(GETF__OLSR_REGISTER_SCHEDULER_EVENT, 
212                      &olsr_register_scheduler_event, 
213                      sizeof(olsr_register_scheduler_event)))
214   {
215     olsr_register_scheduler_event = NULL;
216     retval = 0;
217   }
218
219   /* Double to mantissa/exponent */
220   if(!olsr_plugin_io(GETF__DOUBLE_TO_ME, 
221                      &double_to_me, 
222                      sizeof(double_to_me)))
223   {
224     double_to_me = NULL;
225     retval = 0;
226   }
227
228
229
230   /* Mantissa/exponent to double conversion */
231   if(!olsr_plugin_io(GETF__ME_TO_DOUBLE, 
232                      &me_to_double, 
233                      sizeof(me_to_double)))
234   {
235     me_to_double = NULL;
236     retval = 0;
237   }
238
239
240   /* Interface list */
241   if(!olsr_plugin_io(GETD__IFNET, &ifs, sizeof(ifs)))
242   {
243     ifs = NULL;
244     retval = 0;
245   }
246
247   /* Messageseqno fetch function */
248   if(!olsr_plugin_io(GETF__GET_MSG_SEQNO, &get_msg_seqno, sizeof(get_msg_seqno)))
249   {
250     get_msg_seqno = NULL;
251     retval = 0;
252   }
253
254   /* Scheduler maintained timestamp */
255   if(!olsr_plugin_io(GETD__NOW, &now, sizeof(now)))
256   {
257     now = NULL;
258     retval = 0;
259   }
260
261   /* Output function */
262   if(!olsr_plugin_io(GETF__NET_OUTPUT, &net_output, sizeof(net_output)))
263   {
264     net_output = NULL;
265     retval = 0;
266   }
267
268   /* Duplicate check (for processing) */
269   if(!olsr_plugin_io(GETF__OLSR_CHECK_DUP_TABLE_PROC, &check_dup_proc, sizeof(check_dup_proc)))
270   {
271     check_dup_proc = NULL;
272     retval = 0;
273   }
274
275   /* Default forward function */
276   if(!olsr_plugin_io(GETF__OLSR_FORWARD_MESSAGE, &default_fwd, sizeof(default_fwd)))
277   {
278     default_fwd = NULL;
279     retval = 0;
280   }
281
282
283   /* Add socket to OLSR select function */
284   if(!olsr_plugin_io(GETF__ADD_OLSR_SOCKET, &add_olsr_socket, sizeof(add_olsr_socket)))
285   {
286     add_olsr_socket = NULL;
287     retval = 0;
288   }
289
290   /* Neighbor link status lookup */
291   if(!olsr_plugin_io(GETF__CHECK_NEIGHBOR_LINK, &check_neighbor_link, sizeof(check_neighbor_link)))
292   {
293     check_neighbor_link = NULL;
294     retval = 0;
295   }
296
297
298   /* Apm info */
299   if(!olsr_plugin_io(GETF__APM_READ, &apm_read, sizeof(apm_read)))
300   {
301     apm_read = NULL;
302     retval = 0;
303   }
304
305   return retval;
306
307 }