* const'ified olsr_ioctl_{add,del}_route{,6}()
authorBernd Petrovitsch <bernd@firmix.at>
Sun, 11 Nov 2007 23:10:25 +0000 (23:10 +0000)
committerBernd Petrovitsch <bernd@firmix.at>
Sun, 11 Nov 2007 23:10:25 +0000 (23:10 +0000)
  There are probably a few "const" missing for win32 and BSD.
* const'ified moer parameters in many more functions in the .h and
  .c files
* init-functions with constant or ignored return values are "void"
* created a typedef fro the callback in "struct export_route_entry"
  and using it!
* moved the initilaization of the {add,chg,del}_kernel_list variables
  into process_routes.c. So they are now "static" there.
* olsr_export_{add,del}_route{,6} are now static in process_routes.c
  since they are not used elsewhere.
* olsr_addroute_add_function() and olsr_deldroute_add_function() were
  almost identical - made one function out of it.
  Same for olsr_addroute_del_function() and olsr_deldroute_del_function().
* factored out common code
* fixed the sort order in avl_comp_ipv4_prefix(): We compare now the IPv4
  values in host byte order (and not network byte order). So the route
  list in the e.g. httpinfo plugin is now nicely sorted.

lib/quagga/src/quagga.c
lib/quagga/src/quagga.h
src/bsd/kernel_routes.c
src/kernel_routes.h
src/linux/kernel_routes.c
src/process_routes.c
src/process_routes.h
src/routing_table.c
src/routing_table.h
src/win32/kernel_routes.c

index c698f75..2d37285 100644 (file)
@@ -26,8 +26,8 @@
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <quagga/zebra.h>
-#include "quagga.h"
 
+#include "quagga.h"
 #include "olsr.h"
 #include "log.h"
 #include "defs.h"
