346d21442eb996068e246f56d95d7e273be6a9e3
[olsrd.git] / src / plugin.c
1 /*
2  * OLSR ad-hoc routing table management protocol
3  * Copyright (C) 2004 Andreas T√łnnesen (andreto@ifi.uio.no)
4  *
5  * This file is part of the olsr.org OLSR daemon.
6  *
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.
11  *
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.
16  *
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
20  * 
21  * 
22  * $ Id $
23  *
24  */
25
26
27 #include "olsr_plugin_io.h"
28 #include <stdio.h>
29 #include "plugin.h"
30 #include "olsr.h"
31 #include "defs.h"
32 #include "parser.h"
33 #include "scheduler.h"
34 #include "duplicate_set.h"
35 #include "link_set.h"
36 #include "mantissa.h"
37 #include "local_hna_set.h"
38 #include "socket_parser.h"
39 #include "neighbor_table.h"
40 #include "two_hop_neighbor_table.h"
41 #include "tc_set.h"
42 #include "hna_set.h"
43
44 /**
45  * Multi-purpose function for plugins
46  * Syntax much the same as the ioctl(2) call 
47  *
48  *@param cmd the command
49  *@param data pointer to memory to put/get data
50  *@param size size of the memory pointed to
51  *
52  *@return negative if unknown command
53  */
54
55 int
56 olsr_plugin_io(int cmd, void *data, size_t size)
57 {
58   void *ptr;
59
60   olsr_printf(3, "olsr_plugin_io(%d)\n", cmd);
61
62   switch(cmd)
63     {
64
65       /* Data fetching */
66       /*
67     case(GETD__PACKET):
68       *((char **)data) = packet;
69       break;
70       */
71       /*
72     case(GETD__OUTPUTSIZE):
73       *((int **)data) = &outputsize;
74       break;
75       */
76     case(GETD__IFNET):
77       *((struct interface **)data) = ifnet;
78       break;
79     case(GETD__NOW):
80       *((struct timeval **)data) = &now;
81       break;
82     case(GETD__PARSER_ENTRIES):
83       *((struct parse_function_entry **)data) = parse_functions;
84       break;
85     case(GETD__OLSR_SOCKET_ENTRIES):
86       *((struct olsr_socket_entry **)data) = olsr_socket_entries;
87       break;
88       /*
89     case(GETD__MAXMESSAGESIZE):
90       *((int **)data) = &maxmessagesize;
91       break;
92       */
93     case(GETD__NEIGHBORTABLE):
94       *((struct neighbor_entry **)data) = neighbortable;
95       break;
96     case(GETD__TWO_HOP_NEIGHBORTABLE):
97       *((struct neighbor_2_entry **)data) = two_hop_neighbortable;
98       break;
99      case(GETD__TC_TABLE):
100       *((struct tc_entry **)data) = tc_table;
101       break;
102      case(GETD__HNA_SET):
103       *((struct hna_entry **)data) = hna_set;
104       break;
105
106       /* Function fetching */
107
108     case(GETF__OLSR_PRINTF):
109       ptr = &olsr_printf;
110       memcpy(data, &ptr, size);
111       break;
112     case(GETF__OLSR_MALLOC):
113       ptr = &olsr_malloc;
114       memcpy(data, &ptr, size);
115       break;
116     case(GETF__DOUBLE_TO_ME):
117       ptr = &double_to_me;
118       memcpy(data, &ptr, size);
119       break;
120     case(GETF__ME_TO_DOUBLE):
121       ptr = &me_to_double;
122       memcpy(data, &ptr, size);
123       break;
124     case(GETF__OLSR_REGISTER_SCHEDULER_EVENT):
125       ptr = &olsr_register_scheduler_event;
126       memcpy(data, &ptr, size);
127       break;
128     case(GETF__OLSR_REMOVE_SCHEDULER_EVENT):
129       ptr = &olsr_remove_scheduler_event;
130       memcpy(data, &ptr, size);
131       break;
132     case(GETF__OLSR_PARSER_ADD_FUNCTION):
133       ptr = &olsr_parser_add_function;
134       memcpy(data, &ptr, size);
135       break;
136     case(GETF__OLSR_PARSER_REMOVE_FUNCTION):
137       ptr = &olsr_parser_remove_function;
138       memcpy(data, &ptr, size);
139       break;
140     case(GETF__OLSR_REGISTER_TIMEOUT_FUNCTION):
141       ptr = &olsr_register_timeout_function;
142       memcpy(data, &ptr, size);
143       break;
144     case(GETF__OLSR_REMOVE_TIMEOUT_FUNCTION):
145       ptr = &olsr_remove_timeout_function;
146       memcpy(data, &ptr, size);
147       break;
148     case(GETF__GET_MSG_SEQNO):
149       ptr = &get_msg_seqno;
150       memcpy(data, &ptr, size);
151       break;
152     case(GETF__OLSR_CHECK_DUP_TABLE_PROC):
153       ptr = &olsr_check_dup_table_proc;
154       memcpy(data, &ptr, size);
155       break;
156     case(GETF__NET_OUTPUT):
157       ptr =  &net_output;
158       memcpy(data, &ptr, size);
159       break;
160     case(GETF__OLSR_FORWARD_MESSAGE):
161       ptr = &olsr_forward_message;
162       memcpy(data, &ptr, size);
163       break;
164     case(GETF__ADD_OLSR_SOCKET):
165       ptr = &add_olsr_socket;
166       memcpy(data, &ptr, size);
167       break;
168     case(GETF__REMOVE_OLSR_SOCKET):
169       ptr = &remove_olsr_socket;
170       memcpy(data, &ptr, size);
171       break;
172     case(GETF__CHECK_NEIGHBOR_LINK):
173       ptr = &check_neighbor_link;
174       memcpy(data, &ptr, size);
175       break;
176     case(GETF__ADD_LOCAL_HNA4_ENTRY):
177       ptr = &add_local_hna4_entry;
178       memcpy(data, &ptr, size);
179       break;
180     case(GETF__REMOVE_LOCAL_HNA4_ENTRY):
181       ptr = &remove_local_hna4_entry;
182       memcpy(data, &ptr, size);
183       break;
184     case(GETF__ADD_LOCAL_HNA6_ENTRY):
185       ptr = &add_local_hna6_entry;
186       memcpy(data, &ptr, size);
187       break;
188     case(GETF__REMOVE_LOCAL_HNA6_ENTRY):
189       ptr = &remove_local_hna6_entry;
190       memcpy(data, &ptr, size);
191       break;
192     case(GETF__OLSR_INPUT):
193       ptr = &olsr_input;
194       memcpy(data, &ptr, size);
195       break;
196     case(GETF__ADD_PTF):
197       ptr = &add_ptf;
198       memcpy(data, &ptr, size);
199       break;
200     case(GETF__DEL_PTF):
201       ptr = &del_ptf;
202       memcpy(data, &ptr, size);
203       break;
204     case(GETF__IF_IFWITHSOCK):
205       ptr = &if_ifwithsock;
206       memcpy(data, &ptr, size);
207       break;
208     case(GETF__IF_IFWITHADDR):
209       ptr = &if_ifwithaddr;
210       memcpy(data, &ptr, size);
211       break;
212     case(GETF__PARSE_PACKET):
213       ptr = &parse_packet;
214       memcpy(data, &ptr, size);
215       break;
216     case(GETF__REGISTER_PCF):
217       ptr = &register_pcf;
218       memcpy(data, &ptr, size);
219       break;
220     case(GETF__OLSR_HASHING):
221       ptr = &olsr_hashing;
222       memcpy(data, &ptr, size);
223       break;
224     case(GETF__ADD_IFCHGF):
225       ptr = &add_ifchgf;
226       memcpy(data, &ptr, size);
227       break;
228     case(GETF__DEL_IFCHGF):
229       ptr = &del_ifchgf;
230       memcpy(data, &ptr, size);
231       break;
232  
233     default:
234       return -1;
235     }
236
237   return 1;
238 }