2 * The olsr.org Optimized Link-State Routing daemon(olsrd)
3 * Copyright (c) 2004, Andreas Tønnesen(andreto@olsr.org)
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
10 * * Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in
14 * the documentation and/or other materials provided with the
16 * * Neither the name of olsr.org, olsrd nor the names of its
17 * contributors may be used to endorse or promote products derived
18 * from this software without specific prior written permission.
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 * POSSIBILITY OF SUCH DAMAGE.
33 * Visit http://www.olsr.org for more information.
35 * If you find this software useful feel free to make a donation
36 * to the project. For more information see the website or contact
37 * the copyright holders.
39 * $Id: plugin.c,v 1.17 2005/02/17 21:36:30 kattemat Exp $
43 #include "olsr_plugin_io.h"
48 #include "scheduler.h"
49 #include "duplicate_set.h"
52 #include "local_hna_set.h"
53 #include "socket_parser.h"
54 #include "neighbor_table.h"
56 #include "two_hop_neighbor_table.h"
60 #include "routing_table.h"
62 #include "mpr_selector_set.h"
65 olsr_plugin_io(int, void *, size_t);
69 * Multi-purpose function for plugins
70 * Syntax much the same as the ioctl(2) call
72 *@param cmd the command
73 *@param data pointer to memory to put/get data
74 *@param size size of the memory pointed to
76 *@return negative if unknown command
80 olsr_plugin_io(int cmd, void *data, size_t size)
84 olsr_printf(3, "olsr_plugin_io(%d)\n", cmd);
91 *((struct interface **)data) = ifnet;
94 *((struct timeval **)data) = &now;
96 case(GETD__PARSER_ENTRIES):
97 *((struct parse_function_entry **)data) = parse_functions;
99 case(GETD__OLSR_SOCKET_ENTRIES):
100 *((struct olsr_socket_entry **)data) = olsr_socket_entries;
102 case(GETD__NEIGHBORTABLE):
103 *((struct neighbor_entry **)data) = neighbortable;
105 case(GETD__TWO_HOP_NEIGHBORTABLE):
106 *((struct neighbor_2_entry **)data) = two_hop_neighbortable;
108 case(GETD__TC_TABLE):
109 *((struct tc_entry **)data) = tc_table;
112 *((struct hna_entry **)data) = hna_set;
114 case(GETD__OLSR_CNF):
115 *((struct olsrd_config **)data) = olsr_cnf;
117 case(GETD__ROUTINGTABLE):
118 *((struct rt_entry **)data) = routingtable;
120 case(GETD__HNA_ROUTES):
121 *((struct rt_entry **)data) = hna_routes;
124 *((struct mid_entry **)data) = mid_set;
126 case(GETD__LINK_SET):
127 *((struct link_entry **)data) = get_link_set();
130 /* Function fetching */
132 case(GETF__OLSR_PRINTF):
134 memcpy(data, &ptr, size);
136 case(GETF__OLSR_MALLOC):
138 memcpy(data, &ptr, size);
140 case(GETF__DOUBLE_TO_ME):
142 memcpy(data, &ptr, size);
144 case(GETF__ME_TO_DOUBLE):
146 memcpy(data, &ptr, size);
148 case(GETF__OLSR_REGISTER_SCHEDULER_EVENT):
149 ptr = &olsr_register_scheduler_event;
150 memcpy(data, &ptr, size);
152 case(GETF__OLSR_REMOVE_SCHEDULER_EVENT):
153 ptr = &olsr_remove_scheduler_event;
154 memcpy(data, &ptr, size);
156 case(GETF__OLSR_PARSER_ADD_FUNCTION):
157 ptr = &olsr_parser_add_function;
158 memcpy(data, &ptr, size);
160 case(GETF__OLSR_PARSER_REMOVE_FUNCTION):
161 ptr = &olsr_parser_remove_function;
162 memcpy(data, &ptr, size);
164 case(GETF__OLSR_REGISTER_TIMEOUT_FUNCTION):
165 ptr = &olsr_register_timeout_function;
166 memcpy(data, &ptr, size);
168 case(GETF__OLSR_REMOVE_TIMEOUT_FUNCTION):
169 ptr = &olsr_remove_timeout_function;
170 memcpy(data, &ptr, size);
172 case(GETF__GET_MSG_SEQNO):
173 ptr = &get_msg_seqno;
174 memcpy(data, &ptr, size);
176 case(GETF__OLSR_CHECK_DUP_TABLE_PROC):
177 ptr = &olsr_check_dup_table_proc;
178 memcpy(data, &ptr, size);
180 case(GETF__NET_OUTPUT):
182 memcpy(data, &ptr, size);
184 case(GETF__OLSR_FORWARD_MESSAGE):
185 ptr = &olsr_forward_message;
186 memcpy(data, &ptr, size);
188 case(GETF__ADD_OLSR_SOCKET):
189 ptr = &add_olsr_socket;
190 memcpy(data, &ptr, size);
192 case(GETF__REMOVE_OLSR_SOCKET):
193 ptr = &remove_olsr_socket;
194 memcpy(data, &ptr, size);
196 case(GETF__CHECK_NEIGHBOR_LINK):
197 ptr = &check_neighbor_link;
198 memcpy(data, &ptr, size);
200 case(GETF__ADD_LOCAL_HNA4_ENTRY):
201 ptr = &add_local_hna4_entry;
202 memcpy(data, &ptr, size);
204 case(GETF__REMOVE_LOCAL_HNA4_ENTRY):
205 ptr = &remove_local_hna4_entry;
206 memcpy(data, &ptr, size);
208 case(GETF__ADD_LOCAL_HNA6_ENTRY):
209 ptr = &add_local_hna6_entry;
210 memcpy(data, &ptr, size);
212 case(GETF__REMOVE_LOCAL_HNA6_ENTRY):
213 ptr = &remove_local_hna6_entry;
214 memcpy(data, &ptr, size);
216 case(GETF__OLSR_INPUT):
218 memcpy(data, &ptr, size);
222 memcpy(data, &ptr, size);
226 memcpy(data, &ptr, size);
228 case(GETF__IF_IFWITHSOCK):
229 ptr = &if_ifwithsock;
230 memcpy(data, &ptr, size);
232 case(GETF__IF_IFWITHADDR):
233 ptr = &if_ifwithaddr;
234 memcpy(data, &ptr, size);
236 case(GETF__PARSE_PACKET):
238 memcpy(data, &ptr, size);
240 case(GETF__REGISTER_PCF):
242 memcpy(data, &ptr, size);
244 case(GETF__OLSR_HASHING):
246 memcpy(data, &ptr, size);
248 case(GETF__ADD_IFCHGF):
250 memcpy(data, &ptr, size);
252 case(GETF__DEL_IFCHGF):
254 memcpy(data, &ptr, size);
256 case(GETF__APM_READ):
258 memcpy(data, &ptr, size);
260 case(GETF__NET_OUTBUFFER_PUSH):
261 ptr = &net_outbuffer_push;
262 memcpy(data, &ptr, size);
264 case(GETF__NET_RESERVE_BUFSPACE):
265 ptr = &net_reserve_bufspace;
266 memcpy(data, &ptr, size);
268 case(GETF__NET_OUTBUFFER_PUSH_RESERVED):
269 ptr = &net_outbuffer_push_reserved;
270 memcpy(data, &ptr, size);
273 case(GETF__OLSR_LOOKUP_MPRS_SET):
274 ptr = &olsr_lookup_mprs_set;
275 memcpy(data, &ptr, size);