insert Copyright notice for Henning Rogge
authorHenning Rogge <rogge@fgan.de>
Tue, 1 Apr 2008 06:28:47 +0000 (08:28 +0200)
committerHenning Rogge <rogge@fgan.de>
Tue, 1 Apr 2008 06:28:47 +0000 (08:28 +0200)
15 files changed:
src/defs.h
src/duplicate_set.c
src/duplicate_set.h
src/interfaces.c
src/interfaces.h
src/lq_avl.c
src/lq_avl.h
src/lq_plugin.c
src/lq_plugin.h
src/lq_plugin_default.c
src/lq_plugin_default.h
src/olsr.c
src/parser.c
src/socket_parser.c
src/socket_parser.h

index 9a4784a..7eb4964 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * The olsr.org Optimized Link-State Routing daemon(olsrd)
- * Copyright (c) 2004, Andreas Tønnesen(andreto@olsr.org)
+ * Copyright (c) 2004, Andreas Tnnesen(andreto@olsr.org)
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without 
index a425ddc..907ff43 100644 (file)
@@ -1,3 +1,43 @@
+/*
+ * The olsr.org Optimized Link-State Routing daemon(olsrd)
+ * Copyright (c) 2008 Henning Rogge <rogge@fgan.de>
+ * 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.
+ *
+ */
+
 #include "duplicate_set.h"
 #include "ipcalc.h"
 #include "lq_avl.h"
index 2680275..d351926 100644 (file)
@@ -1,3 +1,43 @@
+/*
+ * The olsr.org Optimized Link-State Routing daemon(olsrd)
+ * Copyright (c) 2008 Henning Rogge <rogge@fgan.de>
+ * 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.
+ *
+ */
+
 #ifndef DUPLICATE_SET_2_H_
 #define DUPLICATE_SET_2_H_
 
index 606980d..48a7df8 100644 (file)
@@ -335,7 +335,6 @@ del_ifchgf(int (*f)(struct interface *, int))
 
   return 0;
 }
-
 /*
  * Local Variables:
  * c-basic-offset: 2
index 8ed76f1..6f1419a 100644 (file)
@@ -118,7 +118,6 @@ struct olsr_netbuf
   int reserved;   /* Plugins can reserve space in buffers */
 };
 
-
 /**
  *A struct containing all necessary information about each
  *interface participating in the OLSRD routing
@@ -135,14 +134,16 @@ struct interface
   /* IP independent */
   union         olsr_ip_addr ip_addr;
   int           is_hcif;                        /* Is this a emulated host-client if? */
-  int           olsr_socket;                    /* The broadcast socket for this interface */
-  int          int_metric;                     /* metric of interface */
-  int           int_mtu;                        /* MTU of interface */
-  int          int_flags;                      /* see below */
-  int           if_index;                       /* Kernels index of this interface */
-  int           is_wireless;                    /* wireless interface or not*/
+  
+  int           olsr_socket;        /* The broadcast socket for this interface */
+  
+  int            int_metric;                   /* metric of interface */
+  int           int_mtu;        /* MTU of interface */
+  int            int_flags;                    /* see below */
+  int           if_index;       /* Kernels index of this interface */
+  int           is_wireless;    /* wireless interface or not*/
   char         *int_name;                      /* from kernel if structure */
-  olsr_u16_t    olsr_seqnum;                    /* Olsr message seqno */
+  olsr_u16_t    olsr_seqnum;    /* Olsr message seqno */
 
   /* Periodic message generation timers */
   struct timer_entry *hello_gen_timer;
index c2081a8..27011cd 100644 (file)
@@ -66,6 +66,11 @@ int avl_comp_ipv6(const void *ip1, const void *ip2)
   return ip6cmp(ip1, ip2);
 }
 
