* converted to interface version 5 and simplified a little bit
authorBernd Petrovitsch <bernd@firmix.at>
Thu, 30 Aug 2007 22:49:13 +0000 (22:49 +0000)
committerBernd Petrovitsch <bernd@firmix.at>
Thu, 30 Aug 2007 22:49:13 +0000 (22:49 +0000)
lib/pgraph/src/olsrd_pgraph.c
lib/pgraph/src/olsrd_pgraph.h
lib/pgraph/src/olsrd_plugin.c [deleted file]
lib/pgraph/version-script.txt

index db28cd0..e3dbead 100755 (executable)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsrd_pgraph.c,v 1.6 2007/08/02 14:38:34 bernd67 Exp $
+ * $Id: olsrd_pgraph.c,v 1.7 2007/08/30 22:49:12 bernd67 Exp $
  */
 
 /*
@@ -46,6 +46,8 @@
 
 #include "olsrd_pgraph.h"
 #include "socket_parser.h"
+#include "olsrd_plugin.h"
+#include "plugin_util.h"
 
 #include <stdio.h>
 #include <string.h>
 #define close(x) closesocket(x)
 #endif
 
+#define PLUGIN_NAME    "OLSRD pgraph plugin"
+#define PLUGIN_VERSION "0.1"
+#define PLUGIN_AUTHOR   "Richard Gopaul"
+#define MOD_DESC PLUGIN_NAME " " PLUGIN_VERSION " by " PLUGIN_AUTHOR
+#define PLUGIN_INTERFACE_VERSION 5
+
+static union olsr_ip_addr ipc_accept_ip;
+static int ipc_port;
+
 static int ipc_socket;
-static int ipc_open;
 static int ipc_connection;
-static int ipc_socket_up;
 
-static void
-ipc_print_neigh_link(struct neighbor_entry *neighbor);
+void my_init(void) __attribute__((constructor));
 
-static void
-ipc_print_tc_link(struct tc_entry *entry, struct topo_dst *dst_entry);
+void my_fini(void) __attribute__((destructor));
+
+/*
+ * Defines the version of the plugin interface that is used
+ * THIS IS NOT THE VERSION OF YOUR PLUGIN!
+ * Do not alter unless you know what you are doing!
+ */
+int 
+olsrd_plugin_interface_version(void)
+{
+   return PLUGIN_INTERFACE_VERSION;
+}
+
+
+/**
+ *Constructor
+ */
+void
+my_init(void)
+{
+  /* Print plugin info to stdout */
+  printf("%s\n", MOD_DESC);
+
+  /* defaults for parameters */
+  ipc_port = 2004;
+  if (olsr_cnf->ip_version == AF_INET) {
+    ipc_accept_ip.v4 = htonl(INADDR_LOOPBACK);
+  } else {
+    ipc_accept_ip.v6 = in6addr_loopback;
+  }
+  ipc_socket = -1;
+  ipc_connection = -1;
+}
+
+/**
+ *Destructor
+ */
+void
+my_fini(void)
+{
+  if(ipc_socket >= 0) {
+    close(ipc_socket);
+    ipc_socket = -1;
+  }
+  if(ipc_connection >= 0) {
+    close(ipc_connection);
+    ipc_connection = -1;
+  }
+
+}
+
+static const struct olsrd_plugin_parameters plugin_parameters[] = {
+    { .name = "port",   .set_plugin_parameter = &set_plugin_port,      .data = &ipc_port },
+    { .name = "accept", .set_plugin_parameter = &set_plugin_ipaddress, .data = &ipc_accept_ip },
+};
+
+void olsrd_get_plugin_parameters(const struct olsrd_plugin_parameters **params, int *size)
+{
+    *params = plugin_parameters;
+    *size = sizeof(plugin_parameters)/sizeof(*plugin_parameters);
+}
+
+/* Event function to register with the sceduler */
+static int pcf_event(int, int, int);
+
+static void ipc_action(int);
 
 #if 0
-static void
-ipc_print_net(union olsr_ip_addr *, union olsr_ip_addr *, union hna_netmask *);
+static struct link_entry *olsr_neighbor_best_link(union olsr_ip_addr *main);
 #endif
 
-static int
-ipc_send(const char *, int);
+static void ipc_print_neigh_link(struct neighbor_entry *neighbor);
 
-static void
-ipc_print_neigh_link(struct neighbor_entry *);
+static void ipc_print_tc_link(struct tc_entry *entry, struct topo_dst *dst_entry);
+
+#if 0
+static void ipc_print_net(union olsr_ip_addr *, union olsr_ip_addr *, union hna_netmask *);
+#endif
 
-static int
-plugin_ipc_init(void);
+static int ipc_send(const char *, int);
 
-void
-olsr_plugin_exit(void);
+static void ipc_print_neigh_link(struct neighbor_entry *);
 
+static int plugin_ipc_init(void);
 
