inline small functions
authorBernd Petrovitsch <bernd@firmix.at>
Sun, 1 Jun 2008 22:35:41 +0000 (00:35 +0200)
committerBernd Petrovitsch <bernd@firmix.at>
Sun, 1 Jun 2008 22:35:41 +0000 (00:35 +0200)
1  2 
src/routing_table.c
src/routing_table.h

diff --combined src/routing_table.c
  #include "olsr.h"
  #include "link_set.h"
  #include "common/avl.h"
 -#include "lq_route.h"
 +#include "olsr_spf.h"
  #include "net_olsr.h"
  
  #include <assert.h>
  
 +/* Cookies */
 +struct olsr_cookie_info *rt_mem_cookie = NULL;
 +struct olsr_cookie_info *rtp_mem_cookie = NULL;
 +
  /*
   * Sven-Ola: if the current internet gateway is switched, the
   * NAT connection info is lost for any active TCP/UDP session.
@@@ -76,20 -72,6 +76,6 @@@ struct avl_tree routingtree
   */
  unsigned int routingtree_version;
  
- /**
-  * Bump the version number of the routing tree.
-  *
-  * After route-insertion compare the version number of the routes
-  * against the version number of the table.
-  * This is a lightweight detection if a node or prefix went away,
-  * rather than brute force old vs. new rt_entry comparision.
-  */
- unsigned int
- olsr_bump_routingtree_version(void)
- {
-   return routingtree_version++;
- }
  /**
   * avl_comp_ipv4_prefix
   *
@@@ -145,7 -127,7 +131,7 @@@ avl_comp_ipv6_prefix (const void *prefi
    const struct olsr_ip_prefix *pfx2 = prefix2;
  
    /* prefix */
-   res = memcmp(&pfx1->prefix.v6, &pfx2->prefix.v6, 16);
+   res = ip6equal(&pfx1->prefix.v6, &pfx2->prefix.v6);
    if (res != 0) {
      return res;
    } 
  void
  olsr_init_routing_table(void)
  {
 +  OLSR_PRINTF(5, "RIB: init routing tree\n");
 +
    /* the routing tree */
    avl_init(&routingtree, avl_comp_prefix_default);
    routingtree_version = 0;
 +
 +  /*
 +   * Get some cookies for memory stats and memory recycling.
 +   */
 +  rt_mem_cookie = olsr_alloc_cookie("rt_entry", OLSR_COOKIE_TYPE_MEMORY);
 +  olsr_cookie_set_memory_size(rt_mem_cookie, sizeof(struct rt_entry));
 +
 +  rtp_mem_cookie = olsr_alloc_cookie("rt_path", OLSR_COOKIE_TYPE_MEMORY);
 +  olsr_cookie_set_memory_size(rtp_mem_cookie, sizeof(struct rt_path));
  }
  
  /**
@@@ -231,7 -202,7 +217,7 @@@ olsr_update_rt_path(struct rt_path *rtp
  static struct rt_entry *
  olsr_alloc_rt_entry(struct olsr_ip_prefix *prefix)
  {
 -  struct rt_entry *rt = olsr_malloc(sizeof(struct rt_entry), __FUNCTION__);
 +  struct rt_entry *rt = olsr_cookie_malloc(rt_mem_cookie);
    if (!rt) {
      return NULL;
    }
@@@ -260,7 -231,7 +246,7 @@@ static struct rt_path 
  olsr_alloc_rt_path(struct tc_entry *tc,
                     struct olsr_ip_prefix *prefix, olsr_u8_t origin)
  {
 -  struct rt_path *rtp = olsr_malloc(sizeof(struct rt_path), __FUNCTION__);
 +  struct rt_path *rtp = olsr_cookie_malloc(rtp_mem_cookie);
  
    if (!rtp) {
      return NULL;
@@@ -371,32 -342,10 +357,10 @@@ olsr_delete_rt_path(struct rt_path *rtp
      current_inetgw = NULL;
    }
  
 -  free(rtp);
 +  olsr_cookie_free(rtp_mem_cookie, rtp);
  }
  
- /**
-  * Check if there is an interface or gateway change.
-  */
- olsr_bool
- 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)) {
-     return OLSR_TRUE;
-   }
-   return OLSR_FALSE;
- }
- /**
-  * Check if there is a hopcount change.
-  */
- olsr_bool
- olsr_hopcount_change(const struct rt_metric *met1, const struct rt_metric *met2)
- {
-   return (met1->hops != met2->hops);
- }
+ #if 0
  /**
   * Depending if flat_metric is configured and the kernel fib operation
   * return the hopcount metric of a route.
@@@ -412,24 -361,7 +376,7 @@@ olsr_fib_metric(const struct rt_metric 
    }
    return RT_METRIC_DEFAULT;
  }
- /**
-  * depending on the operation (add/chg/del) the nexthop
-  * field from the route entry or best route path shall be used.
-  */
- const struct rt_nexthop *
- olsr_get_nh(const struct rt_entry *rt)
- {
-   if(rt->rt_best) {
-     /* this is a route add/chg - grab nexthop from the best route. */
-     return &rt->rt_best->rtp_nexthop;
-   } 
-   
-   /* this is a route deletion - all routes are gone. */
-   return &rt->rt_nexthop;
- }
+ #endif
  
  /**
   * compare two route paths.
@@@ -458,8 -390,7 +405,7 @@@ olsr_cmp_rtp(const struct rt_path *rtp1
  
      /* originator (which is guaranteed to be unique) is final tie breaker */
      if ((rtp1->rtp_metric.hops == rtp2->rtp_metric.hops) &&
-         (memcmp(&rtp1->rtp_originator, &rtp2->rtp_originator,
-                 olsr_cnf->ipsize) == -1)) {
+         (ipcmp(&rtp1->rtp_originator, &rtp2->rtp_originator) < 0)) {
        return OLSR_TRUE;
      }
  
  olsr_bool
  olsr_cmp_rt(const struct rt_entry *rt1, const struct rt_entry *rt2)
  {
-   return olsr_cmp_rtp(rt1->rt_best, rt2->rt_best, NULL);
+     return olsr_cmp_rtp(rt1->rt_best, rt2->rt_best, NULL);
  }
  
  /**
diff --combined src/routing_table.h
@@@ -49,7 -49,6 +49,7 @@@
  #include <net/route.h>
  #include "hna_set.h"
  #include "link_set.h"
 +#include "olsr_cookie.h"
  #include "common/avl.h"
  #include "common/list.h"
  
@@@ -203,27 -202,58 +203,59 @@@ union olsr_kernel_rout
  
  extern struct avl_tree routingtree;
  extern unsigned int routingtree_version;
 +extern struct olsr_cookie_info *rt_mem_cookie;
  
  void
  olsr_init_routing_table(void);
  
- unsigned int olsr_bump_routingtree_version(void);
+ /**
+  * Bump the version number of the routing tree.
+  *
+  * After route-insertion compare the version number of the routes
+  * against the version number of the table.
+  * This is a lightweight detection if a node or prefix went away,
+  * rather than brute force old vs. new rt_entry comparision.
+  */
+ static INLINE void olsr_bump_routingtree_version(void) { routingtree_version++; }
  
  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(const struct rt_nexthop *, const struct rt_nexthop *);