+int avl_comp_mac(const void *ip1, const void *ip2)
+{
+  return memcmp(ip1, ip2, 6);
+}
+
 void avl_init(struct avl_tree *tree, avl_tree_comp comp)
 {
   tree->root = NULL;
index aa84063..8a870a4 100644 (file)
@@ -42,7 +42,9 @@
 #ifndef _LQ_AVL_H
 #define _LQ_AVL_H
 
-#include "defs.h"
+/* must be declared here because of circular dependency through "defs.h" */
+
+#define INLINE inline __attribute__((always_inline))
 
 struct avl_node
 {
@@ -90,6 +92,7 @@ extern avl_tree_comp avl_comp_default;
 extern avl_tree_comp avl_comp_prefix_default;
 extern int avl_comp_ipv4(const void *, const void *);
 extern int avl_comp_ipv6(const void *, const void *);
+extern int avl_comp_mac(const void *, const void *);
 
 #endif
 
index 23f2c95..8c0da05 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * The olsr.org Optimized Link-State Routing daemon(olsrd)
- * Copyright (c) 2004, Thomas Lopatic (thomas@lopatic.de)
+ * Copyright (c) 2008 Henning Rogge <rogge@fgan.de>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without 
index e90f3f0..bf987b9 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * The olsr.org Optimized Link-State Routing daemon(olsrd)
- * Copyright (c) 2004, Thomas Lopatic (thomas@lopatic.de)
+ * Copyright (c) 2008 Henning Rogge <rogge@fgan.de>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without 
index 2a41439..b1445cd 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * The olsr.org Optimized Link-State Routing daemon(olsrd)
- * Copyright (c) 2004, Thomas Lopatic (thomas@lopatic.de)
+ * Copyright (c) 2008 Henning Rogge <rogge@fgan.de>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without 
index c665fef..aec7def 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * The olsr.org Optimized Link-State Routing daemon(olsrd)
- * Copyright (c) 2004, Thomas Lopatic (thomas@lopatic.de)
+ * Copyright (c) 2008 Henning Rogge <rogge@fgan.de>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without 
index a8f0967..d5407ea 100644 (file)
@@ -260,6 +260,9 @@ olsr_init_tables(void)
   /* Initialize HNA set */
   olsr_init_hna_set();  
 
+  /* Initialize Layer 1/2 database */
+  olsr_initialize_layer12();
+  
   /* Start periodic SPF and RIB recalculation */
   if (olsr_cnf->lq_dinter > 0.0) {
     olsr_start_timer((unsigned int)(olsr_cnf->lq_dinter * MSEC_PER_SEC), 5,
index 16785e8..4a359ee 100644 (file)
@@ -67,7 +67,7 @@
  * recv() loop never ends. This is a small hack to end
  * the loop in this cases
  */
+
 unsigned int cpu_overload_exit = 0;
 
 struct parse_function_entry *parse_functions;
@@ -77,9 +77,7 @@ static char inbuf[MAXMESSAGESIZE+1];
 
 static olsr_bool disp_pack_in = OLSR_FALSE;
 
-void
-parser_set_disp_pack_in(olsr_bool val)
-{
+void parser_set_disp_pack_in(olsr_bool val) {
   disp_pack_in = val;
 }
 
@@ -88,127 +86,98 @@ parser_set_disp_pack_in(olsr_bool val)
  *
  *@return nada
  */
-void
-olsr_init_parser(void)
-{
+void olsr_init_parser(void) {
   OLSR_PRINTF(3, "Initializing parser...\n");
-
+  
   /* Initialize the packet functions */
   olsr_init_package_process();
-
+  
 }
 
-void
-olsr_parser_add_function(parse_function *function, olsr_u32_t type, int forwarding)
-{
+void olsr_parser_add_function(parse_function *function, olsr_u32_t type, int forwarding) {
   struct parse_function_entry *new_entry;
-
+  
   OLSR_PRINTF(3, "Parser: registering event for type %d\n", type);
-
+  
   new_entry = olsr_malloc(sizeof(struct parse_function_entry), "Register parse function");
-
+  
   new_entry->function = function;
   new_entry->type = type;
   new_entry->caller_forwarding = forwarding;
-
+  
   /* Queue */
   new_entry->next = parse_functions;
   parse_functions = new_entry;
-
+  
   OLSR_PRINTF(3, "Register parse function: Added function for type %d\n", type);
-
+  
 }
 
-
-
-int
-olsr_parser_remove_function(parse_function *function, olsr_u32_t type, int forwarding)
-{
+int olsr_parser_remove_function(parse_function *function, olsr_u32_t type, int forwarding) {
   struct parse_function_entry *entry, *prev;
-
+  
   entry = parse_functions;
   prev = NULL;
-
-  while(entry)
-    {
-      if((entry->function == function) &&
-        (entry->type == type) &&
-        (entry->caller_forwarding == forwarding))
-       {
-         if(entry == parse_functions)
-           {
-             parse_functions = entry->next;
-           }
-         else
-           {
-             prev->next = entry->next;
-           }
-         free(entry);
-         return 1;
-       }
-
-      prev = entry;
-      entry = entry->next;
+  
+  while (entry) {
+    if ((entry->function == function) && (entry->type == type) && (entry->caller_forwarding == forwarding)) {
+      if (entry == parse_functions) {
+        parse_functions = entry->next;
+      } else {
+        prev->next = entry->next;
+      }
+      free(entry);
+      return 1;
     }
-
+    
+    prev = entry;
+    entry = entry->next;
+  }
+  
   return 0;
 }
 
-void
-olsr_preprocessor_add_function(preprocessor_function *function)
-{
+void olsr_preprocessor_add_function(preprocessor_function *function) {
   struct preprocessor_function_entry *new_entry;
-
+  
   OLSR_PRINTF(3, "Parser: registering preprocessor\n");
-
+  
   new_entry = olsr_malloc(sizeof(struct preprocessor_function_entry), "Register preprocessor function");
-
+  
   new_entry->function = function;
-
+  
   /* Queue */
   new_entry->next = preprocessor_functions;
   preprocessor_functions = new_entry;
-
+  
   OLSR_PRINTF(3, "Registered preprocessor function\n");
-
+  
 }
 
-
-
-int
-olsr_preprocessor_remove_function(preprocessor_function *function)
-{
+int olsr_preprocessor_remove_function(preprocessor_function *function) {
   struct preprocessor_function_entry *entry, *prev;
-
+  
   entry = preprocessor_functions;
   prev = NULL;
-
-  while(entry)
-    {
-      if(entry->function == function)
-       {
-         if(entry == preprocessor_functions)
-           {
-                 preprocessor_functions = entry->next;
-           }
-         else
-           {
-             prev->next = entry->next;
-           }
-         free(entry);
-         return 1;
-       }
-
-      prev = entry;
-      entry = entry->next;
+  
+  while (entry) {
+    if (entry->function == function) {
+      if (entry == preprocessor_functions) {
+        preprocessor_functions = entry->next;
+      } else {
+        prev->next = entry->next;
+      }
+      free(entry);
+      return 1;
     }
-
+    
+    prev = entry;
+    entry = entry->next;
+  }
+  
   return 0;
 }
 
-
 /**
  *Process a newly received OLSR packet. Checks the type
  *and to the neccessary convertions and call the
@@ -219,217 +188,192 @@ olsr_preprocessor_remove_function(preprocessor_function *function)
  *@return nada
  */
 
-void
-parse_packet(struct olsr *olsr, int size, struct interface *in_if, union olsr_ip_addr *from_addr)
-{
+void parse_packet(struct olsr *olsr, int size, struct interface *in_if, union olsr_ip_addr *from_addr) {
   union olsr_message *m = (union olsr_message *)olsr->olsr_msg;
   struct unknown_message unkpacket;
   int count;
   int msgsize;
   int processed;
   struct parse_function_entry *entry;
-
+  
   count = size - ((char *)m - (char *)olsr);
-
+  
   if (count < MIN_PACKET_SIZE(olsr_cnf->ip_version))
     return;
-
-  if (ntohs(olsr->olsr_packlen) != size)
-    {
-      struct ipaddr_str buf;
-      OLSR_PRINTF(1, "Size error detected in received packet.\nRecieved %d, in packet %d\n", size, ntohs(olsr->olsr_packlen));
-           
-      olsr_syslog(OLSR_LOG_ERR, " packet length error in  packet received from %s!",
-            olsr_ip_to_string(&buf, from_addr));
-      return;
-    }
-
+  
+  if (ntohs(olsr->olsr_packlen) != size) {
+    struct ipaddr_str buf;
+    OLSR_PRINTF(1, "Size error detected in received packet.\nRecieved %d, in packet %d\n", size, ntohs(olsr->olsr_packlen));
+    
+    olsr_syslog(OLSR_LOG_ERR, " packet length error in  packet received from %s!",
+    olsr_ip_to_string(&buf, from_addr));
+    return;
+  }
+  
   //printf("Message from %s\n\n", olsr_ip_to_string(&buf, from_addr)); 
-      
+
   /* Display packet */
-  if(disp_pack_in)
+  if (disp_pack_in)
     print_olsr_serialized_packet(stdout, (union olsr_packet *)olsr, size, from_addr);
-
-  if(olsr_cnf->ip_version == AF_INET)
+  
+  if (olsr_cnf->ip_version == AF_INET)
     msgsize = ntohs(m->v4.olsr_msgsize);
   else
     msgsize = ntohs(m->v6.olsr_msgsize);
-
-
+  
   /*
    * Hysteresis update - for every OLSR package
    */
-  if(olsr_cnf->use_hysteresis)
-    {
-      if(olsr_cnf->ip_version == AF_INET)
-       {
-         /* IPv4 */
-         update_hysteresis_incoming(from_addr, 
-                                    in_if,
-                                    ntohs(olsr->olsr_seqno));
-       }
-      else
-       {
-         /* IPv6 */
-         update_hysteresis_incoming(from_addr, 
-                                    in_if, 
-                                    ntohs(olsr->olsr_seqno));
-       }
+  if (olsr_cnf->use_hysteresis) {
+    if (olsr_cnf->ip_version == AF_INET) {
+      /* IPv4 */
+      update_hysteresis_incoming(from_addr, in_if, ntohs(olsr->olsr_seqno));
+    } else {
+      /* IPv6 */
+      update_hysteresis_incoming(from_addr, in_if, ntohs(olsr->olsr_seqno));
     }
-
-  for ( ; count > 0; m = (union olsr_message *)((char *)m + (msgsize)))
-    {
-
-      processed = 0;      
-      if (count < MIN_PACKET_SIZE(olsr_cnf->ip_version))
-       break;
-      
-      if(olsr_cnf->ip_version == AF_INET)
-       msgsize = ntohs(m->v4.olsr_msgsize);
-      else
-       msgsize = ntohs(m->v6.olsr_msgsize);
+  }
+  
+  for (; count > 0; m = (union olsr_message *)((char *)m + (msgsize))) {
+    
+    processed = 0;
+    if (count < MIN_PACKET_SIZE(olsr_cnf->ip_version))
+      break;
+    
+    if (olsr_cnf->ip_version == AF_INET)
+      msgsize = ntohs(m->v4.olsr_msgsize);
+    else
+      msgsize = ntohs(m->v6.olsr_msgsize);
+    
+    count -= msgsize;
+    
+    /* Check size of message */
+    if (count < 0) {
+      struct ipaddr_str buf;
+      OLSR_PRINTF(1, "packet length error in  packet received from %s!",
+          olsr_ip_to_string(&buf, from_addr));
       
-      count -= msgsize;
-
-      /* Check size of message */
-      if(count < 0)
-       {
-          struct ipaddr_str buf;
-         OLSR_PRINTF(1, "packet length error in  packet received from %s!",
-                     olsr_ip_to_string(&buf, from_addr));
-
-         olsr_syslog(OLSR_LOG_ERR, " packet length error in  packet received from %s!",
-                olsr_ip_to_string(&buf, from_addr));
-         break;
-       }
-
-
+      olsr_syslog(OLSR_LOG_ERR, " packet length error in  packet received from %s!",
+      olsr_ip_to_string(&buf, from_addr));
+      break;
+    }
+    
 #if 0
-      /*
-       * Sven-Ola: This code leads to flooding our meshes with invalid /
-       * overdue messages if lq_fish is enabled (which is true since 2005)
-       * because there was no "do not forward"-check in olsr.c. If a message
-       * (yes: ttl=0 is invalid) is received, we should say: Welcome message,
-       * let us evaluate! But: if TTL < 2 or TTL + hopcount is higher than
-       * plausible, we should not forward. See olsr.c:olsr_forward_message()
-       */
-       
-      /* Treat TTL hopcnt */
-      if(olsr_cnf->ip_version == AF_INET)
-       {
-         /* IPv4 */
-         if (m->v4.ttl <= 0 && olsr_cnf->lq_fish == 0)
-           {
+    /*
+     * Sven-Ola: This code leads to flooding our meshes with invalid /
+     * overdue messages if lq_fish is enabled (which is true since 2005)
+     * because there was no "do not forward"-check in olsr.c. If a message
+     * (yes: ttl=0 is invalid) is received, we should say: Welcome message,
+     * let us evaluate! But: if TTL < 2 or TTL + hopcount is higher than
+     * plausible, we should not forward. See olsr.c:olsr_forward_message()
+     */
+
+    /* Treat TTL hopcnt */
+    if(olsr_cnf->ip_version == AF_INET)
+    {
+      /* IPv4 */
+      if (m->v4.ttl <= 0 && olsr_cnf->lq_fish == 0)
+      {
 #ifndef NODEBUG
-              struct ipaddr_str buf;
+        struct ipaddr_str buf;
 #endif
-             OLSR_PRINTF(2, "Dropping packet type %d from neigh %s with TTL 0\n", 
-                         m->v4.olsr_msgtype,
-                         olsr_ip_to_string(&buf, from_addr));
-             continue;
-           }
-       }
-      else
-       {
-         /* IPv6 */
-         if (m->v6.ttl <= 0 && olsr_cnf->lq_fish == 0) 
-           {
+        OLSR_PRINTF(2, "Dropping packet type %d from neigh %s with TTL 0\n",
+            m->v4.olsr_msgtype,
+            olsr_ip_to_string(&buf, from_addr));
+        continue;
+      }
+    }
+    else
+    {
+      /* IPv6 */
+      if (m->v6.ttl <= 0 && olsr_cnf->lq_fish == 0)
+      {
 #ifndef NODEBUG
-              struct ipaddr_str buf;
+        struct ipaddr_str buf;
 #endif
-             OLSR_PRINTF(2, "Dropping packet type %d from %s with TTL 0\n", 
-                         m->v4.olsr_msgtype,
-                         olsr_ip_to_string(&buf, from_addr));
-             continue;
-           }
-       }
+        OLSR_PRINTF(2, "Dropping packet type %d from %s with TTL 0\n",
+            m->v4.olsr_msgtype,
+            olsr_ip_to_string(&buf, from_addr));
+        continue;
+      }
+    }
 #endif
-
-      /*RFC 3626 section 3.4:
-       *  2    If the time to live of the message is less than or equal to
-       *  '0' (zero), or if the message was sent by the receiving node
-       *  (i.e., the Originator Address of the message is the main
-       *  address of the receiving node): the message MUST silently be
-       *  dropped.
-       */
-
-      /* Should be the same for IPv4 and IPv6 */
-      if(ipequal((union olsr_ip_addr *)&m->v4.originator, &olsr_cnf->main_addr) || !olsr_validate_address((union olsr_ip_addr *)&m->v4.originator))
-        {
+    
+    /*RFC 3626 section 3.4:
+     *  2    If the time to live of the message is less than or equal to
+     *  '0' (zero), or if the message was sent by the receiving node
+     *  (i.e., the Originator Address of the message is the main
+     *  address of the receiving node): the message MUST silently be
+     *  dropped.
+     */
+
+    /* Should be the same for IPv4 and IPv6 */
+    if (ipequal((union olsr_ip_addr *)&m->v4.originator, &olsr_cnf->main_addr)
+        || !olsr_validate_address((union olsr_ip_addr *)&m->v4.originator)) {
 #if !defined(NODEBUG) && defined(DEBUG)
-         struct ipaddr_str buf;
+      struct ipaddr_str buf;
 #endif
 #ifdef DEBUG
-         OLSR_PRINTF(3, "Not processing message originating from %s!\n",
-           olsr_ip_to_string(&buf,(union olsr_ip_addr *)&m->v4.originator));
+      OLSR_PRINTF(3, "Not processing message originating from %s!\n",
+          olsr_ip_to_string(&buf,(union olsr_ip_addr *)&m->v4.originator));
 #endif
-          continue;
-        }
-
-      /* check for message duplicates */
-      if (olsr_cnf->ip_version == AF_INET) {
-        /* IPv4 */
-        if (olsr_shall_process_message(&m->v4.originator, ntohs(m->v4.seqno)) == 0) {
-          continue;
-        }
+      continue;
+    }
+    
+    /* check for message duplicates */
+    if (olsr_cnf->ip_version == AF_INET) {
+      /* IPv4 */
+      if (olsr_shall_process_message(&m->v4.originator, ntohs(m->v4.seqno)) == 0) {
+        continue;
       }
-      else {
-        /* IPv6 */
-        if (olsr_shall_process_message(&m->v6.originator, ntohs(m->v6.seqno)) == 0) {
-          continue;
-        }
+    } else {
+      /* IPv6 */
+      if (olsr_shall_process_message(&m->v6.originator, ntohs(m->v6.seqno)) == 0) {
+        continue;
       }
+    }
+    
+    //printf("MESSAGETYPE: %d\n", m->v4.olsr_msgtype);
 
-      //printf("MESSAGETYPE: %d\n", m->v4.olsr_msgtype);
-
-      entry = parse_functions;
-
-      while(entry)
-       {
-         /* Should be the same for IPv4 and IPv6 */
-
-         /* Promiscuous or exact match */
-         if((entry->type == PROMISCUOUS) || 
-            (entry->type == m->v4.olsr_msgtype))
-           {
-             entry->function(m, in_if, from_addr);
-             if(entry->caller_forwarding)
-               processed = 1;
-           }
-         entry = entry->next;
-       }
-
+    entry = parse_functions;
+    
+    while (entry) {
+      /* Should be the same for IPv4 and IPv6 */
 
-      /* UNKNOWN PACKETTYPE */
-      if(processed == 0)
-       {
+      /* Promiscuous or exact match */
+      if ((entry->type == PROMISCUOUS) || (entry->type == m->v4.olsr_msgtype)) {
+        entry->function(m, in_if, from_addr);
+        if (entry->caller_forwarding)
+          processed = 1;
+      }
+      entry = entry->next;
+    }
+    
+    /* UNKNOWN PACKETTYPE */
+    if (processed == 0) {
 #ifndef NODEBUG
-          struct ipaddr_str buf;
+      struct ipaddr_str buf;
 #endif
-         unk_chgestruct(&unkpacket, m);
-         
-         OLSR_PRINTF(3, "Unknown type: %d, size %d, from %s\n",
-                     m->v4.olsr_msgtype,
-                     size,
-                     olsr_ip_to_string(&buf, &unkpacket.originator));
-
-         /* Forward message */
-         if(!ipequal(&unkpacket.originator, &olsr_cnf->main_addr))
-           {         
-             /* Forward */
-             olsr_forward_message(m, from_addr);
-           }
-
-          /* Cancel loop here, otherwise olsrd just hangs forever at this point */
-          break;
-       }
-
-    } /* for olsr_msg */ 
+      unk_chgestruct(&unkpacket, m);
+      
+      OLSR_PRINTF(3, "Unknown type: %d, size %d, from %s\n",
+          m->v4.olsr_msgtype,
+          size,
+          olsr_ip_to_string(&buf, &unkpacket.originator));
+      
+      /* Forward message */
+      if (!ipequal(&unkpacket.originator, &olsr_cnf->main_addr)) {
+        /* Forward */
+        olsr_forward_message(m, from_addr);
+      }
+      
+      /* Cancel loop here, otherwise olsrd just hangs forever at this point */
+      break;
+    }
+    
+  } /* for olsr_msg */
 }
 
-
-
-
 /**
  *Processing OLSR data from socket. Reading data, setting 
  *wich interface recieved the message, Sends IPC(if used) 
@@ -438,9 +382,7 @@ parse_packet(struct olsr *olsr, int size, struct interface *in_if, union olsr_ip
  *@param fd the filedescriptor that data should be read from.
  *@return nada
  */
-void
-olsr_input(int fd)
-{
+void olsr_input(int fd) {
   struct interface *olsr_in_if;
   union olsr_ip_addr from_addr;
   struct preprocessor_function_entry *entry;
@@ -448,103 +390,85 @@ olsr_input(int fd)
   
   cpu_overload_exit = 0;
   
-  for (;;) 
-    {
+  for (;;) {
 #if !defined(NODEBUG) && defined(DEBUG)
-      struct ipaddr_str buf;
+    struct ipaddr_str buf;
 #endif
-      /* sockaddr_in6 is bigger than sockaddr !!!! */
-      struct sockaddr_storage from;
-      socklen_t fromlen;
-      int cc;
-
-      if (32 < ++cpu_overload_exit)
-      {
-        OLSR_PRINTF(1, "CPU overload detected, ending olsr_input() loop\n");
-       break;
+    /* sockaddr_in6 is bigger than sockaddr !!!! */
+    struct sockaddr_storage from;
+    socklen_t fromlen;
+    int cc;
+    
+    if (32 < ++cpu_overload_exit) {
+      OLSR_PRINTF(1, "CPU overload detected, ending olsr_input() loop\n");
+      break;
+    }
+    
+    fromlen = sizeof(struct sockaddr_storage);
+    cc = olsr_recvfrom(fd, inbuf, sizeof (inbuf), 0, (struct sockaddr *)&from, &fromlen);
+    
+    if (cc <= 0) {
+      if (cc < 0 && errno != EWOULDBLOCK) {
+        OLSR_PRINTF(1, "error recvfrom: %s", strerror(errno));
+        olsr_syslog(OLSR_LOG_ERR, "error recvfrom: %m");
       }
-      
-      fromlen = sizeof(struct sockaddr_storage);
-      cc = olsr_recvfrom(fd, 
-                        inbuf, 
-                        sizeof (inbuf), 
-                        0, 
-                        (struct sockaddr *)&from, 
-                        &fromlen);
-
-      if (cc <= 0) 
-       {
-         if (cc < 0 && errno != EWOULDBLOCK)
-           {
-             OLSR_PRINTF(1, "error recvfrom: %s", strerror(errno));
-             olsr_syslog(OLSR_LOG_ERR, "error recvfrom: %m");
-           }
-         break;
-       }
-      if(olsr_cnf->ip_version == AF_INET)
-       {
-         /* IPv4 sender address */
-         from_addr.v4 = ((struct sockaddr_in *)&from)->sin_addr;
-       }
-      else
-       {
-         /* IPv6 sender address */
-         from_addr.v6 = ((struct sockaddr_in6 *)&from)->sin6_addr;
-       }
-      
-      
+      break;
+    }
+    if (olsr_cnf->ip_version == AF_INET) {
+      /* IPv4 sender address */
+      from_addr.v4 = ((struct sockaddr_in *)&from)->sin_addr;
+    } else {
+      /* IPv6 sender address */
+      from_addr.v6 = ((struct sockaddr_in6 *)&from)->sin6_addr;
+    }
+    
 #ifdef DEBUG
-      OLSR_PRINTF(5, "Recieved a packet from %s\n", olsr_ip_to_string(&buf, (union olsr_ip_addr *)&((struct sockaddr_in *)&from)->sin_addr.s_addr));
+    OLSR_PRINTF(5, "Recieved a packet from %s\n", olsr_ip_to_string(&buf, (union olsr_ip_addr *)&((struct sockaddr_in *)&from)->sin_addr.s_addr));
 #endif
-       
-       if ((olsr_cnf->ip_version == AF_INET) && (fromlen != sizeof (struct sockaddr_in)))
-         break;
-       else if ((olsr_cnf->ip_version == AF_INET6) && (fromlen != sizeof (struct sockaddr_in6)))
-         break;
-      
-      /* are we talking to ourselves? */
-      if(if_ifwithaddr(&from_addr) != NULL)
-       return;
-      
-      if((olsr_in_if = if_ifwithsock(fd)) == NULL)
-       {
-          struct ipaddr_str buf;
-         OLSR_PRINTF(1, "Could not find input interface for message from %s size %d\n",
-                     olsr_ip_to_string(&buf, &from_addr),
-                     cc);
-         olsr_syslog(OLSR_LOG_ERR, "Could not find input interface for message from %s size %d\n",
-                olsr_ip_to_string(&buf, &from_addr),
-                cc);
-         return ;
-       }
-
-      // call preprocessors
-      entry = preprocessor_functions;
-      packet = &inbuf[0];
-      
-      while(entry)
-        {
-             packet = entry->function(packet, olsr_in_if, &from_addr, &cc);
-             // discard package ?
-             if (packet == NULL) {
-               return;
-             }
-             entry = entry->next;
-        }
-      
-      /*
-       * &from - sender
-       * &inbuf.olsr 
-       * cc - bytes read
-       */
-      parse_packet((struct olsr *)packet, cc, olsr_in_if, &from_addr);
     
+    if ((olsr_cnf->ip_version == AF_INET) && (fromlen != sizeof(struct sockaddr_in)))
+      break;
+    else if ((olsr_cnf->ip_version == AF_INET6) && (fromlen != sizeof(struct sockaddr_in6)))
+      break;
+    
+    /* are we talking to ourselves? */
+    if (if_ifwithaddr(&from_addr) != NULL)
+      return;
+    
+    if ((olsr_in_if = if_ifwithsock(fd)) == NULL) {
+      struct ipaddr_str buf;
+      OLSR_PRINTF(1, "Could not find input interface for message from %s size %d\n",
+          olsr_ip_to_string(&buf, &from_addr),
+          cc);
+      olsr_syslog(OLSR_LOG_ERR, "Could not find input interface for message from %s size %d\n",
+      olsr_ip_to_string(&buf, &from_addr),
+      cc);
+      return;
+    }
+    
+    // call preprocessors
+    entry = preprocessor_functions;
+    packet = &inbuf[0];
+    
+    while (entry) {
+      packet = entry->function(packet, olsr_in_if, &from_addr, &cc);
+      // discard package ?
+      if (packet == NULL) {
+        return;
+      }
+      entry = entry->next;
     }
+    
+    /*
+     * &from - sender
+     * &inbuf.olsr 
+     * cc - bytes read
+     */
+    parse_packet((struct olsr *)packet, cc, olsr_in_if, &from_addr);
+    
+  }
 }
 
-
-
-
 /**
  *Processing OLSR data from socket. Reading data, setting 
  *wich interface recieved the message, Sends IPC(if used) 
@@ -553,9 +477,7 @@ olsr_input(int fd)
  *@param fd the filedescriptor that data should be read from.
  *@return nada
  */
-void
-olsr_input_hostemu(int fd)
-{
+void olsr_input_hostemu(int fd) {
   /* sockaddr_in6 is bigger than sockaddr !!!! */
   struct sockaddr_storage from;
   socklen_t fromlen;
@@ -564,88 +486,74 @@ olsr_input_hostemu(int fd)
   olsr_u16_t pcklen;
   struct preprocessor_function_entry *entry;
   char *packet;
-
+  
   /* Host emulator receives IP address first to emulate
-     direct link */
+   direct link */
 
   int cc = recv(fd, from_addr.v6.s6_addr, olsr_cnf->ipsize, 0);
-  if(cc != (int)olsr_cnf->ipsize)
-    {
-      fprintf(stderr, "Error receiving host-client IP hook(%d) %s!\n", cc, strerror(errno));
-      memcpy(&from_addr, &((struct olsr *)inbuf)->olsr_msg->originator, olsr_cnf->ipsize);
-    }
-
+  if (cc != (int)olsr_cnf->ipsize) {
+    fprintf(stderr, "Error receiving host-client IP hook(%d) %s!\n", cc, strerror(errno));
+    memcpy(&from_addr, &((struct olsr *)inbuf)->olsr_msg->originator, olsr_cnf->ipsize);
+  }
+  
   /* are we talking to ourselves? */
-  if(if_ifwithaddr(&from_addr) != NULL)
+  if (if_ifwithaddr(&from_addr) != NULL)
     return;
-      
+  
   /* Extract size */
-  if((cc = recv(fd, (void *)&pcklen, 2, MSG_PEEK)) != 2) /* Win needs a cast */
-    {
-      if(cc <= 0)
-       {
-         fprintf(stderr, "Lost olsr_switch connection - exit!\n");
-         olsr_exit(__func__, EXIT_FAILURE);
-       }
-      fprintf(stderr, "[hust-emu] error extracting size(%d) %s!\n", cc, strerror(errno));
-      return;
-    }
-  else
-    {
-      pcklen = ntohs(pcklen);
+  if ((cc = recv(fd, (void *)&pcklen, 2, MSG_PEEK)) != 2) /* Win needs a cast */
+  {
+    if (cc <= 0) {
+      fprintf(stderr, "Lost olsr_switch connection - exit!\n");
+      olsr_exit(__func__, EXIT_FAILURE);
     }
-
+    fprintf(stderr, "[hust-emu] error extracting size(%d) %s!\n", cc, strerror(errno));
+    return;
+  } else {
+    pcklen = ntohs(pcklen);
+  }
+  
   fromlen = sizeof(struct sockaddr_storage);
   
-  cc = olsr_recvfrom(fd, 
-                    inbuf, 
-                    pcklen, 
-                    0, 
-                    (struct sockaddr *)&from, 
-                    &fromlen);
-
-  if (cc <= 0) 
-    {
-      if (cc < 0 && errno != EWOULDBLOCK)
-       {
-          const char * const err_msg = strerror(errno);
-         OLSR_PRINTF(1, "error recvfrom: %s", err_msg);
-          olsr_syslog(OLSR_LOG_ERR, "error recvfrom: %s", err_msg);
-       }
-      return;
-    }
+  cc = olsr_recvfrom(fd, inbuf, pcklen, 0, (struct sockaddr *)&from, &fromlen);
   
-  if(cc != pcklen)
-    {
-      printf("Could not read whole packet(size %d, read %d)\n", pcklen, cc);
-      return;
-    }
-
-  if((olsr_in_if = if_ifwithsock(fd)) == NULL)
-    {
-      struct ipaddr_str buf;
-      OLSR_PRINTF(1, "Could not find input interface for message from %s size %d\n",
-                 olsr_ip_to_string(&buf, &from_addr),
-                 cc);
-      olsr_syslog(OLSR_LOG_ERR, "Could not find input interface for message from %s size %d\n",
-                  olsr_ip_to_string(&buf, &from_addr),
-                  cc);
-      return;
+  if (cc <= 0) {
+    if (cc < 0 && errno != EWOULDBLOCK) {
+      const char * const err_msg = strerror(errno);
+      OLSR_PRINTF(1, "error recvfrom: %s", err_msg);
+      olsr_syslog(OLSR_LOG_ERR, "error recvfrom: %s", err_msg);
     }
+    return;
+  }
+  
+  if (cc != pcklen) {
+    printf("Could not read whole packet(size %d, read %d)\n", pcklen, cc);
+    return;
+  }
+  
+  if ((olsr_in_if = if_ifwithsock(fd)) == NULL) {
+    struct ipaddr_str buf;
+    OLSR_PRINTF(1, "Could not find input interface for message from %s size %d\n",
+        olsr_ip_to_string(&buf, &from_addr),
+        cc);
+    olsr_syslog(OLSR_LOG_ERR, "Could not find input interface for message from %s size %d\n",
+    olsr_ip_to_string(&buf, &from_addr),
+    cc);
+    return;
+  }
   
   // call preprocessors
   entry = preprocessor_functions;
   packet = &inbuf[0];
   
-  while(entry)
-    {
-      packet = entry->function(packet, olsr_in_if, &from_addr, &cc);
-      // discard package ?
-      if (packet == NULL) {
-        return;
-      }
-      entry = entry->next;
+  while (entry) {
+    packet = entry->function(packet, olsr_in_if, &from_addr, &cc);
+    // discard package ?
+    if (packet == NULL) {
+      return;
     }
+    entry = entry->next;
+  }
   
   /*
    * &from - sender
@@ -656,4 +564,3 @@ olsr_input_hostemu(int fd)
   
 }
 
-
index ec12b85..9ec58b4 100644 (file)
@@ -68,7 +68,7 @@ static int hfd = 0;
  *@param pf the processing function
  */
 void
-add_olsr_socket(int fd, void(*pf)(int))
+add_olsr_socket(int fd, void(*pf)(int fd))
 {
   struct olsr_socket_entry *new_entry;
 
index 6ea4b49..b63e35f 100644 (file)
@@ -46,7 +46,8 @@
 struct olsr_socket_entry
 {
   int fd;
-  void(*process_function)(int);
+  int arp_type;
+  void(*process_function)(int fd);
   struct olsr_socket_entry *next;
 };