This plugin now includes datatypes directly from olsrd source
[olsrd.git] / lib / dyn_gw / src / olsrd_plugin.c
1
2 /*
3  * The olsr.org Optimized Link-State Routing daemon(olsrd)
4  * Copyright (c) 2004, Andreas T√łnnesen(andreto@olsr.org)
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without 
8  * modification, are permitted provided that the following conditions 
9  * are met:
10  *
11  * * Redistributions of source code must retain the above copyright 
12  *   notice, this list of conditions and the following disclaimer.
13  * * Redistributions in binary form must reproduce the above copyright 
14  *   notice, this list of conditions and the following disclaimer in 
15  *   the documentation and/or other materials provided with the 
16  *   distribution.
17  * * Neither the name of olsr.org, olsrd nor the names of its 
18  *   contributors may be used to endorse or promote products derived 
19  *   from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
25  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
31  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
32  * POSSIBILITY OF SUCH DAMAGE.
33  *
34  * Visit http://www.olsr.org for more information.
35  *
36  * If you find this software useful feel free to make a donation
37  * to the project. For more information see the website or contact
38  * the copyright holders.
39  *
40  * $Id: olsrd_plugin.c,v 1.10 2004/12/01 18:16:46 kattemat Exp $
41  */
42
43 #include "olsrd_plugin.h"
44 #include <stdio.h>
45
46
47 /* Data to sent to the plugin with the register_olsr_function call 
48  * THIS STRUCT MUST MATCH ITS SIBLING IN plugin_loader.h IN OLSRD
49  */
50 struct olsr_plugin_data
51 {
52   int ipversion;
53   union olsr_ip_addr *main_addr;
54   int (*olsr_plugin_io)(int, void *, size_t);
55 };
56
57
58 /**
59  * "Private" declarations
60  */
61
62 void __attribute__ ((constructor)) 
63 my_init(void);
64
65 void __attribute__ ((destructor)) 
66 my_fini(void);
67
68 int
69 register_olsr_data(struct olsr_plugin_data *);
70
71 int
72 fetch_olsrd_data(void);
73
74
75 /*
76  * Defines the version of the plugin interface that is used
77  * THIS IS NOT THE VERSION OF YOUR PLUGIN!
78  * Do not alter unless you know what you are doing!
79  */
80 int 
81 get_plugin_interface_version()
82 {
83   return PLUGIN_INTERFACE_VERSION;
84 }
85
86
87 /**
88  *Constructor
89  */
90 void
91 my_init()
92 {
93   /* Print plugin info to stdout */
94   printf("%s\n", MOD_DESC);
95
96   return;
97 }
98
99 /**
100  *Destructor
101  */
102 void
103 my_fini()
104 {
105
106   /* Calls the destruction function
107    * olsr_plugin_exit()
108    * This function should be present in your
109    * sourcefile and all data destruction
110    * should happen there - NOT HERE!
111    */
112   olsr_plugin_exit();
113
114   return;
115 }
116
117
118
119 /**
120  *Register needed functions and pointers
121  *
122  *This function should not be changed!
123  *
124  */
125 int
126 register_olsr_data(struct olsr_plugin_data *data)
127 {
128   /* IPversion */
129   ipversion = data->ipversion;
130   /* Main address */
131   main_addr = data->main_addr;
132
133   /* Multi-purpose function */
134   olsr_plugin_io = data->olsr_plugin_io;
135
136   /* Set size of IP address */
137   if(ipversion == AF_INET)
138     {
139       ipsize = sizeof(olsr_u32_t);
140     }
141   else
142     {
143       ipsize = sizeof(struct in6_addr);
144     }
145
146   if(!fetch_olsrd_data())
147     {
148       fprintf(stderr, "Could not fetch the neccessary functions from olsrd!\n");
149       return 0;
150     }
151
152   /* Calls the initialization function
153    * olsr_plugin_init()
154    * This function should be present in your
155    * sourcefile and all data initialization
156    * should happen there - NOT HERE!
157    */
158   if(!olsr_plugin_init())
159     {
160       fprintf(stderr, "Could not initialize plugin!\n");
161       return 0;
162     }
163
164   return 1;
165
166 }
167
168
169
170 int
171 fetch_olsrd_data()
172 {
173   int retval = 1;
174
175
176   /* Olsr debug output function */
177   if(!olsr_plugin_io(GETF__OLSR_PRINTF, 
178                      &olsr_printf, 
179                      sizeof(olsr_printf)))
180   {
181     olsr_printf = NULL;
182     retval = 0;
183   }
184
185   /* Scheduler event registration */
186   if(!olsr_plugin_io(GETF__OLSR_REGISTER_SCHEDULER_EVENT, 
187                      &olsr_register_scheduler_event, 
188                      sizeof(olsr_register_scheduler_event)))
189   {
190     olsr_register_scheduler_event = NULL;
191     retval = 0;
192   }
193
194
195   /* Add hna net IPv4 */
196   if(!olsr_plugin_io(GETF__ADD_LOCAL_HNA4_ENTRY, &add_local_hna4_entry, sizeof(add_local_hna4_entry)))
197   {
198     add_local_hna4_entry = NULL;
199     retval = 0;
200   }
201
202   /* Remove hna net IPv4 */
203   if(!olsr_plugin_io(GETF__REMOVE_LOCAL_HNA4_ENTRY, &remove_local_hna4_entry, sizeof(remove_local_hna4_entry)))
204   {
205     remove_local_hna4_entry = NULL;
206     retval = 0;
207   }
208
209   return retval;
210
211 }