- olsr_bool olsr_hopcount_change(const struct rt_metric *, const struct rt_metric *);
+ /**
+  * Check if there is an interface or gateway change.
+  */
+ static INLINE olsr_bool olsr_nh_change(const struct rt_nexthop *nh1, const struct rt_nexthop *nh2) {
+     return !ipequal(&nh1->gateway, &nh2->gateway) || nh1->iif_index != nh2->iif_index;
+ }
+ /**
+  * Check if there is a hopcount change.
+  */
+ static INLINE olsr_bool olsr_hopcount_change(const struct rt_metric *met1, const struct rt_metric *met2) { return met1->hops != met2->hops; }
  olsr_bool olsr_cmp_rt(const struct rt_entry *, const struct rt_entry *);
+ #if 0
  olsr_u8_t olsr_fib_metric(const struct rt_metric *);
+ #endif
  
  char *olsr_rt_to_string(const struct rt_entry *);
  char *olsr_rtp_to_string(const struct rt_path *);
  void olsr_print_routing_table(struct avl_tree *);
  
- const struct rt_nexthop * olsr_get_nh(const struct rt_entry *);
+ /**
+  * depending on the operation (add/chg/del) the nexthop
+  * field from the route entry or best route path shall be used.
+  */
+ static INLINE const struct rt_nexthop *olsr_get_nh(const struct rt_entry *rt) {
+   return rt->rt_best != NULL
+     /* this is a route add/chg - grab nexthop from the best route. */
+     ? &rt->rt_best->rtp_nexthop
+     /* this is a route deletion - all routes are gone. */
+     : &rt->rt_nexthop;
+ }
  
  /* rt_path manipulation */
  struct rt_path *olsr_insert_routing_table(union olsr_ip_addr *, int, union olsr_ip_addr *, int);