2 * OLSR ad-hoc routing table management protocol
3 * Copyright (C) 2004 Andreas Tønnesen (andreto@ifi.uio.no)
5 * This file is part of the olsr.org OLSR daemon.
7 * olsr.org is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * olsr.org is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with olsr.org; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 * $Id: plugin.c,v 1.11 2004/11/15 12:31:58 kattemat Exp $
27 #include "olsr_plugin_io.h"
33 #include "scheduler.h"
34 #include "duplicate_set.h"
37 #include "local_hna_set.h"
38 #include "socket_parser.h"
39 #include "neighbor_table.h"
40 #include "two_hop_neighbor_table.h"
44 #include "routing_table.h"
48 * Multi-purpose function for plugins
49 * Syntax much the same as the ioctl(2) call
51 *@param cmd the command
52 *@param data pointer to memory to put/get data
53 *@param size size of the memory pointed to
55 *@return negative if unknown command
59 olsr_plugin_io(int cmd, void *data, size_t size)
63 olsr_printf(3, "olsr_plugin_io(%d)\n", cmd);
70 *((struct interface **)data) = ifnet;
73 *((struct timeval **)data) = &now;
75 case(GETD__PARSER_ENTRIES):
76 *((struct parse_function_entry **)data) = parse_functions;
78 case(GETD__OLSR_SOCKET_ENTRIES):
79 *((struct olsr_socket_entry **)data) = olsr_socket_entries;
81 case(GETD__NEIGHBORTABLE):
82 *((struct neighbor_entry **)data) = neighbortable;
84 case(GETD__TWO_HOP_NEIGHBORTABLE):
85 *((struct neighbor_2_entry **)data) = two_hop_neighbortable;
88 *((struct tc_entry **)data) = tc_table;
91 *((struct hna_entry **)data) = hna_set;
94 *((struct olsrd_config **)data) = olsr_cnf;
96 case(GETD__ROUTINGTABLE):
97 *((struct rt_entry **)data) = routingtable;
99 case(GETD__HNA_ROUTES):
100 *((struct rt_entry **)data) = hna_routes;
103 *((struct mid_entry **)data) = mid_set;
106 /* Function fetching */
108 case(GETF__OLSR_PRINTF):
110 memcpy(data, &ptr, size);
112 case(GETF__OLSR_MALLOC):
114 memcpy(data, &ptr, size);
116 case(GETF__DOUBLE_TO_ME):
118 memcpy(data, &ptr, size);
120 case(GETF__ME_TO_DOUBLE):
122 memcpy(data, &ptr, size);
124 case(GETF__OLSR_REGISTER_SCHEDULER_EVENT):
125 ptr = &olsr_register_scheduler_event;
126 memcpy(data, &ptr, size);
128 case(GETF__OLSR_REMOVE_SCHEDULER_EVENT):
129 ptr = &olsr_remove_scheduler_event;
130 memcpy(data, &ptr, size);
132 case(GETF__OLSR_PARSER_ADD_FUNCTION):
133 ptr = &olsr_parser_add_function;
134 memcpy(data, &ptr, size);
136 case(GETF__OLSR_PARSER_REMOVE_FUNCTION):
137 ptr = &olsr_parser_remove_function;
138 memcpy(data, &ptr, size);
140 case(GETF__OLSR_REGISTER_TIMEOUT_FUNCTION):
141 ptr = &olsr_register_timeout_function;
142 memcpy(data, &ptr, size);
144 case(GETF__OLSR_REMOVE_TIMEOUT_FUNCTION):
145 ptr = &olsr_remove_timeout_function;
146 memcpy(data, &ptr, size);
148 case(GETF__GET_MSG_SEQNO):
149 ptr = &get_msg_seqno;
150 memcpy(data, &ptr, size);
152 case(GETF__OLSR_CHECK_DUP_TABLE_PROC):
153 ptr = &olsr_check_dup_table_proc;
154 memcpy(data, &ptr, size);
156 case(GETF__NET_OUTPUT):
158 memcpy(data, &ptr, size);
160 case(GETF__OLSR_FORWARD_MESSAGE):
161 ptr = &olsr_forward_message;
162 memcpy(data, &ptr, size);
164 case(GETF__ADD_OLSR_SOCKET):
165 ptr = &add_olsr_socket;
166 memcpy(data, &ptr, size);
168 case(GETF__REMOVE_OLSR_SOCKET):
169 ptr = &remove_olsr_socket;
170 memcpy(data, &ptr, size);
172 case(GETF__CHECK_NEIGHBOR_LINK):
173 ptr = &check_neighbor_link;
174 memcpy(data, &ptr, size);
176 case(GETF__ADD_LOCAL_HNA4_ENTRY):
177 ptr = &add_local_hna4_entry;
178 memcpy(data, &ptr, size);
180 case(GETF__REMOVE_LOCAL_HNA4_ENTRY):
181 ptr = &remove_local_hna4_entry;
182 memcpy(data, &ptr, size);
184 case(GETF__ADD_LOCAL_HNA6_ENTRY):
185 ptr = &add_local_hna6_entry;
186 memcpy(data, &ptr, size);
188 case(GETF__REMOVE_LOCAL_HNA6_ENTRY):
189 ptr = &remove_local_hna6_entry;
190 memcpy(data, &ptr, size);
192 case(GETF__OLSR_INPUT):
194 memcpy(data, &ptr, size);
198 memcpy(data, &ptr, size);
202 memcpy(data, &ptr, size);
204 case(GETF__IF_IFWITHSOCK):
205 ptr = &if_ifwithsock;
206 memcpy(data, &ptr, size);
208 case(GETF__IF_IFWITHADDR):
209 ptr = &if_ifwithaddr;
210 memcpy(data, &ptr, size);
212 case(GETF__PARSE_PACKET):
214 memcpy(data, &ptr, size);
216 case(GETF__REGISTER_PCF):
218 memcpy(data, &ptr, size);
220 case(GETF__OLSR_HASHING):
222 memcpy(data, &ptr, size);
224 case(GETF__ADD_IFCHGF):
226 memcpy(data, &ptr, size);
228 case(GETF__DEL_IFCHGF):
230 memcpy(data, &ptr, size);
232 case(GETF__APM_READ):
234 memcpy(data, &ptr, size);
236 case(GETF__NET_OUTBUFFER_PUSH):
237 ptr = &net_outbuffer_push;
238 memcpy(data, &ptr, size);