main: do not seed the random number generator with the process id
[olsrd.git] / src / plugin_loader.h
index 7ae38e3..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 OLSR_PLUGIN6_NP()   static struct olsr_plugin olsr_internal_plugin_definition; \
-static void hookup_plugin_definition (void) __attribute__ ((constructor)); \
-static void hookup_plugin_definition (void) { \
-  static const char *plname = PLUGIN_FULLNAME; \
-  olsr_internal_plugin_definition.name = plname; \
-  olsr_hookup_plugin(&olsr_internal_plugin_definition); \
-} \
-static struct olsr_plugin olsr_internal_plugin_definition =
-
-#define OLSR_PLUGIN6(param) static struct olsr_plugin olsr_internal_plugin_definition; \
-static void hookup_plugin_definition (void) __attribute__ ((constructor)); \
-static void hookup_plugin_definition (void) { \
-  static const char *plname = PLUGIN_FULLNAME; \
-  olsr_internal_plugin_definition.name = plname; \
-  olsr_internal_plugin_definition.internal_param = param; \
-  olsr_internal_plugin_definition.internal_param_cnt = ARRAYSIZE(param); \
-  olsr_hookup_plugin(&olsr_internal_plugin_definition); \
-} \
-static struct olsr_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 ** internal_params, unsigned int *size);
+
+#if defined SUPPORT_OLD_PLUGIN_VERSIONS && SUPPORT_OLD_PLUGIN_VERSIONS
+
+/* version 4 */
+typedef int (*register_param_func) (char *, char *);
+#endif /* defined SUPPORT_OLD_PLUGIN_VERSIONS && SUPPORT_OLD_PLUGIN_VERSIONS */
+
+/* version 5 */
+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 */
-  const char *name;
-  const char *descr;
-  const char *author;
-  bool deactivate;    /* plugin can be deactivated */
-
-  /* function pointers */
-  bool (*pre_init) (void);
-  bool (*post_init) (void);
-  bool (*pre_cleanup) (void);
-  bool (*post_cleanup) (void);
-  int  (*internal_legacy_init) (void);
-
-  /* plugin interface version */
-  int internal_version;
-
-  /* plugin list of possible arguments */
-  const struct olsrd_plugin_parameters *internal_param;
-
-  /* number of arguments */
-  unsigned int internal_param_cnt;
-
-  /* internal olsr data */
-  void *internal_dlhandle;
-  struct plugin_param *internal_params;
-  bool internal_active;
-};
+  /* The handle */
+  void *dlhandle;
 
-AVLNODE2STRUCT(plugin_node2tree, olsr_plugin, p_node)
-#define OLSR_FOR_ALL_PLUGIN_ENTRIES(plugin) OLSR_FOR_ALL_AVL_ENTRIES(&plugin_tree, plugin_node2tree, plugin)
-#define OLSR_FOR_ALL_PLUGIN_ENTRIES_END(plugin) OLSR_FOR_ALL_AVL_ENTRIES_END()
+  struct plugin_param *params;
+  int plugin_interface_version;
 
-struct olsr_plugin *EXPORT(olsr_get_plugin)(const 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)(const 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: