Update plugin loader infrastructure to sane callbacks
authorHenning Rogge <hrogge@googlemail.com>
Fri, 24 Jul 2009 09:22:35 +0000 (11:22 +0200)
committerHenning Rogge <hrogge@googlemail.com>
Fri, 24 Jul 2009 09:22:35 +0000 (11:22 +0200)
lib/lq_etx_ff/src/lq_plugin_etx_ff.c
lib/lq_etx_float/src/lq_plugin_etx_float.c
lib/lq_etx_fpm/src/lq_plugin_etx_fpm.c
lib/lq_rfc/src/lq_plugin_rfc.c
lib/txtinfo/src/olsrd_txtinfo.c
src/plugin_loader.c
src/plugin_loader.h

index aeeb899..c6bbd8e 100644 (file)
@@ -60,7 +60,7 @@
 
 #define LQ_PLUGIN_RELEVANT_COSTCHANGE_FF 16
 
-static int lq_etxff_post_init(void);
+static bool lq_etxff_post_init(void);
 
 static void lq_etxff_initialize(void);
 static void lq_etxff_deinitialize(void);
@@ -140,9 +140,9 @@ struct lq_handler lq_etxff_handler = {
   4,4
 };
 
-static int lq_etxff_post_init(void) {
+static bool lq_etxff_post_init(void) {
   active_lq_handler = &lq_etxff_handler;
-  return 0;
+  return false;
 }
 
 static void
index a8c0e02..2feddad 100644 (file)
@@ -57,7 +57,7 @@
 #define LQ_QUICKSTART_STEPS        12
 
 static int set_plugin_float(const char *, void *, set_plugin_parameter_addon);
-static int lq_etxfloat_post_init(void);
+static bool lq_etxfloat_post_init(void);
 
 static olsr_linkcost lq_etxfloat_calc_link_entry_cost(struct link_entry *);
 static olsr_linkcost lq_etxfloat_calc_lq_hello_neighbor_cost(struct lq_hello_neighbor *);
@@ -148,9 +148,9 @@ set_plugin_float(const char *value, void *data, set_plugin_parameter_addon addon
   return 0;
 }
 
-static int lq_etxfloat_post_init(void) {
+static bool lq_etxfloat_post_init(void) {
   active_lq_handler = &lq_etxfloat_handler;
-  return 0;
+  return false;
 }
 
 static olsr_linkcost
index 3d90c78..714edc5 100644 (file)
@@ -57,7 +57,7 @@
 #define LQ_FPM_QUICKSTART_AGING    16384       /* 65536 * 0.25 */
 #define LQ_QUICKSTART_STEPS        12
 
-static int lq_etxfpm_post_init(void);
+static bool lq_etxfpm_post_init(void);
 static int set_plugin_aging(const char *, void *, set_plugin_parameter_addon);
 
 static olsr_linkcost lq_etxfpm_calc_link_entry_cost(struct link_entry *);
@@ -140,9 +140,9 @@ static const struct olsrd_plugin_parameters plugin_parameters[] = {
 
 DEFINE_PLUGIN6(PLUGIN_DESCR, PLUGIN_AUTHOR, NULL, lq_etxfpm_post_init, NULL, NULL, false, plugin_parameters)
 
-static int lq_etxfpm_post_init(void) {
+static bool lq_etxfpm_post_init(void) {
   active_lq_handler = &lq_etxfpm_handler;
-  return 0;
+  return false;
 }
 
 static int
index f2e4c9d..48c530b 100644 (file)
@@ -58,7 +58,7 @@
 
 #define LQ_PLUGIN_LC_MULTIPLIER 1024
 
-static int lq_rfc_post_init(void);
+static bool lq_rfc_post_init(void);
 static int set_plugin_float(const char *, void *, set_plugin_parameter_addon);
 
 static olsr_linkcost lq_rfc_calc_link_entry_cost(struct link_entry *);
@@ -144,9 +144,9 @@ static const struct olsrd_plugin_parameters plugin_parameters[] = {
 
 DEFINE_PLUGIN6(PLUGIN_DESCR, PLUGIN_AUTHOR, NULL, lq_rfc_post_init, NULL, NULL, false, plugin_parameters)
 
-static int lq_rfc_post_init(void) {
+static bool lq_rfc_post_init(void) {
   active_lq_handler = &lq_rfc_handler;
-  return 0;
+  return false;
 }
 
 static int
index aa69023..96fee36 100644 (file)
@@ -68,9 +68,9 @@ struct debuginfo_cmd {
   struct olsr_txtcommand *normal, *csv;
 };
 
-static int txtinfo_pre_init(void);
-int txtinfo_post_init(void);
-static int txtinfo_pre_cleanup(void);
+static bool txtinfo_pre_init(void);
+static bool txtinfo_post_init(void);
+static bool txtinfo_pre_cleanup(void);
 
 static enum olsr_txtcommand_result txtinfo_neigh(struct comport_connection *con, char *cmd, char *param);
 static enum olsr_txtcommand_result txtinfo_link(struct comport_connection *con,  char *cmd, char *param);
@@ -106,7 +106,7 @@ static struct debuginfo_cmd commands[] = {
 /**
  * Constructor of plugin, called before parameters are initialized
  */
-static int
+static bool
 txtinfo_pre_init(void)
 {
   ip_acl_init(&allowed_nets);
@@ -121,13 +121,13 @@ txtinfo_pre_init(void)
     ip_acl_add(&allowed_nets, (const union olsr_ip_addr *)&in6addr_loopback, 128, false);
     ip_acl_add(&allowed_nets, (const union olsr_ip_addr *)&in6addr_v4mapped_loopback, 128, false);
   }
-  return 0;
+  return false;
 }
 
 /**
  * Destructor of plugin
  */
-static int
+static bool
 txtinfo_pre_cleanup(void)
 {
   size_t i;
@@ -137,13 +137,13 @@ txtinfo_pre_cleanup(void)
     olsr_com_remove_csv_txtcommand(commands[i].csv);
   }
   ip_acl_flush(&allowed_nets);
-  return 0;
+  return false;
 }
 
 /*
  * Initialization of plugin AFTER parameters have been read
  */
-int
+static bool
 txtinfo_post_init(void)
 {
   size_t i;
@@ -154,7 +154,7 @@ txtinfo_post_init(void)
     commands[i].normal->acl = &allowed_nets;
     commands[i].csv->acl = &allowed_nets;
   }
-  return 0;
+  return false;
 }
 
 /**
index 1562f91..d847304 100644 (file)
@@ -204,7 +204,7 @@ olsr_load_legacy_plugin(char *libname, void *dlhandle) {
   plugin = (struct olsr_plugin *)olsr_cookie_malloc(plugin_mem_cookie);
   plugin->p_name = strdup(libname);
   plugin->p_version = plugin_interface_version;
-  plugin->p_post_init = init_plugin;
+  plugin->p_legacy_init = init_plugin;
 
   plugin->p_node.key = plugin->p_name;
   plugin->dlhandle = dlhandle;
@@ -337,12 +337,19 @@ bool olsr_activate_plugin(struct olsr_plugin *plugin) {
   }
 
   if (plugin->p_post_init != NULL) {
-    if (plugin->p_post_init() != (plugin->p_version == 5 ? 1 : 0)) {
+    if (plugin->p_post_init()) {
       OLSR_WARN(LOG_PLUGINS, "Error, post init failed for plugin %s\n", plugin->p_name);
       return true;
     }
     OLSR_DEBUG(LOG_PLUGINS, "Post initialization of plugin %s successful\n", plugin->p_name);
   }
+  if (plugin->p_legacy_init != NULL) {
+    if (plugin->p_legacy_init() != 1) {
+      OLSR_WARN(LOG_PLUGINS, "Error, legacy init failed for plugin %s\n", plugin->p_name);
+      return true;
+    }
+    OLSR_DEBUG(LOG_PLUGINS, "Post initialization of plugin %s successful\n", plugin->p_name);
+  }
   plugin->active = true;
 
   if (plugin->p_author != NULL && plugin->p_descr != NULL) {
index c51f443..506c039 100644 (file)
@@ -52,7 +52,7 @@
 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) \
+  .p_legacy_init = NULL, .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) { \
@@ -85,10 +85,11 @@ struct olsr_plugin {
   bool p_deactivate;    /* plugin can be deactivated */
 
   /* function pointers */
-  int (*p_pre_init) (void);
-  int (*p_post_init) (void);
-  int (*p_pre_cleanup) (void);
-  void (*p_post_cleanup) (void);
+  bool (*p_pre_init) (void);
+  bool (*p_post_init) (void);
+  bool (*p_pre_cleanup) (void);
+  bool (*p_post_cleanup) (void);
+  int  (*p_legacy_init) (void);
 
   /* plugin interface version */
   int p_version;