Removed me_to_double use. Replaced with macro
[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.6 2005/05/25 13:41:47 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   /* Interface list */
229   if(!olsr_plugin_io(GETD__IFNET, &ifs, sizeof(ifs)))
230   {
231     ifs = NULL;
232     retval = 0;
233   }
234
235   /* Messageseqno fetch function */
236   if(!olsr_plugin_io(GETF__GET_MSG_SEQNO, &get_msg_seqno, sizeof(get_msg_seqno)))
237   {
238     get_msg_seqno = NULL;
239     retval = 0;
240   }
241
242   /* Scheduler maintained timestamp */
243   if(!olsr_plugin_io(GETD__NOW, &now, sizeof(now)))
244   {
245     now = NULL;
246     retval = 0;
247   }
248
249   /* Output function */
250   if(!olsr_plugin_io(GETF__NET_OUTPUT, &net_output, sizeof(net_output)))
251   {
252     net_output = NULL;
253     retval = 0;
254   }
255
256   /* Duplicate check (for processing) */
257   if(!olsr_plugin_io(GETF__OLSR_CHECK_DUP_TABLE_PROC, &check_dup_proc, sizeof(check_dup_proc)))
258   {
259     check_dup_proc = NULL;
260     retval = 0;
261   }
262
263   /* Default forward function */
264   if(!olsr_plugin_io(GETF__OLSR_FORWARD_MESSAGE, &default_fwd, sizeof(default_fwd)))
265   {
266     default_fwd = NULL;
267     retval = 0;
268   }
269
270
271   /* Add socket to OLSR select function */
272   if(!olsr_plugin_io(GETF__ADD_OLSR_SOCKET, &add_olsr_socket, sizeof(add_olsr_socket)))
273   {
274     add_olsr_socket = NULL;
275     retval = 0;
276   }
277
278   /* Neighbor link status lookup */
279   if(!olsr_plugin_io(GETF__CHECK_NEIGHBOR_LINK, &check_neighbor_link, sizeof(check_neighbor_link)))
280   {
281     check_neighbor_link = NULL;
282     retval = 0;
283   }
284
285
286   /* Apm info */
287   if(!olsr_plugin_io(GETF__APM_READ, &apm_read, sizeof(apm_read)))
288   {
289     apm_read = NULL;
290     retval = 0;
291   }
292
293   return retval;
294
295 }