-static void
-ipc_print_neigh_link(struct neighbor_entry *neighbor)
+
+static void ipc_print_neigh_link(struct neighbor_entry *neighbor)
 {
   char buf[256];
   int len;
@@ -133,13 +205,11 @@ ipc_print_neigh_link(struct neighbor_entry *neighbor)
  *This function is called by the my_init
  *function in uolsrd_plugin.c
  */
-int
-olsrd_plugin_init(void)
+int olsrd_plugin_init(void)
 {
 
   /* Initial IPC value */
-  ipc_open = 0;
-  ipc_socket_up = 0;
+  ipc_socket = -1;
 
   /* Register the "ProcessChanges" function */
   register_pcf(&pcf_event);
@@ -147,8 +217,7 @@ olsrd_plugin_init(void)
   return 1;
 }
 
-static int
-plugin_ipc_init(void)
+static int plugin_ipc_init(void)
 {
   struct sockaddr_in sin;
   olsr_u32_t yes = 1;
@@ -170,7 +239,7 @@ plugin_ipc_init(void)
 #ifdef __FreeBSD__
       if (setsockopt(ipc_socket, SOL_SOCKET, SO_NOSIGPIPE, (char *)&yes, sizeof(yes)) < 0) 
       {
-       perror("SO_REUSEADDR failed");
+       perror("SO_NOSIGPIPE failed");
        return 0;
       }
 #endif
@@ -200,14 +269,12 @@ plugin_ipc_init(void)
 
       /* Register with olsrd */
       add_olsr_socket(ipc_socket, &ipc_action);
-      ipc_socket_up = 1;
     }
 
   return 1;
 }
 
