main: do not seed the random number generator with the process id
[olsrd.git] / src / plugin_loader.h
index c51f443..95db105 100644 (file)
@@ -1,7 +1,7 @@
 
 /*
  * The olsr.org Optimized Link-State Routing daemon(olsrd)
- * Copyright (c) 2004-2009, the olsr.org team - see HISTORY file
+ * Copyright (c) 2004, Andreas Tonnesen(andreto@olsr.org)
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
 #ifndef _OLSR_PLUGIN_LOADER
 #define _OLSR_PLUGIN_LOADER
 
-#include "plugin.h"
+#include "olsrd_plugin.h"
 #include "olsr_types.h"
+#include "olsr_cfg.h"
 
-#include "common/avl.h"
-#include "common/list.h"
-
-#define DEFINE_PLUGIN6(descr, author, pre_init, post_init, pre_cleanup, post_cleanup, deactivate, parameter) \
-static struct olsr_plugin olsr_internal_plugin_definition = { \
-  .p_name = (char*) PLUGIN_FULLNAME , .p_descr = (char*)descr, .p_author = (char*)author, \
-  .p_pre_init = pre_init, .p_post_init = post_init, .p_pre_cleanup = pre_cleanup, .p_post_cleanup = post_cleanup, \
-  .p_deactivate = deactivate, .p_version = 6, .p_param = parameter, .p_param_cnt = ARRAYSIZE(parameter) \
-}; \
-static void hookup_plugin_definition (void) __attribute__ ((constructor)); \
-static void hookup_plugin_definition (void) { \
-  olsr_hookup_plugin(&olsr_internal_plugin_definition); \
-}
-
-#define DEFINE_PLUGIN6_NP(descr, author, pre_init, post_init, pre_cleanup, post_cleanup, deactivate) \
-static struct olsr_plugin olsr_internal_plugin_definition = { \
-  .p_name = (char*) PLUGIN_FULLNAME , .p_descr = (char*)descr, .p_author = (char*)author, \
-  .p_pre_init = pre_init, .p_post_init = post_init, .p_pre_cleanup = pre_cleanup, .p_post_cleanup = post_cleanup, \
-  .p_deactivate = deactivate, .p_version = 6, .p_param = NULL, .p_param_cnt = 0 \
-}; \
-static void hookup_plugin_definition (void) __attribute__ ((constructor)); \
-static void hookup_plugin_definition (void) { \
-  olsr_hookup_plugin(&olsr_internal_plugin_definition); \
-}
+#ifndef OLSR_PLUGIN
 
-/* version 5 */
+/* all */
 typedef int (*plugin_init_func) (void);
 typedef int (*get_interface_version_func) (void);
-typedef void (*get_plugin_parameters_func) (const struct olsrd_plugin_parameters ** params, unsigned int *size);
-
-struct olsr_plugin {
-  struct avl_node p_node;
 
-  /* plugin information */
-  char *p_name;
-  char *p_descr;
-  char *p_author;
-  bool p_deactivate;    /* plugin can be deactivated */
+#if defined SUPPORT_OLD_PLUGIN_VERSIONS && SUPPORT_OLD_PLUGIN_VERSIONS
 
-  /* function pointers */
-  int (*p_pre_init) (void);
-  int (*p_post_init) (void);
-  int (*p_pre_cleanup) (void);
-  void (*p_post_cleanup) (void);
+/* version 4 */
+typedef int (*register_param_func) (char *, char *);
+#endif /* defined SUPPORT_OLD_PLUGIN_VERSIONS && SUPPORT_OLD_PLUGIN_VERSIONS */
 
-  /* plugin interface version */
-  int p_version;
-
-  /* plugin list of possible arguments */
-  const struct olsrd_plugin_parameters *p_param;
-
-  /* number of arguments */
-  unsigned int p_param_cnt;
+/* version 5 */
+typedef void (*get_plugin_parameters_func) (const struct olsrd_plugin_parameters ** params, unsigned int *size);
 
-  /* internal olsr data */
+struct olsr_plugin {
+  /* The handle */
   void *dlhandle;
-  struct plugin_param *params;
-  bool active;
-};
 
-AVLNODE2STRUCT(plugin_node2tree, struct olsr_plugin, p_node)
-
-#define OLSR_FOR_ALL_PLUGIN_ENTRIES(plugin) \
-{ \
-  struct avl_node *plugin_node, *next_plugin_node; \
-  for (plugin_node = avl_walk_first(&plugin_tree); \
-    plugin_node; plugin_node = next_plugin_node) { \
-    next_plugin_node = avl_walk_next(plugin_node); \
-    plugin = plugin_node2tree(plugin_node);
-#define OLSR_FOR_ALL_PLUGIN_ENTRIES_END(plugin) }}
+  struct plugin_param *params;
+  int plugin_interface_version;
 
-struct olsr_plugin *EXPORT(olsr_get_plugin)(char *libname);
+#if defined SUPPORT_OLD_PLUGIN_VERSIONS && SUPPORT_OLD_PLUGIN_VERSIONS
+  /* version 4 */
+  register_param_func register_param;
+#endif /* defined SUPPORT_OLD_PLUGIN_VERSIONS && SUPPORT_OLD_PLUGIN_VERSIONS */
+  plugin_init_func plugin_init;
 
-void EXPORT(olsr_hookup_plugin) (struct olsr_plugin *plugin);
-void EXPORT(olsr_unhookup_plugin) (struct olsr_plugin *plugin);
+  /* version 5 */
+  const struct olsrd_plugin_parameters *plugin_parameters;
+  unsigned int plugin_parameters_size;
 
-void EXPORT(olsr_init_pluginsystem)(bool);
-void EXPORT(olsr_destroy_pluginsystem)(void);
+  struct olsr_plugin *next;
+};
 
-struct olsr_plugin *EXPORT(olsr_load_plugin)(char *);
-bool EXPORT(olsr_unload_plugin)(struct olsr_plugin *);
+void olsr_load_plugins(void);
 
-bool EXPORT(olsr_activate_plugin)(struct olsr_plugin *);
-bool EXPORT(olsr_deactivate_plugin)(struct olsr_plugin *);
+void olsr_close_plugins(void);
 
-extern struct avl_tree EXPORT(plugin_tree);
+int olsr_plugin_io(int, void *, size_t);
 
-#endif
+#endif /* OLSR_PLUGIN */
+#endif /* _OLSR_PLUGIN_LOADER */
 
 /*
  * Local Variables: