a4b05089c27a87ea006cbbdd9a49218c8821c386
[olsrd.git] / lib / obamp / src / olsrd_plugin.c
1
2 /*
3  * The olsr.org Optimized Link-State Routing daemon(olsrd)
4  * Copyright (c) 2004-2009, the olsr.org team - see HISTORY file
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  */
41
42
43
44 /* System includes */
45 #include <assert.h>             /* assert() */
46 #include <stddef.h>             /* NULL */
47
48 /* OLSRD includes */
49 #include "plugin.h"
50 #include "plugin_loader.h"
51 #include "plugin_util.h"
52 #include "defs.h"               /* uint8_t, olsr_cnf */
53 #include "scheduler.h"          /* olsr_start_timer() */
54 #include "olsr_cfg.h"           /* olsr_cnf() */
55 #include "olsr_memcookie.h"        /* olsr_memcookie_add() */
56
57 /* OBAMP includes */
58 #include "obamp.h"
59 #include "common/list.h"
60
61 static void __attribute__ ((constructor)) my_init(void);
62 static void __attribute__ ((destructor)) my_fini(void);
63
64 static int obamp_init(void);
65 static int obamp_enable(void);
66 static int obamp_disable(void);
67
68 static const struct olsrd_plugin_parameters plugin_parameters[] = {
69   {.name = "NonOlsrIf",.set_plugin_parameter = &AddObampSniffingIf,.data = NULL},
70 };
71
72 OLSR_PLUGIN6(plugin_parameters)
73 {
74   .descr = PLUGIN_DESCR,
75   .author = PLUGIN_AUTHOR,
76   .init = obamp_init,
77   .enable = obamp_enable,
78   .disable = obamp_disable
79 };
80
81 /**
82  * Constructor of plugin, called before parameters are initialized
83  */
84 static int
85 obamp_init(void)
86 {
87   PreInitOBAMP();
88
89   return 0;
90 }
91
92 static int
93 obamp_enable(void)
94 {
95   olsrd_plugin_init();
96
97   return false;
98 }
99
100
101
102 /**
103  * Destructor of plugin
104  */
105 static int
106 obamp_disable(void)
107 {
108   return 0;
109 }
110
111
112 void olsr_plugin_exit(void);
113
114 /* -------------------------------------------------------------------------
115  * Function   : olsrd_plugin_interface_version
116  * Description: Plugin interface version
117  * Input      : none
118  * Output     : none
119  * Return     : OBAMP plugin interface version number
120  * Data Used  : none
121  * Notes      : Called by main OLSRD (olsr_load_dl) to check plugin interface
122  *              version
123  * ------------------------------------------------------------------------- */
124 int
125 olsrd_plugin_interface_version(void)
126 {
127   return PLUGIN_INTERFACE_VERSION;
128
129 }
130
131 /* -------------------------------------------------------------------------
132  * Function   : olsrd_plugin_init
133  * Description: Plugin initialisation
134  * Input      : none
135  * Output     : none
136  * Return     : fail (0) or success (1)
137  * Data Used  : olsr_cnf
138  * Notes      : Called by main OLSRD (init_olsr_plugin) to initialize plugin
139  * ------------------------------------------------------------------------- */
140 int
141 olsrd_plugin_init(void)
142 {
143   return InitOBAMP();
144 }
145
146 /* -------------------------------------------------------------------------
147  * Function   : olsr_plugin_exit
148  * Description: Plugin cleanup
149  * Input      : none
150  * Output     : none
151  * Return     : none
152  * Data Used  : none
153  * Notes      : Called by my_fini() at unload of shared object
154  * ------------------------------------------------------------------------- */
155 void
156 olsr_plugin_exit(void)
157 {
158   CloseOBAMP();
159 }
160
161
162
163 /* -------------------------------------------------------------------------
164  * Function   : olsrd_get_plugin_parameters
165  * Description: Return the parameter table and its size
166  * Input      : none
167  * Output     : params - the parameter table
168  *              size - its size in no. of entries
169  * Return     : none
170  * Data Used  : plugin_parameters
171  * Notes      : Called by main OLSR (init_olsr_plugin) for all plugins
172  * ------------------------------------------------------------------------- */
173 void
174 olsrd_get_plugin_parameters(const struct olsrd_plugin_parameters **params, int *size)
175 {
176   *params = plugin_parameters;
177   *size = ARRAYSIZE(plugin_parameters);
178 }
179
180 /* -------------------------------------------------------------------------
181  * Function   : my_init
182  * Description: Plugin constructor
183  * Input      : none
184  * Output     : none
185  * Return     : none
186  * Data Used  : none
187  * Notes      : Called at load of shared object
188  * ------------------------------------------------------------------------- */
189 static void
190 my_init(void)
191 {
192   /* Print plugin info to stdout */
193   printf("%s\n", MOD_DESC);
194
195   return;
196 }
197
198 /* -------------------------------------------------------------------------
199  * Function   : my_fini
200  * Description: Plugin destructor
201  * Input      : none
202  * Output     : none
203  * Return     : none
204  * Data Used  : none
205  * Notes      : Called at unload of shared object
206  * ------------------------------------------------------------------------- */
207 static void
208 my_fini(void)
209 {
210   olsr_plugin_exit();
211 }
212
213
214
215 /*
216  * Local Variables:
217  * c-basic-offset: 2
218  * indent-tabs-mode: nil
219  * End:
220  */