-void
-ipc_action(int fd __attribute__((unused)))
+static void ipc_action(int fd __attribute__((unused)))
 {
   struct sockaddr_in pin;
   socklen_t addrlen;
@@ -235,7 +302,6 @@ ipc_action(int fd __attribute__((unused)))
       else
        {
 */
-         ipc_open = 1;
          olsr_printf(1, "(DOT DRAW)IPC: Connection from %s\n",addr);
           len = sprintf(buf, "add node %s\n", olsr_ip_to_string(&olsr_cnf->main_addr));
          ipc_send(buf, len);
@@ -245,25 +311,12 @@ ipc_action(int fd __attribute__((unused)))
 
 }
 
-/*
- * destructor - called at unload
- */
-void
-olsr_plugin_exit(void)
-{
-  if(ipc_open)
-    close(ipc_socket);
-}
-
-
-
 /**
  *Scheduled event
  */
-int
-pcf_event(int changes_neighborhood,
-         int changes_topology,
-         int changes_hna __attribute__((unused)))
+static int pcf_event(int changes_neighborhood,
+                     int changes_topology,
+                     int changes_hna __attribute__((unused)))
 {
   int res;
   olsr_u8_t index;
@@ -340,7 +393,7 @@ pcf_event(int changes_neighborhood,
     }
 
 
-  if(!ipc_socket_up)
+  if(ipc_socket == -1)
     plugin_ipc_init();
 
   return res;
@@ -348,8 +401,7 @@ pcf_event(int changes_neighborhood,
 
 #if 0
 #define MIN_LINK_QUALITY 0.01
-static double 
-calc_etx(double loss, double neigh_loss) 
+static double calc_etx(double loss, double neigh_loss) 
 {
   if (loss < MIN_LINK_QUALITY || neigh_loss < MIN_LINK_QUALITY)
     return 0.0;
@@ -358,8 +410,7 @@ calc_etx(double loss, double neigh_loss)
 }
 #endif
 
-static void
-ipc_print_tc_link(struct tc_entry *entry, struct topo_dst *dst_entry)
+static void ipc_print_tc_link(struct tc_entry *entry, struct topo_dst *dst_entry)
 {
   char buf[256];
   int len;
@@ -401,29 +452,29 @@ ipc_print_net(union olsr_ip_addr *gw, union olsr_ip_addr *net, union hna_netmask
 #endif
 
 
-static int
-ipc_send(const char *data, int size)
+static int ipc_send(const char *data, int size)
 {
-  if(!ipc_open)
+  if(ipc_connection == -1)
     return 0;
 
 #if defined __FreeBSD__ || defined __MacOSX__
-  if (send(ipc_connection, data, size, 0) < 0) 
+#define FLAG 0
 #else
-  if (send(ipc_connection, data, size, MSG_NOSIGNAL) < 0) 
+#define FLAG MSG_NOSIGNAL
 #endif
+  if (send(ipc_connection, data, size, FLAG) < 0) 
     {
       olsr_printf(1, "(DOT DRAW)IPC connection lost!\n");
       close(ipc_connection);
-      ipc_open = 0;
+      ipc_connection = -1;
       return -1;
     }
 
   return 1;
 }
 
-
-struct link_entry *olsr_neighbor_best_link(union olsr_ip_addr *main)
+#if 0
+static struct link_entry *olsr_neighbor_best_link(union olsr_ip_addr *main)
 {
   struct link_entry *walker;
   double best = 0.0;
@@ -450,4 +501,4 @@ struct link_entry *olsr_neighbor_best_link(union olsr_ip_addr *main)
 
   return res;
 }
-
+#endif
index f15f469..7e3d154 100755 (executable)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsrd_pgraph.h,v 1.2 2007/04/20 13:46:03 bernd67 Exp $
+ * $Id: olsrd_pgraph.h,v 1.3 2007/08/30 22:49:12 bernd67 Exp $
  */
 
 /*
 #include "mid_set.h"
 #include "link_set.h"
 
-extern struct in_addr ipc_accept_ip;
-extern int ipc_port;
+void olsrd_get_plugin_parameters(const struct olsrd_plugin_parameters **params, int *size);
 
-extern char netmask[5];
-
-/* Event function to register with the sceduler */
-int
-pcf_event(int, int, int);
-
-void
-ipc_action(int);
-
-char *
-olsr_netmask_to_string(union hna_netmask *);
-
-struct link_entry *olsr_neighbor_best_link(union olsr_ip_addr *main);
+int olsrd_plugin_interface_version(void);
 
 #endif
diff --git a/lib/pgraph/src/olsrd_plugin.c b/lib/pgraph/src/olsrd_plugin.c
deleted file mode 100755 (executable)
index b39c2c3..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * The olsr.org Optimized Link-State Routing daemon(olsrd)
- * Copyright (c) 2004, Andreas T√łnnesen(andreto@olsr.org)
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions 
- * are met:
- *
- * * Redistributions of source code must retain the above copyright 
- *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright 
- *   notice, this list of conditions and the following disclaimer in 
- *   the documentation and/or other materials provided with the 
- *   distribution.
- * * Neither the name of olsr.org, olsrd nor the names of its 
- *   contributors may be used to endorse or promote products derived 
- *   from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * Visit http://www.olsr.org for more information.
- *
- * If you find this software useful feel free to make a donation
- * to the project. For more information see the website or contact
- * the copyright holders.
- *
- * $Id: olsrd_plugin.c,v 1.2 2007/04/20 13:46:03 bernd67 Exp $
- */
-
-/*
- * Dynamic linked library for the olsr.org olsr daemon
- */
-
-
-#include "olsrd_plugin.h"
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include "plugin_loader.h"
-
-#define PLUGIN_NAME    "OLSRD pgraph plugin"
-#define PLUGIN_VERSION "0.1"
-#define PLUGIN_AUTHOR   "Richard Gopaul"
-#define MOD_DESC PLUGIN_NAME " " PLUGIN_VERSION " by " PLUGIN_AUTHOR
-#define PLUGIN_INTERFACE_VERSION 4
-
-struct in_addr ipc_accept_ip;
-int ipc_port;
-
-void
-olsr_plugin_exit(void);
-
-void __attribute__ ((constructor)) 
-my_init(void);
-
-void __attribute__ ((destructor)) 
-my_fini(void);
-
-/*
- * Defines the version of the plugin interface that is used
- * THIS IS NOT THE VERSION OF YOUR PLUGIN!
- * Do not alter unless you know what you are doing!
- */
-int 
-olsrd_plugin_interface_version(void)
-{
-  return PLUGIN_INTERFACE_VERSION;
-}
-
-
-/**
- *Constructor
- */
-void
-my_init(void)
-{
-  /* Print plugin info to stdout */
-  printf("%s\n", MOD_DESC);
-
-  /* defaults for parameters */
-  ipc_port = 2004;
-  ipc_accept_ip.s_addr = htonl(INADDR_LOOPBACK);
-  
-  return;
-}
-
-/**
- *Destructor
- */
-void
-my_fini(void)
-{
-
-  /* Calls the destruction function
-   * olsr_plugin_exit()
-   * This function should be present in your
-   * sourcefile and all data destruction
-   * should happen there - NOT HERE!
-   */
-  olsr_plugin_exit();
-
-  return;
-}
-
-int
-olsrd_plugin_register_param(char *key, char *value)
-{
-  if(!strcmp(key, "port"))
-    {
-     ipc_port = atoi(value);
-     printf("(PGRAPH) listening on port: %d\n", ipc_port);
-    }
-
-  if(!strcmp(key, "accept"))
-    {
-       inet_aton(value, &ipc_accept_ip);
-       printf("(PGRAPH) accept only: %s\n", inet_ntoa(ipc_accept_ip));
-    }
-  return 1;
-}
-
-
index 3d09da3..a145659 100755 (executable)
@@ -2,8 +2,8 @@ VERS_1.0
 {
   global:
     olsrd_plugin_interface_version;
-    olsrd_plugin_register_param;
     olsrd_plugin_init;
+    olsrd_get_plugin_parameters;
 
   local:
     *;