* replaced the bmf plugin with the most recent 1.3 from sf.net with the
[olsrd.git] / lib / bmf / src / olsrd_plugin.c
index ae6afe6..4d91a68 100644 (file)
  * OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-/* $Id: olsrd_plugin.c,v 1.1 2006/05/03 08:59:04 kattemat Exp $ */
-
-/*
- * Dynamic linked library for olsr.org olsrd
- */
+/* -------------------------------------------------------------------------
+ * File       : olsrd_plugin.c
+ * Description: Interface to the OLSRD plugin system
+ * Created    : 29 Jun 2006
+ *
+ * $Id: olsrd_plugin.c,v 1.2 2007/02/10 17:05:56 bernd67 Exp $ 
+ * ------------------------------------------------------------------------- */
 
 /* System includes */
 #include <assert.h> /* assert() */
 
 /* OLSRD includes */
 #include "olsrd_plugin.h"
+#include "defs.h" /* olsr_u8_t, olsr_cnf */
+#include "scheduler.h" /* olsr_register_scheduler_event */
 
 /* BMF includes */
 #include "Bmf.h" /* InitBmf(), CloseBmf(), RegisterBmfParameter() */
+#include "PacketHistory.h" /* InitPacketHistory() */
 
 static void __attribute__ ((constructor)) my_init(void);
 static void __attribute__ ((destructor)) my_fini(void);
 
 void olsr_plugin_exit(void);
 
-/* Plugin interface version
- * Used by main olsrd to check plugin interface version */
+/* -------------------------------------------------------------------------
+ * Function   : olsrd_plugin_interface_version
+ * Description: Plugin interface version
+ * Input      : none
+ * Output     : none
+ * Return     : BMF plugin interface version number
+ * Data Used  : none
+ * Notes      : Called by main OLSRD (olsr_load_dl) to check plugin interface
+ *              version
+ * ------------------------------------------------------------------------- */
 int olsrd_plugin_interface_version()
 {
   return OLSRD_PLUGIN_INTERFACE_VERSION;
 }
 
+/* -------------------------------------------------------------------------
+ * Function   : olsrd_plugin_init
+ * Description: Plugin initialisation
+ * Input      : none
+ * Output     : none
+ * Return     : fail (0) or success (1)
+ * Data Used  : olsr_cnf
+ * Notes      : Called by main OLSRD (init_olsr_plugin) to initialize plugin
+ * ------------------------------------------------------------------------- */
 int olsrd_plugin_init()
 {
-  return InitBmf();
+  /* Check validity */
+  if (olsr_cnf->ip_version != AF_INET)
+  {
+    fprintf(stderr, PLUGIN_NAME ": This plugin only supports IPv4!\n");
+    return 0;
+  }
+
+  /* Clear the packet history */
+  InitPacketHistory();
+
+  /* Register ifchange function */
+  add_ifchgf(&InterfaceChange);
+
+  /* Register the duplicate registration pruning process */
+  olsr_register_scheduler_event(&PrunePacketHistory, NULL, 3.0, 2.0, NULL);
+
+  return InitBmf(NULL);
 }
 
-/* destructor - called at unload */
+/* -------------------------------------------------------------------------
+ * Function   : olsr_plugin_exit
+ * Description: Plugin cleanup
+ * Input      : none
+ * Output     : none
+ * Return     : none
+ * Data Used  : none
+ * Notes      : Called by my_fini() at unload of shared object
+ * ------------------------------------------------------------------------- */
 void olsr_plugin_exit()
 {
   CloseBmf();
 }
 
-/* Register parameters from config file
- * Called for all plugin parameters */
+/* -------------------------------------------------------------------------
+ * Function   : olsrd_plugin_register_param
+ * Description: Register parameters from config file
+ * Input      : key - the parameter name
+ *              value - the parameter value
+ * Output     : none
+ * Return     : fatal error (<0), minor error (0) or success (>0)
+ * Data Used  : none
+ * Notes      : Called by main OLSR (init_olsr_plugin) for all plugin parameters
+ * ------------------------------------------------------------------------- */
 int olsrd_plugin_register_param(char* key, char* value)
 {
   assert(key != NULL && value != NULL);
@@ -78,6 +132,15 @@ int olsrd_plugin_register_param(char* key, char* value)
   return RegisterBmfParameter(key, value);
 }
  
+/* -------------------------------------------------------------------------
+ * Function   : my_init
+ * Description: Plugin constructor
+ * Input      : none
+ * Output     : none
+ * Return     : none
+ * Data Used  : none
+ * Notes      : Called at load of shared object
+ * ------------------------------------------------------------------------- */
 static void my_init()
 {
   /* Print plugin info to stdout */
@@ -86,6 +149,15 @@ static void my_init()
   return;
 }
 
+/* -------------------------------------------------------------------------
+ * Function   : my_fini
+ * Description: Plugin destructor
+ * Input      : none
+ * Output     : none
+ * Return     : none
+ * Data Used  : none
+ * Notes      : Called at unload of shared object
+ * ------------------------------------------------------------------------- */
 static void my_fini()
 {
   olsr_plugin_exit();