main: do not seed the random number generator with the process id
[olsrd.git] / src / plugin_loader.h
index 8c2bde4..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"
+#ifndef OLSR_PLUGIN
 
-/*
- * declare a plugin without parameters (NoParameter)
- *
- * OLSR_PLUGIN6_NP() {
- *   .descr = "<description of the plugin",
- *   .author = "<author of the plugin",
- *   .init = <pointer_to_plugin_initialization_callback>,
- *   .....
- * };
- */
-#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 =
-
-/*
- * declare a plugin with parameters
- *
- * static const struct olsrd_plugin_parameters plugin_parameters[] = {
- *   { ...},
- * };
- *
- * OLSR_PLUGIN6(plugin_parameters) {
- *   .descr = "<description of the plugin",
- *   .author = "<author of the plugin",
- *   .init = <pointer_to_plugin_initialization_callback>,
- *   .....
- * };
- */
-#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 =
-
-/* different types of plugins must be initialized at different times during startup */
-enum plugin_type {
-  PLUGIN_TYPE_ALL = -1,
-  PLUGIN_TYPE_DEFAULT = 0,
-  PLUGIN_TYPE_LQ = 1
-};
-
-/* plugin definition functions (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);
-
-struct olsr_plugin {
-  struct avl_node p_node;
 
-  /* plugin information */
-  const char *name;
-  const char *descr;
-  const char *author;
+#if defined SUPPORT_OLD_PLUGIN_VERSIONS && SUPPORT_OLD_PLUGIN_VERSIONS
 
-  /* true if the plugin can be (de)activated during runtime */
-  bool deactivate;
+/* version 4 */
+typedef int (*register_param_func) (char *, char *);
+#endif /* defined SUPPORT_OLD_PLUGIN_VERSIONS && SUPPORT_OLD_PLUGIN_VERSIONS */
 
-  /* type of the plugin, normally 0 */
-  enum plugin_type type;
+/* version 5 */
+typedef void (*get_plugin_parameters_func) (const struct olsrd_plugin_parameters ** params, unsigned int *size);
 
-  /* plugin callbacks for (de)initialization */
-  int (*init) (void);
-  int (*enable) (void);
-  int (*disable) (void);
-  int (*exit) (void);
-
-  /*
-   * internal callback pointer for legacy plugins, will be initialized
-   * by the plugin loader
-   */
-  int (*internal_legacy_init) (void);
+struct olsr_plugin {
+  /* The handle */
+  void *dlhandle;
 
-  /* plugin interface version */
-  int internal_version;
+  struct plugin_param *params;
+  int plugin_interface_version;
 
-  /* plugin list of possible arguments */
-  const struct olsrd_plugin_parameters *internal_param;
+#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;
 
-  /* number of arguments */
-  unsigned int internal_param_cnt;
+  /* version 5 */
+  const struct olsrd_plugin_parameters *plugin_parameters;
+  unsigned int plugin_parameters_size;
 
-  /* internal olsr data */
-  void *internal_dlhandle;
-  struct plugin_param *internal_params;
-  bool internal_active;
+  struct olsr_plugin *next;
 };
 
-#define OLSR_FOR_ALL_PLUGIN_ENTRIES(plugin, iterator) avl_for_each_element_safe(&plugin_tree, plugin, p_node, iterator)
-
-struct olsr_plugin *EXPORT(olsr_get_plugin)(const char *libname);
-
-void EXPORT(olsr_hookup_plugin) (struct olsr_plugin *plugin);
-void EXPORT(olsr_unhookup_plugin) (struct olsr_plugin *plugin);
-
-void olsr_init_pluginsystem(void);
-void olsr_plugins_init(bool);
-void olsr_plugins_enable(enum plugin_type type, bool fail_fast);
-void olsr_destroy_pluginsystem(void);
-
-struct olsr_plugin *EXPORT(olsr_init_plugin)(const char *);
-int EXPORT(olsr_exit_plugin)(struct olsr_plugin *);
+void olsr_load_plugins(void);
 
-int EXPORT(olsr_enable_plugin)(struct olsr_plugin *);
-int EXPORT(olsr_disable_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: