Updated the dyn_gw plugin for the new v2 plugin interface. Also did some cleanups.
authorAndreas Tonnesen <andreto@olsr.org>
Fri, 5 Nov 2004 23:24:40 +0000 (23:24 +0000)
committerAndreas Tonnesen <andreto@olsr.org>
Fri, 5 Nov 2004 23:24:40 +0000 (23:24 +0000)
lib/dyn_gw/Makefile
lib/dyn_gw/README_DYN_GW
lib/dyn_gw/src/olsr_plugin_io.h
lib/dyn_gw/src/olsrd_dyn_gw.c
lib/dyn_gw/src/olsrd_dyn_gw.h
lib/dyn_gw/src/olsrd_plugin.c
lib/dyn_gw/src/olsrd_plugin.h

index 228bde0..716c2e8 100644 (file)
@@ -6,7 +6,7 @@
 #Alter this file to fit your needs
 
 CC ?= gcc
-NAME ?= olsrd_dyn_gw.so.0.1
+NAME ?= olsrd_dyn_gw.so.0.2
 LIBDIR ?= $(INSTALL_PREFIX)/usr/lib
 # -fPIC creates position independent code
 MYFLAGS ?= -Wall -fPIC -g # Uncomment -g for debugging
index 56465eb..5577ec3 100644 (file)
@@ -1,6 +1,8 @@
 DYNAMIC INTERNET GATEWAY PLUGIN FOR UNIK OLSRD
 by Andreas Tønnesen(andreto@olsr.org)
 
+TO BE UPDATED....
+
 30.03.2004
 
 ABOUT
index 5e74e9c..6068784 100644 (file)
@@ -2,24 +2,24 @@
  * OLSR ad-hoc routing table management protocol
  * Copyright (C) 2004 Andreas Tønnesen (andreto@ifi.uio.no)
  *
- * This file is part of olsrd-unik.
+ * This file is part of the olsr.org OLSR daemon.
  *
- * UniK olsrd is free software; you can redistribute it and/or modify
+ * olsr.org is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
- * UniK olsrd is distributed in the hope that it will be useful,
+ * olsr.org is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with olsrd-unik; if not, write to the Free Software
+ * along with olsr.org; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: olsr_plugin_io.h,v 1.3 2004/09/21 19:08:57 kattemat Exp $
+ * $Id: olsr_plugin_io.h,v 1.4 2004/11/05 23:24:40 kattemat Exp $
  *
  */
 
  *                 interface struct.
  *                 Added GETF__ADD_IFCHGF and GETF__DEL_IFCHGF.
  *                 - Andreas
- *
+ *         0.4.8 : GETF__APM_READ added
+ *                 GETD__OLSR_CNF added
+ *                 GETD_PACKET removed
+ *                 GETD_MAXMESSAGESIZE removed
+ *                 GETD_OUTPUTSIZE removed
+ *                 - Andreas
  */
 
 /*
 #ifndef _OLSR_PLUGIN_IO
 #define _OLSR_PLUGIN_IO
 
-/* Data fetching - starts at 100 */
-#define GETD__PACKET                               100                            
-#define GETD__OUTPUTSIZE                           101
+/* Data fetching - starts at 100 (used to anyway) */
 #define GETD__IFNET                                102
 #define GETD__NOW                                  103
 #define GETD__PARSER_ENTRIES                       104
 #define GETD__OLSR_SOCKET_ENTRIES                  105
-#define GETD__MAXMESSAGESIZE                       106
 #define GETD__NEIGHBORTABLE                        108
 #define GETD__TWO_HOP_NEIGHBORTABLE                109
 #define GETD__TC_TABLE                             110
 #define GETD__HNA_SET                              111
+#define GETD__OLSR_CNF                             112
 
 /* Function fetching - starts at 500 */
 #define GETF__OLSR_REGISTER_SCHEDULER_EVENT        500
 #define GETF__OLSR_HASHING                         528
 #define GETF__ADD_IFCHGF                           529
 #define GETF__DEL_IFCHGF                           530
+#define GETF__APM_READ                             531
 
 #endif
index daa944e..f10ec98 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: olsrd_dyn_gw.c,v 1.3 2004/09/21 19:08:57 kattemat Exp $
+ * $Id: olsrd_dyn_gw.c,v 1.4 2004/11/05 23:24:40 kattemat Exp $
  *
  */
 
 #include <unistd.h>
 #include <errno.h>
 
-int ipc_socket;
-int ipc_open;
-int ipc_connection;
-int ipc_socket_up;
+static int ipc_socket;
+static int ipc_open;
+static int ipc_connection;
+static int ipc_socket_up;
+
+static int has_inet_gateway;
 
 /**
  *Do initialization here
@@ -76,6 +78,7 @@ int
 plugin_ipc_init()
 {
   struct sockaddr_in sin;
+  int on = 1;
 
   /* Init ipc socket */
   if ((ipc_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1) 
@@ -92,7 +95,14 @@ plugin_ipc_init()
       sin.sin_family = AF_INET;
       sin.sin_addr.s_addr = INADDR_ANY;
       sin.sin_port = htons(9999);
-      
+
+      /* Set reuse */
+      if (setsockopt(ipc_socket, SOL_SOCKET, SO_REUSEADDR, (void *) &on, sizeof(on)) < 0)
+       {
+         olsr_printf(1, "(DYN GW)SETSOCKOPT %s\n", strerror(errno));
+         return 0;
+       }
+
       /* bind the socket to the port number */
       if (bind(ipc_socket, (struct sockaddr *) &sin, sizeof(sin)) == -1) 
        {
@@ -315,98 +325,6 @@ check_gw(union olsr_ip_addr *net, union hna_netmask *mask)
  *************************************************************/
 
 
-/**
- *Hashing function. Creates a key based on
- *an 32-bit address.
- *@param address the address to hash
- *@return the hash(a value in the 0-31 range)
- */
-olsr_u32_t
-olsr_hashing(union olsr_ip_addr *address)
-{
-  olsr_u32_t hash;
-  char *tmp;
-
-  if(ipversion == AF_INET)
-    /* IPv4 */  
-    hash = (ntohl(address->v4));
-  else
-    {
-      /* IPv6 */
-      tmp = (char *) &address->v6;
-      hash = (ntohl(*tmp));
-    }
-
-  //hash &= 0x7fffffff; 
-  hash &= HASHMASK;
-
-  return hash;
-}
-
-
-
-/**
- *Checks if a timer has times out. That means
- *if it is smaller than present time.
- *@param timer the timeval struct to evaluate
- *@return positive if the timer has not timed out,
- *0 if it matches with present time and negative
- *if it is timed out.
- */
-int
-olsr_timed_out(struct timeval *timer)
-{
-  return(timercmp(timer, now, <));
-}
-
-
-
-/**
- *Initiates a "timer", wich is a timeval structure,
- *with the value given in time_value.
- *@param time_value the value to initialize the timer with
- *@param hold_timer the timer itself
- *@return nada
- */
-void
-olsr_init_timer(olsr_u32_t time_value, struct timeval *hold_timer)
-{ 
-  olsr_u16_t  time_value_sec;
-  olsr_u16_t  time_value_msec;
-
-  time_value_sec = time_value/1000;
-  time_value_msec = time_value-(time_value_sec*1000);
-
-  hold_timer->tv_sec = time_value_sec;
-  hold_timer->tv_usec = time_value_msec*1000;   
-}
-
-
-
-
-
-/**
- *Generaties a timestamp a certain number of milliseconds
- *into the future.
- *
- *@param time_value how many milliseconds from now
- *@param hold_timer the timer itself
- *@return nada
- */
-void
-olsr_get_timestamp(olsr_u32_t delay, struct timeval *hold_timer)
-{ 
-  olsr_u16_t  time_value_sec;
-  olsr_u16_t  time_value_msec;
-
-  time_value_sec = delay/1000;
-  time_value_msec= delay - (delay*1000);
-
-  hold_timer->tv_sec = now->tv_sec + time_value_sec;
-  hold_timer->tv_usec = now->tv_usec + (time_value_msec*1000);   
-}
-
-
 /**
  *Converts a olsr_ip_addr to a string
  *Goes for both IPv4 and IPv6
index 1f9b02d..e412938 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: olsrd_dyn_gw.h,v 1.3 2004/09/21 19:08:57 kattemat Exp $
+ * $Id: olsrd_dyn_gw.h,v 1.4 2004/11/05 23:24:40 kattemat Exp $
  *
  */
 
@@ -40,8 +40,6 @@
 union olsr_ip_addr gw_net;
 union hna_netmask gw_netmask;
 
-int has_inet_gateway;
-
 /* Timeout function to register with the sceduler */
 void
 olsr_timeout();
index 7422227..61a09ca 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: olsrd_plugin.c,v 1.3 2004/09/21 19:08:57 kattemat Exp $
+ * $Id: olsrd_plugin.c,v 1.4 2004/11/05 23:24:40 kattemat Exp $
  *
  */
 
@@ -59,6 +59,7 @@ register_olsr_data(struct olsr_plugin_data *);
 int
 fetch_olsrd_data();
 
+
 /*
  * Defines the version of the plugin interface that is used
  * THIS IS NOT THE VERSION OF YOUR PLUGIN!
@@ -77,8 +78,6 @@ my_init()
   /* Set interface version */
   plugin_interface_version = PLUGIN_INTERFACE_VERSION;
 
-  ifs = NULL;
-
   return;
 }
 
@@ -101,6 +100,14 @@ my_fini()
 }
 
 
+int
+register_olsr_param(char *key, char *value)
+{
+  printf("Plugin receiving parameter key:\"%s\" value:\"%s\"\n", key, value);
+  return 0;
+}
+
+
 /**
  *Register needed functions and pointers
  *
@@ -191,10 +198,17 @@ fetch_olsrd_data()
   }
 
 
-  /* Interface list */
-  if(!olsr_plugin_io(GETD__IFNET, &ifs, sizeof(ifs)))
+  /* Add hna net IPv4 */
+  if(!olsr_plugin_io(GETF__ADD_LOCAL_HNA4_ENTRY, &add_local_hna4_entry, sizeof(add_local_hna4_entry)))
+  {
+    add_local_hna4_entry = NULL;
+    retval = 0;
+  }
+
+  /* Remove hna net IPv4 */
+  if(!olsr_plugin_io(GETF__REMOVE_LOCAL_HNA4_ENTRY, &remove_local_hna4_entry, sizeof(remove_local_hna4_entry)))
   {
-    ifs = NULL;
+    remove_local_hna4_entry = NULL;
     retval = 0;
   }
 
@@ -213,21 +227,6 @@ fetch_olsrd_data()
     retval = 0;
   }
 
-  /* Add hna net IPv4 */
-  if(!olsr_plugin_io(GETF__ADD_LOCAL_HNA4_ENTRY, &add_local_hna4_entry, sizeof(add_local_hna4_entry)))
-  {
-    add_local_hna4_entry = NULL;
-    retval = 0;
-  }
-
-  /* Remove hna net IPv4 */
-  if(!olsr_plugin_io(GETF__REMOVE_LOCAL_HNA4_ENTRY, &remove_local_hna4_entry, sizeof(remove_local_hna4_entry)))
-  {
-    remove_local_hna4_entry = NULL;
-    retval = 0;
-  }
-
-
   return retval;
 
 }
index 1b6b7ac..a2a7c4a 100644 (file)
  *****************************************************************************/
 
 #define PLUGIN_NAME    "OLSRD dynamic gateway plugin"
-#define PLUGIN_VERSION "0.1"
+#define PLUGIN_VERSION "0.2"
 #define PLUGIN_AUTHOR   "Andreas Tønnesen"
 #define MOD_DESC PLUGIN_NAME " " PLUGIN_VERSION " by " PLUGIN_AUTHOR
-#define PLUGIN_INTERFACE_VERSION 1
+#define PLUGIN_INTERFACE_VERSION 2
 
-/* The type of message you will use */
-#define MESSAGE_TYPE 128
-
-/* The type of messages we will receive - can be set to promiscuous */
-#define PARSER_TYPE MESSAGE_TYPE
 
 
 
@@ -106,152 +101,6 @@ union hna_netmask
   olsr_u16_t v6;
 };
 
-#define MAX_TTL               0xff
-
-
-/*
- *Link Types
- */
-
-#define UNSPEC_LINK           0
-#define ASYM_LINK             1
-#define SYM_LINK              2
-#define LOST_LINK             3
-#define HIDE_LINK             4
-#define MAX_LINK              4
-
-
-/*
- * Mantissa scaling factor
- */
-
-#define VTIME_SCALE_FACTOR    0.0625
-
-
-/*
- * Hashing
- */
-
-#define        HASHSIZE        32
-#define        HASHMASK        (HASHSIZE - 1)
-
-#define MAXIFS         8 /* Maximum number of interfaces (from defs.h) in uOLSRd */
-
-
-/****************************************************************************
- *                          INTERFACE SECTION                               *
- ****************************************************************************/
-
-/**
- *A struct containing all necessary information about each
- *interface participating in the OLSD routing
- */
-struct interface 
-{
-  /* IP version 4 */
-  struct       sockaddr int_addr;              /* address */
-  struct       sockaddr int_netmask;           /* netmask */
-  struct       sockaddr int_broadaddr;         /* broadcast address */
-  /* IP version 6 */
-  struct        sockaddr_in6 int6_addr;         /* Address */
-  struct        sockaddr_in6 int6_multaddr;     /* Multicast */
-  /* IP independent */
-  union         olsr_ip_addr ip_addr;
-  int           olsr_socket;                    /* The broadcast socket for this interface */
-  int          int_metric;                     /* metric of interface */
-  int          int_flags;                      /* see below */
-  char         *int_name;                      /* from kernel if structure */
-  int           if_index;                       /* Kernels index of this interface */
-  int           if_nr;                          /* This interfaces index internally*/
-  int           is_wireless;                    /* wireless interface or not*/
-  olsr_u16_t    olsr_seqnum;                    /* Olsr message seqno */
-  struct       interface *int_next;
-};
-
-/****************************************************************************
- *                            PACKET SECTION                                *
- ****************************************************************************/
-
-
-/**********************************
- * DEFINE YOUR CUSTOM PACKET HERE *
- **********************************/
-
-
-/*
- * OLSR message (several can exist in one OLSR packet)
- */
-
-struct olsrmsg
-{
-  olsr_u8_t     olsr_msgtype;
-  olsr_u8_t     olsr_vtime;
-  olsr_u16_t    olsr_msgsize;
-  olsr_u32_t    originator;
-  olsr_u8_t     ttl;
-  olsr_u8_t     hopcnt;
-  olsr_u16_t    seqno;
-
-  /* YOUR PACKET GOES HERE */
-
-};
-
-/*
- *IPv6
- */
-
-struct olsrmsg6
-{
-  olsr_u8_t        olsr_msgtype;
-  olsr_u8_t        olsr_vtime;
-  olsr_u16_t       olsr_msgsize;
-  struct in6_addr  originator;
-  olsr_u8_t        ttl;
-  olsr_u8_t        hopcnt;
-  olsr_u16_t       seqno;
-
-  /* YOUR PACKET GOES HERE */
-
-};
-
-/*
- * Generic OLSR packet - DO NOT ALTER
- */
-
-struct olsr 
-{
-  olsr_u16_t     olsr_packlen;         /* packet length */
-  olsr_u16_t     olsr_seqno;
-  struct olsrmsg  olsr_msg[1];          /* variable messages */
-};
-
-
-struct olsr6
-{
-  olsr_u16_t       olsr_packlen;        /* packet length */
-  olsr_u16_t       olsr_seqno;
-  struct olsrmsg6   olsr_msg[1];         /* variable messages */
-};
-
-
-/* 
- * ALWAYS USE THESE WRAPPERS TO
- * ENSURE IPv4 <-> IPv6 compability 
- */
-
-union olsr_message
-{
-  struct olsrmsg v4;
-  struct olsrmsg6 v6;
-};
-
-union olsr_packet
-{
-  struct olsr v4;
-  struct olsr6 v6;
-};
-
-
 /***************************************************************************
  *                 Functions provided by uolsrd_plugin.c                   *
  *                  Similar to their siblings in olsrd                     *
@@ -261,18 +110,6 @@ char ipv6_buf[100]; /* buffer for IPv6 inet_htop */
 
 /* All these could optionally be fetched from olsrd */
 
