Replaced unik-olsrd with olsr.org
[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 olsr.org.
6  *
7  * UniK olsrd 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  * UniK olsrd 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     case(GETD__PACKET):
64       *((char **)data) = packet;
65       break;
66     case(GETD__OUTPUTSIZE):
67       *((int **)data) = &outputsize;
68       break;
69     case(GETD__IFNET):
70       *((struct interface **)data) = ifnet;
71       break;
72     case(GETD__NOW):
73       *((struct timeval **)data) = &now;
74       break;
75     case(GETD__PARSER_ENTRIES):
76       *((struct parse_function_entry **)data) = parse_functions;
77       break;
78     case(GETD__OLSR_SOCKET_ENTRIES):
79       *((struct olsr_socket_entry **)data) = olsr_socket_entries;
80       break;
81     case(GETD__MAXMESSAGESIZE):
82       *((int **)data) = &maxmessagesize;
83       break;
84     case(GETD__NEIGHBORTABLE):
85       *((struct neighbor_entry **)data) = neighbortable;
86       break;
87     case(GETD__TWO_HOP_NEIGHBORTABLE):
88       *((struct neighbor_2_entry **)data) = two_hop_neighbortable;
89       break;
90      case(GETD__TC_TABLE):
91       *((struct tc_entry **)data) = tc_table;
92       break;
93      case(GETD__HNA_SET):
94       *((struct hna_entry **)data) = hna_set;
95       break;
96
97       /* Function fetching */
98
99     case(GETF__OLSR_PRINTF):
100       ptr = &olsr_printf;
101       memcpy(data, &ptr, size);
102       break;
103     case(GETF__OLSR_MALLOC):
104       ptr = &olsr_malloc;
105       memcpy(data, &ptr, size);
106       break;
107     case(GETF__DOUBLE_TO_ME):
108       ptr = &double_to_me;
109       memcpy(data, &ptr, size);
110       break;
111     case(GETF__ME_TO_DOUBLE):
112       ptr = &me_to_double;
113       memcpy(data, &ptr, size);
114       break;
115     case(GETF__OLSR_REGISTER_SCHEDULER_EVENT):
116       ptr = &olsr_register_scheduler_event;
117       memcpy(data, &ptr, size);
118       break;
119     case(GETF__OLSR_REMOVE_SCHEDULER_EVENT):
120       ptr = &olsr_remove_scheduler_event;
121       memcpy(data, &ptr, size);
122       break;
123     case(GETF__OLSR_PARSER_ADD_FUNCTION):
124       ptr = &olsr_parser_add_function;
125       memcpy(data, &ptr, size);
126       break;
127     case(GETF__OLSR_PARSER_REMOVE_FUNCTION):
128       ptr = &olsr_parser_remove_function;
129       memcpy(data, &ptr, size);
130       break;
131     case(GETF__OLSR_REGISTER_TIMEOUT_FUNCTION):
132       ptr = &olsr_register_timeout_function;
133       memcpy(data, &ptr, size);
134       break;
135     case(GETF__OLSR_REMOVE_TIMEOUT_FUNCTION):
136       ptr = &olsr_remove_timeout_function;
137       memcpy(data, &ptr, size);
138       break;
139     case(GETF__GET_MSG_SEQNO):
140       ptr = &get_msg_seqno;
141       memcpy(data, &ptr, size);
142       break;
143     case(GETF__OLSR_CHECK_DUP_TABLE_PROC):
144       ptr = &olsr_check_dup_table_proc;
145       memcpy(data, &ptr, size);
146       break;
147     case(GETF__NET_OUTPUT):
148       ptr =  &net_output;
149       memcpy(data, &ptr, size);
150       break;
151     case(GETF__OLSR_FORWARD_MESSAGE):
152       ptr = &olsr_forward_message;
153       memcpy(data, &ptr, size);
154       break;
155     case(GETF__ADD_OLSR_SOCKET):
156       ptr = &add_olsr_socket;
157       memcpy(data, &ptr, size);
158       break;
159     case(GETF__REMOVE_OLSR_SOCKET):
160       ptr = &remove_olsr_socket;
161       memcpy(data, &ptr, size);
162       break;
163     case(GETF__CHECK_NEIGHBOR_LINK):
164       ptr = &check_neighbor_link;
165       memcpy(data, &ptr, size);
166       break;
167     case(GETF__ADD_LOCAL_HNA4_ENTRY):
168       ptr = &add_local_hna4_entry;
169       memcpy(data, &ptr, size);
170       break;
171     case(GETF__REMOVE_LOCAL_HNA4_ENTRY):
172       ptr = &remove_local_hna4_entry;
173       memcpy(data, &ptr, size);
174       break;
175     case(GETF__ADD_LOCAL_HNA6_ENTRY):
176       ptr = &add_local_hna6_entry;
177       memcpy(data, &ptr, size);
178       break;
179     case(GETF__REMOVE_LOCAL_HNA6_ENTRY):
180       ptr = &remove_local_hna6_entry;
181       memcpy(data, &ptr, size);
182       break;
183     case(GETF__OLSR_INPUT):
184       ptr = &olsr_input;
185       memcpy(data, &ptr, size);
186       break;
187     case(GETF__ADD_PTF):
188       ptr = &add_ptf;
189       memcpy(data, &ptr, size);
190       break;
191     case(GETF__DEL_PTF):
192       ptr = &del_ptf;
193       memcpy(data, &ptr, size);
194       break;
195     case(GETF__IF_IFWITHSOCK):
196       ptr = &if_ifwithsock;
197       memcpy(data, &ptr, size);
198       break;
199     case(GETF__IF_IFWITHADDR):
200       ptr = &if_ifwithaddr;
201       memcpy(data, &ptr, size);
202       break;
203     case(GETF__PARSE_PACKET):
204       ptr = &parse_packet;
205       memcpy(data, &ptr, size);
206       break;
207     case(GETF__REGISTER_PCF):
208       ptr = &register_pcf;
209       memcpy(data, &ptr, size);
210       break;
211     case(GETF__OLSR_HASHING):
212       ptr = &olsr_hashing;
213       memcpy(data, &ptr, size);
214       break;
215     case(GETF__ADD_IFCHGF):
216       ptr = &add_ifchgf;
217       memcpy(data, &ptr, size);
218       break;
219     case(GETF__DEL_IFCHGF):
220       ptr = &del_ifchgf;
221       memcpy(data, &ptr, size);
222       break;
223  
224     default:
225       return -1;
226     }
227
228   return 1;
229 }