@@ -364,7 +364,7 @@ static unsigned char* zebra_route_packet (struct ipv4_route r,
 
 
 /* adds a route to zebra-daemon */
-int zebra_add_v4_route (struct ipv4_route r) {
+int zebra_add_v4_route (const struct ipv4_route r) {
   
   unsigned char *cmdopt;
   ssize_t optlen;
@@ -736,7 +736,7 @@ static uint8_t masktoprefixlen (uint32_t mask) {
 }
 */
 
-int zebra_add_olsr_v4_route (struct rt_entry *r) {
+int zebra_add_olsr_v4_route (const struct rt_entry *r) {
   
   struct ipv4_route route;
   int retval;
@@ -783,7 +783,7 @@ int zebra_add_olsr_v4_route (struct rt_entry *r) {
   return retval;
 }
 
-int zebra_del_olsr_v4_route (struct rt_entry *r) {
+int zebra_del_olsr_v4_route (const struct rt_entry *r) {
   
   struct ipv4_route route;
   int retval;
index 83f2032..4334ebb 100644 (file)
@@ -54,8 +54,8 @@ struct ipv4_route {
 void init_zebra (void);
 void zebra_cleanup (void);
 unsigned char zebra_send_command (unsigned char, unsigned char *, int );
-int zebra_add_v4_route (struct ipv4_route r);
-int zebra_delete_v4_route (struct ipv4_route r);
+int zebra_add_v4_route (const struct ipv4_route r);
+int zebra_delete_v4_route (const struct ipv4_route r);
 void zebra_check (void*);
 int zebra_parse_packet (unsigned char*, ssize_t);
 int zebra_redistribute (unsigned char);
@@ -63,8 +63,8 @@ int zebra_disable_redistribute (unsigned char);
 int add_hna4_route (struct ipv4_route);
 int delete_hna4_route (struct ipv4_route);
 void *my_realloc (void *, size_t, const char *);
-int zebra_add_olsr_v4_route (struct rt_entry *);
-int zebra_del_olsr_v4_route (struct rt_entry *);
+int zebra_add_olsr_v4_route (const struct rt_entry *);
+int zebra_del_olsr_v4_route (const struct rt_entry *);
 void zebra_olsr_localpref (void);
 void zebra_olsr_distance (unsigned char);
 void zebra_export_routes(unsigned char);
index 63c59a3..eacec07 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: kernel_routes.c,v 1.14 2007/10/04 22:27:31 bernd67 Exp $
+ * $Id: kernel_routes.c,v 1.15 2007/11/11 23:10:24 bernd67 Exp $
  */
 
 
@@ -49,7 +49,7 @@
 
 static unsigned int seq = 0;
 
-static int add_del_route(struct rt_entry *rt, int add)
+static int add_del_route(const struct rt_entry *rt, int add)
 {
   struct rt_msghdr *rtm;
   unsigned char buff[512];
@@ -164,17 +164,17 @@ static int add_del_route(struct rt_entry *rt, int add)
   return 0;
 }
 
-int olsr_ioctl_add_route(struct rt_entry *rt)
+int olsr_ioctl_add_route(const struct rt_entry *rt)
 {
   return add_del_route(rt, 1);
 }
 
-int olsr_ioctl_del_route(struct rt_entry *rt)
+int olsr_ioctl_del_route(const struct rt_entry *rt)
 {
   return add_del_route(rt, 0);
 }
 
-static int add_del_route6(struct rt_entry *rt, int add)
+static int add_del_route6(const struct rt_entry *rt, int add)
 {
   struct rt_msghdr *rtm;
   unsigned char buff[512];
@@ -300,12 +300,12 @@ static int add_del_route6(struct rt_entry *rt, int add)
   return 0;
 }
 
-int olsr_ioctl_add_route6(struct rt_entry *rt)
+int olsr_ioctl_add_route6(const struct rt_entry *rt)
 {
   return add_del_route6(rt, 1);
 }
 
-int olsr_ioctl_del_route6(struct rt_entry *rt)
+int olsr_ioctl_del_route6(const struct rt_entry *rt)
 {
   return add_del_route6(rt, 0);
 }
index 2091530..ff307ca 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: kernel_routes.h,v 1.10 2007/09/17 22:55:40 bernd67 Exp $
+ * $Id: kernel_routes.h,v 1.11 2007/11/11 23:10:25 bernd67 Exp $
  */
 
 #ifndef _OLSR_KERNEL_RT
 #include "routing_table.h"
 
 int
-olsr_ioctl_add_route(struct rt_entry *);
+olsr_ioctl_add_route(const struct rt_entry *);
 
 int
-olsr_ioctl_add_route6(struct rt_entry *);
+olsr_ioctl_add_route6(const struct rt_entry *);
 
 int
-olsr_ioctl_del_route(struct rt_entry *);
+olsr_ioctl_del_route(const struct rt_entry *);
 
 int
-olsr_ioctl_del_route6(struct rt_entry *);
+olsr_ioctl_del_route6(const struct rt_entry *);
 
 #endif
index 356d675..a7fc7cb 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: kernel_routes.c,v 1.30 2007/11/08 22:47:42 bernd67 Exp $
+ * $Id: kernel_routes.c,v 1.31 2007/11/11 23:10:23 bernd67 Exp $
  */
 
 #include "kernel_routes.h"
@@ -61,7 +61,7 @@ struct olsr_rtreq
        char                    buf[512];
 };
 
-static void olsr_netlink_addreq(struct olsr_rtreq *req, int type, void *data, int len)
+static void olsr_netlink_addreq(struct olsr_rtreq *req, int type, const void *data, int len)
 {
        struct rtattr *rta = (struct rtattr*)(((char*)req) + NLMSG_ALIGN(req->n.nlmsg_len));
        req->n.nlmsg_len = NLMSG_ALIGN(req->n.nlmsg_len) + RTA_LENGTH(len);
@@ -71,7 +71,7 @@ static void olsr_netlink_addreq(struct olsr_rtreq *req, int type, void *data, in
        memcpy(RTA_DATA(rta), data, len);
 }
 
-static int olsr_netlink_route(struct rt_entry *rt, olsr_u8_t family, olsr_u8_t rttable, __u16 cmd)
+static int olsr_netlink_route(const struct rt_entry *rt, olsr_u8_t family, olsr_u8_t rttable, __u16 cmd)
 {
        int ret = 0;
        struct olsr_rtreq req;
@@ -88,7 +88,7 @@ static int olsr_netlink_route(struct rt_entry *rt, olsr_u8_t family, olsr_u8_t r
                0
        };
        olsr_u32_t metric = 1;
-       struct rt_nexthop* nexthop = (RTM_NEWROUTE == cmd) ?
+       const struct rt_nexthop* nexthop = (RTM_NEWROUTE == cmd) ?
                &rt->rt_best->rtp_nexthop : &rt->rt_nexthop;
 
        memset(&req, 0, sizeof(req));
@@ -173,7 +173,7 @@ static int olsr_netlink_route(struct rt_entry *rt, olsr_u8_t family, olsr_u8_t r
  * @return negative on error
  */
 int
-olsr_ioctl_add_route(struct rt_entry *rt)
+olsr_ioctl_add_route(const struct rt_entry *rt)
 {
 #if !LINUX_POLICY_ROUTING
   struct rtentry kernel_route;
@@ -252,7 +252,7 @@ olsr_ioctl_add_route(struct rt_entry *rt)
  *@return negative on error
  */
 int
-olsr_ioctl_add_route6(struct rt_entry *rt)
+olsr_ioctl_add_route6(const struct rt_entry *rt)
 {
 #if !LINUX_POLICY_ROUTING
   struct in6_rtmsg kernel_route;
@@ -304,7 +304,7 @@ olsr_ioctl_add_route6(struct rt_entry *rt)
  *@return negative on error
  */
 int
-olsr_ioctl_del_route(struct rt_entry *rt)
+olsr_ioctl_del_route(const struct rt_entry *rt)
 {
 #if !LINUX_POLICY_ROUTING
   struct rtentry kernel_route;
@@ -371,7 +371,7 @@ olsr_ioctl_del_route(struct rt_entry *rt)
  *@return negative on error
  */
 int
-olsr_ioctl_del_route6(struct rt_entry *rt)
+olsr_ioctl_del_route6(const struct rt_entry *rt)
 {
 #if !LINUX_POLICY_ROUTING
   struct in6_rtmsg kernel_route;
index ad45059..bb12113 100644 (file)
@@ -40,7 +40,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: process_routes.c,v 1.38 2007/11/08 22:47:41 bernd67 Exp $
+ * $Id: process_routes.c,v 1.39 2007/11/11 23:10:25 bernd67 Exp $
  */
 
 #include "defs.h"
@@ -58,7 +58,7 @@
 struct export_route_entry
 {
   olsr_u8_t type;       /* AF_INET/AF_INET6 */
-  int (*function)(struct rt_entry*);
+  export_route_function function;
   struct export_route_entry *next;
 };
 
@@ -66,9 +66,10 @@ struct export_route_entry
 static struct export_route_entry *add_routes;
 static struct export_route_entry *del_routes;
 
-struct list_node add_kernel_list;
-struct list_node chg_kernel_list;
-struct list_node del_kernel_list;
+static struct list_node add_kernel_list;
+static struct list_node chg_kernel_list;
+static struct list_node del_kernel_list;
+
 
 /**
  *
@@ -80,9 +81,7 @@ olsr_u8_t
 olsr_rt_flags(const struct rt_entry *rt)
 {
   const struct rt_nexthop *nh;
-  olsr_u8_t flags;
-
-  flags = (RTF_UP);
+  olsr_u8_t flags = RTF_UP;
 
   if (rt->rt_dst.prefix_len == olsr_cnf->maxplen) {
     flags |= RTF_HOST;
@@ -97,143 +96,85 @@ olsr_rt_flags(const struct rt_entry *rt)
   return flags;
 }
 
-void 
-olsr_addroute_add_function(int (*function)(struct rt_entry*), olsr_u8_t type) 
+
+static void 
+olsr_route_add_function(struct export_route_entry **routes, export_route_function function, olsr_u8_t type)
 {
-  struct export_route_entry *tmp;
-  tmp = olsr_malloc(sizeof *tmp, "olsr_addroute_add_function");
+  struct export_route_entry *tmp = olsr_malloc(sizeof(*tmp), __func__);
   tmp->type = type;
   tmp->function = function;
-  tmp->next = add_routes;
-  add_routes = tmp;
+  tmp->next = *routes;
+  *routes = tmp;
 }
 
 void 
-olsr_delroute_add_function(int (*function) (struct rt_entry*), olsr_u8_t type)
+olsr_addroute_add_function(export_route_function function, olsr_u8_t type)
 {
-  struct export_route_entry *tmp;
-  tmp = olsr_malloc(sizeof *tmp, "olsr_delroute_add_function");
-  tmp->type = type;
-  tmp->function = function;
-  tmp->next = del_routes;
-  del_routes = tmp;
+  olsr_route_add_function(&add_routes, function, type);
 }
 
-
-int 
-olsr_addroute_remove_function(int (*function) (struct rt_entry*), olsr_u8_t type)
+void 
+olsr_delroute_add_function(export_route_function function, olsr_u8_t type)
 {
-  struct export_route_entry *tmp, *prev = NULL /* Make compiler happy */; 
-  tmp = add_routes;
-  while (tmp) 
-    {
-      if (function == tmp->function && type == tmp->type) 
-       {
-         if (tmp == add_routes) 
-           {
-             add_routes = add_routes->next;
-             free (tmp);
-             return 1;
-           }
-         else 
-           {
-             prev->next = tmp->next;
-             free (tmp);
-             return 1;
-           }
-       }
-      prev = tmp;
-      tmp = tmp->next;
-    }
-  return 0;
+  olsr_route_add_function(&del_routes, function, type);
 }
 
-int
-olsr_delroute_remove_function(int (*function) (struct rt_entry*), olsr_u8_t type)
+
+static int
+olsr_route_remove_function(struct export_route_entry **routes, export_route_function function, olsr_u8_t type)
 {
-  struct export_route_entry *tmp, *prev = NULL /* Make compiler happy */;
-  tmp = del_routes;
-  while (tmp) 
-    {
-      if (function == tmp->function && type == tmp->type) 
-       {
-         if (tmp == del_routes) 
-           {
-             del_routes = del_routes->next;
-             free (tmp);
-             return 1;
-           }
-         else 
-           {
-             prev->next = tmp->next;
-             free (tmp);
-             return 1; 
-           }
-       }
-      prev = tmp;
-      tmp = tmp->next;
+  struct export_route_entry *tmp, *prev;
+  for (tmp = *routes, prev = NULL; tmp != NULL; prev = tmp, tmp = tmp->next) {
+    if (function == tmp->function && type == tmp->type) {
+      if (prev == NULL) { /* i.e. tmp == *routes */
+        *routes = (*routes)->next;
+      } else {
+        prev->next = tmp->next;
+      }
+      free(tmp);
+      return 1; 
     }
+  }
   return 0;
 }
 
-void 
-olsr_init_export_route(void)
+int 
+olsr_addroute_remove_function(export_route_function function, olsr_u8_t type)
 {
-  olsr_addroute_add_function(&olsr_ioctl_add_route, AF_INET);
-  olsr_addroute_add_function(&olsr_ioctl_add_route6, AF_INET6);
-  olsr_delroute_add_function(&olsr_ioctl_del_route, AF_INET);
-  olsr_delroute_add_function(&olsr_ioctl_del_route6, AF_INET6);
+  return olsr_route_remove_function(&add_routes, function, type);
 }
 
 int
-olsr_export_add_route (struct rt_entry *rt) 
+olsr_delroute_remove_function(export_route_function function, olsr_u8_t type)
 {
-  int retval = 0;
-  struct export_route_entry *tmp;
-  for (tmp = add_routes; tmp; tmp = tmp->next)
-    {
-      if (tmp->type == AF_INET)
-       retval = tmp->function(rt);
-    }
-  return retval;
+  return olsr_route_remove_function(&del_routes, function, type);
 }
 
-int
-olsr_export_add_route6 (struct rt_entry *rt) 
-{
-  int retval = 0;
-  struct export_route_entry *tmp;
-  for (tmp = add_routes; tmp; tmp = tmp->next)
-    {
-      if (tmp->type == AF_INET6)
-       retval = tmp->function(rt);
-    }
-  return retval;
-}
 
-int
-olsr_export_del_route (struct rt_entry *rt) 
+void 
+olsr_init_export_route(void)
 {
-  int retval = 0;
-  struct export_route_entry *tmp;
-  for (tmp = del_routes; tmp; tmp = tmp->next)
-    {
-      if (tmp->type == AF_INET)
-       retval = tmp->function(rt);
-    }
-  return retval;
+  /* the add/chg/del kernel queues */
+  list_head_init(&add_kernel_list);
+  list_head_init(&chg_kernel_list);
+  list_head_init(&del_kernel_list);
+
+  olsr_addroute_add_function(&olsr_ioctl_add_route, AF_INET);
+  olsr_addroute_add_function(&olsr_ioctl_add_route6, AF_INET6);
+  olsr_delroute_add_function(&olsr_ioctl_del_route, AF_INET);
+  olsr_delroute_add_function(&olsr_ioctl_del_route6, AF_INET6);
 }
 
-int
-olsr_export_del_route6 (struct rt_entry *rt) 
+static int
+olsr_export_route(struct export_route_entry *routes, const struct rt_entry *rt, int ip_version)
 {
   int retval = 0;
   struct export_route_entry *tmp;
-  for (tmp = del_routes; tmp; tmp = tmp->next)
-    {
-      if (tmp->type == AF_INET6)
-       retval = tmp->function(rt);
+  for (tmp = routes; tmp != NULL; tmp = tmp->next) {
+    if (tmp->type == ip_version) {
+      retval = tmp->function(rt);
     }
+  }
   return retval;
 }
 
@@ -246,15 +187,13 @@ olsr_export_del_route6 (struct rt_entry *rt)
  *
  *@return 1
  */
-int
+void
 olsr_delete_all_kernel_routes(void)
 { 
   OLSR_PRINTF(1, "Deleting all routes...\n");
 
   olsr_bump_routingtree_version();
   olsr_update_kernel_routes();
-
-  return 1;
 }
 
 /**
@@ -293,15 +232,8 @@ olsr_enqueue_rt(struct list_node *head_node, struct rt_entry *rt)
 static void
 olsr_delete_kernel_route(struct rt_entry *rt)
 {
-  olsr_16_t error;               
-
   if(!olsr_cnf->host_emul) {
-
-    if(olsr_cnf->ip_version == AF_INET) {
-      error = olsr_export_del_route(rt);
-    } else {
-      error = olsr_export_del_route6(rt);
-    }
+    olsr_16_t error = olsr_export_route(del_routes, rt, olsr_cnf->ip_version);
 
     if(error < 0) {
       const char * const err_msg = strerror(errno);
@@ -323,16 +255,10 @@ olsr_delete_kernel_route(struct rt_entry *rt)
 static void
 olsr_add_kernel_route(struct rt_entry *rt)
 {
-  olsr_16_t error;               
 
   if(!olsr_cnf->host_emul) {
+    olsr_16_t error = olsr_export_route(add_routes, rt, olsr_cnf->ip_version);
 
-    if(olsr_cnf->ip_version == AF_INET) {
-      error = olsr_export_add_route(rt);
-    } else {
-      error = olsr_export_add_route6(rt);
-    }
-    
     if(error < 0) {
       const char * const err_msg = strerror(errno);
       OLSR_PRINTF(1, "KERN: ERROR adding %s: %s\n",
@@ -359,11 +285,8 @@ olsr_add_kernel_route(struct rt_entry *rt)
 static void
 olsr_add_kernel_routes(struct list_node *head_node)
 {
-  struct rt_entry *rt;
-
   while (!list_is_empty(head_node)) {
-
-    rt = head_node->next->data;
+    struct rt_entry *rt = head_node->next->data;
     olsr_add_kernel_route(rt);
 
     list_remove(&rt->rt_change_node);
@@ -380,7 +303,6 @@ olsr_add_kernel_routes(struct list_node *head_node)
 static void
 olsr_chg_kernel_routes(struct list_node *head_node)
 {
-  struct rt_entry *rt;
   struct list_node *node;
 
   if (list_is_empty(head_node)) {
@@ -393,8 +315,7 @@ olsr_chg_kernel_routes(struct list_node *head_node)
    * such that nexthop routes are deleted last.
    */
   for (node = head_node->prev; head_node != node; node = node->prev) {
-
-    rt = node->data;
+    struct rt_entry *rt = node->data;
     olsr_delete_kernel_route(rt);
   }
 
@@ -404,8 +325,7 @@ olsr_chg_kernel_routes(struct list_node *head_node)
    * such that nexthop routes are added first.
    */
   while (!list_is_empty(head_node)) {
-
-    rt = head_node->next->data;
+    struct rt_entry *rt = head_node->next->data;
     olsr_add_kernel_route(rt);
 
     list_remove(&rt->rt_change_node);
@@ -422,11 +342,8 @@ olsr_chg_kernel_routes(struct list_node *head_node)
 static void
 olsr_del_kernel_routes(struct list_node *head_node)
 {
-  struct rt_entry *rt;
-
   while (!list_is_empty(head_node)) {
-
-    rt = head_node->prev->data;
+    struct rt_entry *rt = head_node->prev->data;
     olsr_delete_kernel_route(rt);
 
     list_remove(&rt->rt_change_node);
@@ -446,7 +363,7 @@ olsr_delete_outdated_routes(struct rt_entry *rt)
   struct avl_node *rtp_tree_node, *next_rtp_tree_node;
 
   for (rtp_tree_node = avl_walk_first(&rt->rt_path_tree);
-       rtp_tree_node;
+       rtp_tree_node != NULL;
        rtp_tree_node = next_rtp_tree_node) {
 
     /*
index 535fc7e..ab34891 100644 (file)
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: process_routes.h,v 1.12 2007/09/16 21:14:25 bernd67 Exp $
+ * $Id: process_routes.h,v 1.13 2007/11/11 23:10:25 bernd67 Exp $
  */
 
-#include "routing_table.h"
-
 #ifndef _OLSR_PROCESS_RT
 #define _OLSR_PROCESS_RT
 
+#include "routing_table.h"
 #include <sys/ioctl.h>
 
-extern struct list_node add_kernel_list;
-extern struct list_node chg_kernel_list;
-extern struct list_node del_kernel_list;
+typedef int (*export_route_function)(const struct rt_entry*);
 
 void
 olsr_init_export_route(void);
 
 void
-olsr_addroute_add_function(int (*)(struct rt_entry*), olsr_u8_t);
+olsr_addroute_add_function(export_route_function, olsr_u8_t);
 
 int
-olsr_addroute_remove_function(int (*)(struct rt_entry*), olsr_u8_t);
+olsr_addroute_remove_function(export_route_function, olsr_u8_t);
 
 void
-olsr_delroute_add_function(int (*)(struct rt_entry*), olsr_u8_t);
-
-int
-olsr_delroute_remove_function(int (*)(struct rt_entry*), olsr_u8_t);
-
-int
-olsr_export_add_route (struct rt_entry*); 
+olsr_delroute_add_function(export_route_function, olsr_u8_t);
 
 int
-olsr_export_del_route (struct rt_entry*); 
-
-int
-olsr_export_add_route6 (struct rt_entry*); 
-
-int
-olsr_export_del_route6 (struct rt_entry*); 
+olsr_delroute_remove_function(export_route_function, olsr_u8_t);
 
 void
 olsr_update_kernel_routes(void);
 
-int
+void
 olsr_delete_all_kernel_routes(void);
 
 olsr_u8_t
index 77d0627..f163d6b 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: routing_table.c,v 1.33 2007/11/08 22:47:41 bernd67 Exp $
+ * $Id: routing_table.c,v 1.34 2007/11/11 23:10:24 bernd67 Exp $
  */
 
 #include "defs.h"
@@ -68,7 +68,7 @@ unsigned int routingtree_version;
 unsigned int
 olsr_bump_routingtree_version(void)
 {
-  return(routingtree_version++);
+  return routingtree_version++;
 }
 
 /**
@@ -86,12 +86,14 @@ avl_comp_ipv4_prefix (const void *prefix1, const void *prefix2)
 {       
   const struct olsr_ip_prefix *pfx1 = prefix1;
   const struct olsr_ip_prefix *pfx2 = prefix2;
+  const olsr_u32_t addr1 = ntohl(pfx1->prefix.v4.s_addr);
+  const olsr_u32_t addr2 = ntohl(pfx2->prefix.v4.s_addr);
 
   /* prefix */
-  if (pfx1->prefix.v4.s_addr < pfx2->prefix.v4.s_addr) {
+  if (addr1 < addr2) {
     return -1;
   }
-  if (pfx1->prefix.v4.s_addr > pfx2->prefix.v4.s_addr) {
+  if (addr1 > addr2) {
     return +1;
   }
 
@@ -142,19 +144,12 @@ avl_comp_ipv6_prefix (const void *prefix1, const void *prefix2)
 /**
  * Initialize the routingtree and kernel change queues.
  */
-int
+void
 olsr_init_routing_table(void)
 {
   /* the routing tree */
   avl_init(&routingtree, avl_comp_prefix_default);
   routingtree_version = 0;
-
-  /* the add/chg/del kernel queues */
-  list_head_init(&add_kernel_list);
-  list_head_init(&chg_kernel_list);
-  list_head_init(&del_kernel_list);
-
-  return 1;
 }
 
 /**
@@ -176,7 +171,7 @@ olsr_lookup_routing_table(const union olsr_ip_addr *dst)
 
   rt_tree_node = avl_find(&routingtree, &prefix);
 
-  return (rt_tree_node ? rt_tree_node->data : NULL);
+  return rt_tree_node ? rt_tree_node->data : NULL;
 }
 
 /**
@@ -214,15 +209,12 @@ olsr_update_routing_entry(struct rt_path *rtp, union olsr_ip_addr *gateway,
 static struct rt_entry *
 olsr_alloc_rt_entry(struct olsr_ip_prefix *prefix)
 {
-  struct rt_entry *rt;
-
-  rt = olsr_malloc(sizeof(struct rt_entry), __FUNCTION__);
-
+  struct rt_entry *rt = olsr_malloc(sizeof(struct rt_entry), __FUNCTION__);
   if (!rt) {
     return NULL;
   }
 
-  memset(rt, 0, sizeof(struct rt_entry));
+  memset(rt, 0, sizeof(*rt));
   
   /* Mark this entry as fresh (see process_routes.c:512) */
   rt->rt_nexthop.iif_index = -1;
@@ -248,15 +240,13 @@ static struct rt_path *
 olsr_alloc_rt_path(struct rt_entry *rt,
                    union olsr_ip_addr *originator)
 {
-  struct rt_path *rtp;
-
-  rtp = olsr_malloc(sizeof(struct rt_path), __FUNCTION__);
+  struct rt_path *rtp = olsr_malloc(sizeof(struct rt_path), __FUNCTION__);
 
   if (!rtp) {
     return NULL;
   }
 
-  memset(rtp, 0, sizeof(struct rt_path));
+  memset(rtp, 0, sizeof(*rtp));
 
   //COPY_IP(&rtp->rtp_originator, originator);
   rtp->rtp_originator = *originator;
@@ -278,7 +268,7 @@ olsr_alloc_rt_path(struct rt_entry *rt,
  * Check if there is an interface or gateway change.
  */
 olsr_bool
-olsr_nh_change(struct rt_nexthop *nh1, struct rt_nexthop *nh2)
+olsr_nh_change(const struct rt_nexthop *nh1, const struct rt_nexthop *nh2)
 {
   if (!ipequal(&nh1->gateway, &nh2->gateway) ||
       (nh1->iif_index != nh2->iif_index)) {
@@ -312,7 +302,7 @@ olsr_get_nh(const struct rt_entry *rt)
  * than the second one, FALSE otherwise.
  */
 static olsr_bool
-olsr_cmp_rtp(struct rt_path *rtp1, struct rt_path *rtp2)
+olsr_cmp_rtp(const struct rt_path *rtp1, const struct rt_path *rtp2)
 {
    /* etx comes first */
     if (rtp1->rtp_metric.etx < rtp2->rtp_metric.etx) {
@@ -342,9 +332,9 @@ olsr_cmp_rtp(struct rt_path *rtp1, struct rt_path *rtp2)
  * than the second one, FALSE otherwise.
  */
 olsr_bool
-olsr_cmp_rt(struct rt_entry *rt1, struct rt_entry *rt2)
+olsr_cmp_rt(const struct rt_entry *rt1, const struct rt_entry *rt2)
 {
-  return(olsr_cmp_rtp(rt1->rt_best, rt2->rt_best));
+  return olsr_cmp_rtp(rt1->rt_best, rt2->rt_best);
 }
 
 /**
@@ -354,11 +344,8 @@ olsr_cmp_rt(struct rt_entry *rt1, struct rt_entry *rt2)
 void
 olsr_rt_best(struct rt_entry *rt)
 {
-  struct rt_path *rtp;
-  struct avl_node *node;
-
   /* grab the first entry */
-  node = avl_walk_first(&rt->rt_path_tree);
+  struct avl_node *node = avl_walk_first(&rt->rt_path_tree);
 
   assert(node != 0); /* should not happen */
 
@@ -366,8 +353,7 @@ olsr_rt_best(struct rt_entry *rt)
 
   /* walk all remaining originator entries */
   while ((node = avl_walk_next(node))) {
-
-    rtp = node->data;
+    struct rt_path *rtp = node->data;
 
     if (olsr_cmp_rtp(rtp, rt->rt_best)) {
       rt->rt_best = rtp;
@@ -465,7 +451,7 @@ olsr_insert_routing_table(union olsr_ip_addr *dst,
  * format a route entry into a buffer
  */
 char *
-olsr_rt_to_string(struct rt_entry *rt)
+olsr_rt_to_string(const struct rt_entry *rt)
 {
   static char buff[128];
   struct ipaddr_str prefixstr, gwstr;
@@ -483,7 +469,7 @@ olsr_rt_to_string(struct rt_entry *rt)
  * format a route path into a buffer
  */
 char *
-olsr_rtp_to_string(struct rt_path *rtp)
+olsr_rtp_to_string(const struct rt_path *rtp)
 {
   static char buff[128];
   struct ipaddr_str prefixstr, origstr, gwstr;
@@ -510,40 +496,31 @@ olsr_rtp_to_string(struct rt_path *rtp)
 void
 olsr_calculate_hna_routes(void)
 {
-  int index, plen;
-  struct rt_entry *rt;
+  int idx;
 
 #ifdef DEBUG
   OLSR_PRINTF(3, "Calculating HNA routes\n");
 #endif
 
-  for(index=0;index<HASHSIZE;index++)
-  {
+  for (idx = 0; idx < HASHSIZE; idx++) {
     struct hna_entry *tmp_hna;
     /* All entries */
-    for(tmp_hna = hna_set[index].next;
-        tmp_hna != &hna_set[index];
-        tmp_hna = tmp_hna->next)
-    {
+    for (tmp_hna = hna_set[idx].next; tmp_hna != &hna_set[idx]; tmp_hna = tmp_hna->next) {
       struct hna_net *tmp_net;
       /* All networks */
-      for(tmp_net = tmp_hna->networks.next;
-          tmp_net != &tmp_hna->networks;
-          tmp_net = tmp_net->next) {
-
+      for (tmp_net = tmp_hna->networks.next; tmp_net != &tmp_hna->networks; tmp_net = tmp_net->next) {
         /* If no route to gateway - skip */
-        if((rt = olsr_lookup_routing_table(&tmp_hna->A_gateway_addr)) == NULL)
-          continue;
-
-        /* update if better */
-        plen = olsr_get_hna_prefix_len(tmp_net);
-        olsr_insert_routing_table(&tmp_net->A_network_addr, plen,
-                                  &tmp_hna->A_gateway_addr,
-                                  &rt->rt_best->rtp_nexthop.gateway,
-                                  rt->rt_best->rtp_nexthop.iif_index,
-                                  rt->rt_best->rtp_metric.hops,
-                                  rt->rt_best->rtp_metric.etx);
-
+        struct rt_entry *rt = olsr_lookup_routing_table(&tmp_hna->A_gateway_addr);
+        if (rt != NULL) {
+          /* update if better */
+          olsr_insert_routing_table(&tmp_net->A_network_addr,
+                                    olsr_get_hna_prefix_len(tmp_net),
+                                    &tmp_hna->A_gateway_addr,
+                                    &rt->rt_best->rtp_nexthop.gateway,
+                                    rt->rt_best->rtp_nexthop.iif_index,
+                                    rt->rt_best->rtp_metric.hops,
+                                    rt->rt_best->rtp_metric.etx);
+        }
       }
     }
   }
@@ -557,18 +534,18 @@ olsr_calculate_hna_routes(void)
  *
  */
 void
-olsr_print_routing_table(struct avl_tree *tree)
+olsr_print_routing_table(const struct avl_tree *tree)
 {
-  struct avl_node *rt_tree_node;
+  const struct avl_node *rt_tree_node;
 
   printf("ROUTING TABLE\n");
 
-  for (rt_tree_node = avl_walk_first(tree);
-       rt_tree_node;
-       rt_tree_node = avl_walk_next(rt_tree_node)) {
-    struct avl_node *rtp_tree_node;
+  for (rt_tree_node = avl_walk_first_c(tree);
+       rt_tree_node != NULL;
+       rt_tree_node = avl_walk_next_c(rt_tree_node)) {
+    const struct avl_node *rtp_tree_node;
     struct ipaddr_str prefixstr, origstr, gwstr;
-    struct rt_entry * const rt = rt_tree_node->data;
+    const struct rt_entry * const rt = rt_tree_node->data;
 
     /* first the route entry */
     printf("%s/%u, via %s, best-originator %s\n",
@@ -578,10 +555,9 @@ olsr_print_routing_table(struct avl_tree *tree)
            olsr_ip_to_string(&gwstr, &rt->rt_best->rtp_originator));
 
     /* walk the per-originator path tree of routes */
-    for (rtp_tree_node = avl_walk_first(&rt->rt_path_tree);
-         rtp_tree_node;
-         rtp_tree_node = avl_walk_next(rtp_tree_node)) {
-
+    for (rtp_tree_node = avl_walk_first_c(&rt->rt_path_tree);
+         rtp_tree_node != NULL;
+         rtp_tree_node = avl_walk_next_c(rtp_tree_node)) {
       const struct rt_path * const rtp = rtp_tree_node->data;
       printf("\tfrom %s, etx %.3f, metric %u, via %s, %s, v %u\n",
              olsr_ip_to_string(&origstr, &rtp->rtp_originator),
index 4214f21..8c84e71 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: routing_table.h,v 1.24 2007/11/08 22:47:41 bernd67 Exp $
+ * $Id: routing_table.h,v 1.25 2007/11/11 23:10:24 bernd67 Exp $
  */
 
 #ifndef _OLSR_ROUTING_TABLE
@@ -144,7 +144,7 @@ union olsr_kernel_route
 extern struct avl_tree routingtree;
 extern unsigned int routingtree_version;
 
-int
+void
 olsr_init_routing_table(void);
 
 unsigned int olsr_bump_routingtree_version(void);
@@ -153,13 +153,13 @@ int avl_comp_ipv4_prefix (const void *, const void *);
 int avl_comp_ipv6_prefix (const void *, const void *);
 
 void olsr_rt_best(struct rt_entry *);
-olsr_bool olsr_nh_change(struct rt_nexthop *, struct rt_nexthop *);
-olsr_bool olsr_cmp_rt(struct rt_entry *, struct rt_entry *);
+olsr_bool olsr_nh_change(const struct rt_nexthop *, const struct rt_nexthop *);
+olsr_bool olsr_cmp_rt(const struct rt_entry *, const struct rt_entry *);
 
 void olsr_calculate_hna_routes(void);
-char *olsr_rt_to_string(struct rt_entry *);
-char *olsr_rtp_to_string(struct rt_path *);
-void olsr_print_routing_table(struct avl_tree *);
+char *olsr_rt_to_string(const struct rt_entry *);
+char *olsr_rtp_to_string(const struct rt_path *);
+void olsr_print_routing_table(const struct avl_tree *);
 
 const struct rt_nexthop * olsr_get_nh(const struct rt_entry *);
 
index 724f0d9..e60307f 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: kernel_routes.c,v 1.24 2007/11/08 23:23:13 bernd67 Exp $
+ * $Id: kernel_routes.c,v 1.25 2007/11/11 23:10:22 bernd67 Exp $
  */
 
 #include <stdio.h>
@@ -60,7 +60,7 @@ char *StrError(unsigned int ErrNo);
  *
  *@return negative on error
  */
-int olsr_ioctl_add_route(struct rt_entry *rt)
+int olsr_ioctl_add_route(const struct rt_entry *rt)
 {
   MIB_IPFORWARDROW Row;
   union olsr_ip_addr mask;
@@ -127,7 +127,7 @@ int olsr_ioctl_add_route(struct rt_entry *rt)
 
 // XXX - to be implemented
 
-int olsr_ioctl_add_route6(struct rt_entry *rt __attribute__((unused)))
+int olsr_ioctl_add_route6(const struct rt_entry *rt __attribute__((unused)))
 {
   return 0;
 }
@@ -139,7 +139,7 @@ int olsr_ioctl_add_route6(struct rt_entry *rt __attribute__((unused)))
  *
  *@return negative on error
  */
-int olsr_ioctl_del_route(struct rt_entry *rt)
+int olsr_ioctl_del_route(const struct rt_entry *rt)
 {
   MIB_IPFORWARDROW Row;
   union olsr_ip_addr mask;
@@ -194,7 +194,7 @@ int olsr_ioctl_del_route(struct rt_entry *rt)
 
 // XXX - to be implemented
 
-int olsr_ioctl_del_route6(struct rt_entry *rt __attribute__((unused)))
+int olsr_ioctl_del_route6(const struct rt_entry *rt __attribute__((unused)))
 {
   return 0;
 }