-olsr_u32_t
-olsr_hashing(union olsr_ip_addr *);
-
-void
-olsr_get_timestamp(olsr_u32_t, struct timeval *);
-
-void
-olsr_init_timer(olsr_u32_t, struct timeval *);
-
-int
-olsr_timed_out(struct timeval *);
-
 char *
 olsr_ip_to_string(union olsr_ip_addr *);
 
@@ -286,46 +123,9 @@ olsr_ip_to_string(union olsr_ip_addr *);
 /* The multi-purpose funtion. All other functions are fetched trough this */
 int (*olsr_plugin_io)(int, void *, size_t);
 
-/* add a prser function */
-void (*olsr_parser_add_function)(void (*)(union olsr_message *, struct interface *, union olsr_ip_addr *), 
-                                int, int);
-
-/* Register a timeout function */
-int (*olsr_register_timeout_function)(void (*)());
-
 /* Register a scheduled event */
 int (*olsr_register_scheduler_event)(void (*)(), float, float, olsr_u8_t *);
 
-/* Get the next message seqno in line */
-olsr_u16_t (*get_msg_seqno)();
-
-/* Transmit package */
-int (*net_output)(struct interface*);
-
-/* Check the duplicate table for prior processing */
-int (*check_dup_proc)(union olsr_ip_addr *, olsr_u16_t);
-
-/* Default forward algorithm */
-int (*default_fwd)(union olsr_message *, 
-                  union olsr_ip_addr *, 
-                  olsr_u16_t,  
-                  struct interface *, 
-                  union olsr_ip_addr *);
-
-/* Add a socket to the main olsrd select loop */
-void (*add_olsr_socket)(int, void(*)(int));
-
-/* Remove a socket from the main olsrd select loop */
-int (*remove_olsr_socket)(int, void(*)(int));
-
-/* get the link status to a neighbor */
-int (*check_neighbor_link)(union olsr_ip_addr *);
-
-/* Mantissa/exponen conversions */
-olsr_u8_t (*double_to_me)(double);
-
-double (*me_to_double)(olsr_u8_t);
-
 /* olsrd printf wrapper */
 int (*olsr_printf)(int, char *, ...);
 
@@ -338,11 +138,11 @@ void (*add_local_hna4_entry)(union olsr_ip_addr *, union hna_netmask *);
 /* Remove hna net IPv4 */
 int (*remove_local_hna4_entry)(union olsr_ip_addr *, union hna_netmask *);
 
-/* Add hna net IPv6 */
-void (*add_local_hna6_entry)(union olsr_ip_addr *, union hna_netmask *);
+/* Add a socket to the main olsrd select loop */
+void (*add_olsr_socket)(int, void(*)(int));
 
-/* Remove hna net IPv6 */
-int (*remove_local_hna6_entry)(union olsr_ip_addr *, union hna_netmask *);
+/* Remove a socket from the main olsrd select loop */
+int (*remove_olsr_socket)(int, void(*)(int));
 
 
 /****************************************************************************
@@ -351,11 +151,6 @@ int (*remove_local_hna6_entry)(union olsr_ip_addr *, union hna_netmask *);
  *               NEVER ALTER DATA POINTED TO BY THESE POINTERS              * 
  *                   UNLESS YOU KNOW WHAT YOU ARE DOING!!!                  *
  ****************************************************************************/
-/**
- * The interface list from olsrd
- */
-
-struct interface   *ifs;
 
 /* These two are set automatically by olsrd at load time */
 int                ipversion;  /* IPversion in use */
@@ -365,10 +160,6 @@ union olsr_ip_addr *main_addr; /* Main address */
 size_t             ipsize;     /* Size of the ipadresses used */
 struct timeval     *now;       /* the olsrds schedulers idea of current time */
 
-/* Data that can be altered by your plugin */
-char               *buffer;    /* The packet buffer - put your packet here */
-int                *outputsize;/* Pointer to the outputsize - set the size of your packet here */
-
 
 /****************************************************************************
  *                Functions that the plugin MUST provide                    *
@@ -391,4 +182,7 @@ olsr_plugin_exit();
 int
 plugin_io(int, void *, size_t);
 
+int
+register_olsr_param(char *, char *);
+
 #endif