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