3e2141ab2a0f0a68e77f3c923f5c97ae3269187c
[olsrd.git] / src / plugin_loader.h
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 #ifndef _OLSR_PLUGIN_LOADER
24 #define _OLSR_PLUGIN_LOADER
25
26 #include <dlfcn.h>
27 #include <stdio.h>
28 #include "olsr_protocol.h"
29
30 #define MAX_LIBS 10
31
32 #define PLUGIN_INTERFACE_VERSION 1
33
34 /* Data to sent to the plugin with the register_olsr_function call */
35 struct olsr_plugin_data
36 {
37   int ipversion;
38   union olsr_ip_addr *main_addr;
39   int (*olsr_plugin_io)(int, void *, size_t);
40 };
41
42
43 struct olsr_plugin
44 {
45   /* The handle */
46   void *dlhandle;
47
48   int (*register_olsr_data)(struct olsr_plugin_data *);
49
50   /* Multi - purpose function */
51   int (*plugin_io)(int, void *, size_t);
52
53   struct olsr_plugin *next;
54 };
55
56
57 struct olsr_plugin *olsr_plugins;
58
59
60 struct plugin_to_load
61 {
62   char name[FILENAME_MAX];
63   struct plugin_to_load *next;
64 };
65
66 struct plugin_to_load *plugins_to_load;
67
68 void
69 olsr_init_plugin_loader();
70
71 void
72 olsr_add_plugin(char *);
73
74 int
75 olsr_load_plugins();
76
77 void
78 init_olsr_plugin(struct olsr_plugin *);
79
80 int
81 olsr_load_dl(char *);
82
83 void
84 olsr_close_plugins();
85
86 #endif