Code cleanup
authorHenning Rogge <henning.rogge@fkie.fraunhofer.de>
Wed, 17 Mar 2010 07:42:35 +0000 (08:42 +0100)
committerHenning Rogge <henning.rogge@fkie.fraunhofer.de>
Wed, 17 Mar 2010 07:42:35 +0000 (08:42 +0100)
src/ipcalc.c
src/ipcalc.h
src/linux/kernel_routes_nl.c
src/linux/kernel_tunnel.c
src/lq_packet.c
src/lq_plugin.c
src/lq_plugin.h
src/lq_plugin_default_ff.c
src/lq_plugin_default_ffeth.c
src/lq_plugin_default_float.c
src/lq_plugin_default_fpm.c

index 0f22bcd..9f4cc71 100644 (file)
@@ -224,13 +224,15 @@ ip_in_net(const union olsr_ip_addr *ipaddr, const struct olsr_ip_prefix *net)
 }
 
 bool is_prefix_inetgw(const struct olsr_ip_prefix *prefix) {
-  if (ip_prefix_is_v4_inetgw(prefix)) {
+  if (olsr_cnf->ip_version == AF_INET && ip_prefix_is_v4_inetgw(prefix)) {
     return true;
   }
-  if (ip_prefix_is_v6_inetgw(prefix)) {
-    return true;
+  if (olsr_cnf->ip_version == AF_INET6) {
+    if (ip_prefix_is_v6_inetgw(prefix) || ip_prefix_is_mappedv4_inetgw(prefix)) {
+      return true;
+    }
   }
-  return ip_prefix_is_mappedv4_inetgw(prefix);
+  return false;
 }
 
 /*
index f9f65a4..01af282 100644 (file)
@@ -200,19 +200,19 @@ ip_prefix_is_mappedv4(const struct olsr_ip_prefix *prefix) {
 
 static INLINE bool
 ip_prefix_is_mappedv4_inetgw(const struct olsr_ip_prefix *prefix) {
-  return olsr_cnf->ip_version == AF_INET6 && prefix->prefix_len == ipv6_mappedv4_route.prefix_len
+  return prefix->prefix_len == ipv6_mappedv4_route.prefix_len
       && memcmp(prefix, &ipv6_mappedv4_route, ipv6_mappedv4_route.prefix_len / 8) == 0;
 }
 
 static INLINE bool
 ip_prefix_is_v4_inetgw(const struct olsr_ip_prefix *prefix) {
-  return olsr_cnf->ip_version == AF_INET && prefix->prefix_len == ipv4_internet_route.prefix_len
+  return prefix->prefix_len == ipv4_internet_route.prefix_len
       && prefix->prefix.v4.s_addr == ipv4_internet_route.prefix.v4.s_addr;
 }
 
 static INLINE bool
 ip_prefix_is_v6_inetgw(const struct olsr_ip_prefix *prefix) {
-  return olsr_cnf->ip_version == AF_INET6 && prefix->prefix_len == ipv6_internet_route.prefix_len
+  return prefix->prefix_len == ipv6_internet_route.prefix_len
       && memcmp(prefix, &ipv6_internet_route, ipv6_internet_route.prefix_len/8) == 0;
 }
 
index 12a8e86..28a9818 100644 (file)
@@ -430,8 +430,9 @@ static int olsr_new_netlink_route(int family, int rttable, int if_index, int met
 }
 
 void olsr_os_niit_6to4_route(const struct olsr_ip_prefix *dst_v6, bool set) {
-  /* TODO: in welche Table kommen die NIIT-Routen ? ne eigene ? */
-  if (olsr_new_netlink_route(AF_INET6, olsr_cnf->rt_table, olsr_cnf->niit6to4_if_index,
+  if (olsr_new_netlink_route(AF_INET6,
+      ip_prefix_is_mappedv4_inetgw(dst_v6) ? olsr_cnf->rt_table_default : olsr_cnf->rt_table,
+      olsr_cnf->niit6to4_if_index,
       RT_METRIC_DEFAULT, olsr_cnf->rt_proto, NULL, NULL, dst_v6, set, false)) {
     olsr_syslog(OLSR_LOG_ERR, ". error while %s static niit route to %s",
         set ? "setting" : "removing", olsr_ip_prefix_to_string(dst_v6));
@@ -439,8 +440,9 @@ void olsr_os_niit_6to4_route(const struct olsr_ip_prefix *dst_v6, bool set) {
 }
 
 void olsr_os_niit_4to6_route(const struct olsr_ip_prefix *dst_v4, bool set) {
-  /* TODO: in welche Table kommen die NIIT-Routen ? ne eigene ? */
-  if (olsr_new_netlink_route(AF_INET, olsr_cnf->rt_table, olsr_cnf->niit4to6_if_index,
+  if (olsr_new_netlink_route(AF_INET,
+      ip_prefix_is_v4_inetgw(dst_v4) ? olsr_cnf->rt_table_default : olsr_cnf->rt_table,
+      olsr_cnf->niit4to6_if_index,
       RT_METRIC_DEFAULT, olsr_cnf->rt_proto, NULL, NULL, dst_v4, set, false)) {
     olsr_syslog(OLSR_LOG_ERR, ". error while %s niit route to %s",
         set ? "setting" : "removing", olsr_ip_prefix_to_string(dst_v4));
index ee5d562..4c5c9fc 100644 (file)
@@ -233,8 +233,18 @@ struct olsr_iptunnel_entry *olsr_os_add_ipip_tunnel(union olsr_ip_addr *target,
 fprintf(stderr, "Cannot create tunnel %s to %s\n", name, olsr_ip_to_string(&buf, target));
       return NULL;
     }
-    // TODO: fehler bei setstate abfangen ?
-    olsr_if_set_state(name, true);
+
+    if (olsr_if_set_state(name, true)) {
+      if (olsr_cnf->ip_version == AF_INET) {
+        os_ip4_tunnel(name, NULL);
+      }
+      else {
+  #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
+        os_ip6_tunnel(name, NULL);
+  #endif
+      }
+      return NULL;
+    }
 
     t = olsr_cookie_malloc(tunnel_cookie);
     memcpy(&t->target, target, sizeof(*target));
index 86eb7c8..34606f9 100644 (file)
@@ -368,7 +368,7 @@ serialize_lq_hello(struct lq_hello_message *lq_hello, struct interface *outif)
         is_first = true;
         for (neigh = lq_hello->neigh; neigh != NULL; neigh = neigh->next) {
           if (0 == i && 0 == j)
-            expected_size += olsr_cnf->ipsize + 4;
+            expected_size += olsr_cnf->ipsize + olsr_sizeof_hello_lqdata();
           if (neigh->neigh_type == i && neigh->link_type == LINK_ORDER[j]) {
             if (is_first) {
               expected_size += sizeof(struct lq_hello_info_header);
@@ -403,7 +403,7 @@ serialize_lq_hello(struct lq_hello_message *lq_hello, struct interface *outif)
         // we need space for an IP address plus link quality
         // information
 
-        req = olsr_cnf->ipsize + 4;
+        req = olsr_cnf->ipsize + olsr_sizeof_hello_lqdata();
 
         // no, we also need space for an info header, as this is the
         // first neighbor with the current neighor type and link type
@@ -554,8 +554,7 @@ serialize_lq_tc(struct lq_tc_message *lq_tc, struct interface *outif)
    */
   if (0 < net_output_pending(outif)) {
     for (neigh = lq_tc->neigh; neigh != NULL; neigh = neigh->next) {
-      // TODO sizeof_tc_lq function required
-      expected_size += olsr_cnf->ipsize + 4;
+      expected_size += olsr_cnf->ipsize + olsr_sizeof_tc_lqdata();
     }
   }
 
@@ -570,9 +569,7 @@ serialize_lq_tc(struct lq_tc_message *lq_tc, struct interface *outif)
     // information
 
     // force signed comparison
-
-    // TODO sizeof_tc_lq function required
-    if ((int)(size + olsr_cnf->ipsize + 4) > rem) {
+    if ((int)(size + olsr_cnf->ipsize + olsr_sizeof_tc_lqdata()) > rem) {
       head->lower_border = left_border_flag;
       head->upper_border = calculate_border_flag(last_ip, &neigh->address);
       left_border_flag = head->upper_border;
index bdf467b..1814b66 100644 (file)
 struct avl_tree lq_handler_tree;
 struct lq_handler *active_lq_handler = NULL;
 
+/**
+ * case-insensitive string comparator for avl-trees
+ * @param str1
+ * @param str2
+ * @return
+ */
 int
 avl_strcasecmp(const void *str1, const void *str2)
 {
   return strcasecmp(str1, str2);
 }
 
+/**
+ * Activate a LQ handler
+ * @param name
+ */
+static void
+activate_lq_handler(const char *name)
+{
+  struct lq_handler_node *node;
+
+  node = (struct lq_handler_node *)avl_find(&lq_handler_tree, name);
+  if (node == NULL) {
+    OLSR_PRINTF(1, "Error, unknown lq_handler '%s'\n", name);
+    olsr_exit("", 1);
+  }
+
+  OLSR_PRINTF(1, "Using '%s' algorithm for lq calculation.\n", name);
+  active_lq_handler = node->handler;
+  active_lq_handler->initialize();
+}
+
+/**
+ * Initialize LQ handler
+ */
 void
 init_lq_handler_tree(void)
 {
@@ -81,7 +110,7 @@ init_lq_handler_tree(void)
   }
 }
 
-/*
+/**
  * set_lq_handler
  *
  * this function is used by routing metric plugins to activate their link
@@ -108,23 +137,7 @@ register_lq_handler(struct lq_handler *handler, const char *name)
   avl_insert(&lq_handler_tree, &node->node, false);
 }
 
-void
-activate_lq_handler(const char *name)
-{
-  struct lq_handler_node *node;
-
-  node = (struct lq_handler_node *)avl_find(&lq_handler_tree, name);
-  if (node == NULL) {
-    OLSR_PRINTF(1, "Error, unknown lq_handler '%s'\n", name);
-    olsr_exit("", 1);
-  }
-
-  OLSR_PRINTF(1, "Using '%s' algorithm for lq calculation.\n", name);
-  active_lq_handler = node->handler;
-  active_lq_handler->initialize();
-}
-
-/*
+/**
  * olsr_calc_tc_cost
  *
  * this function calculates the linkcost of a tc_edge_entry
@@ -139,7 +152,7 @@ olsr_calc_tc_cost(const struct tc_edge_entry * tc_edge)
   return active_lq_handler->calc_tc_cost(tc_edge->linkquality);
 }
 
-/*
+/**
  * olsr_serialize_hello_lq_pair
  *
  * this function converts the lq information of a lq_hello_neighbor into binary package
@@ -156,7 +169,7 @@ olsr_serialize_hello_lq_pair(unsigned char *buff, struct lq_hello_neighbor *neig
   return active_lq_handler->serialize_hello_lq(buff, neigh->linkquality);
 }
 
-/*
+/**
  * olsr_deserialize_hello_lq_pair
  *
  * this function reads the lq information of a binary package into a hello_neighbor
@@ -173,7 +186,7 @@ olsr_deserialize_hello_lq_pair(const uint8_t ** curr, struct hello_neighbor *nei
   neigh->cost = active_lq_handler->calc_hello_cost(neigh->linkquality);
 }
 
-/*
+/**
  * olsr_serialize_tc_lq_pair
  *
  * this function converts the lq information of a olsr_serialize_tc_lq_pair
@@ -190,7 +203,7 @@ olsr_serialize_tc_lq_pair(unsigned char *buff, struct tc_mpr_addr *neigh)
   return active_lq_handler->serialize_tc_lq(buff, neigh->linkquality);
 }
 
-/*
+/**
  * olsr_deserialize_tc_lq_pair
  *
  * this function reads the lq information of a binary package into a tc_edge_entry
@@ -205,7 +218,7 @@ olsr_deserialize_tc_lq_pair(const uint8_t ** curr, struct tc_edge_entry *edge)
   active_lq_handler->deserialize_tc_lq(curr, edge->linkquality);
 }
 
-/*
+/**
  * olsr_update_packet_loss_worker
  *
  * this function is called every times a hello package for a certain link_entry
@@ -222,7 +235,7 @@ olsr_update_packet_loss_worker(struct link_entry *entry, bool lost)
   active_lq_handler->packet_loss_handler(entry, entry->linkquality, lost);
 }
 
-/*
+/**
  * olsr_memorize_foreign_hello_lq
  *
  * this function is called to copy the link quality information from a received
@@ -244,7 +257,7 @@ olsr_memorize_foreign_hello_lq(struct link_entry *local, struct hello_neighbor *
   }
 }
 
-/*
+/**
  * get_link_entry_text
  *
  * this function returns the text representation of a link_entry cost value.
@@ -263,7 +276,7 @@ get_link_entry_text(struct link_entry *entry, char separator, struct lqtextbuffe
   return active_lq_handler->print_hello_lq(entry->linkquality, separator, buffer);
 }
 
-/*
+/**
  * get_tc_edge_entry_text
  *
  * this function returns the text representation of a tc_edge_entry cost value.
@@ -282,7 +295,7 @@ get_tc_edge_entry_text(struct tc_edge_entry *entry, char separator, struct lqtex
   return active_lq_handler->print_tc_lq(entry->linkquality, separator, buffer);
 }
 
-/*
+/**
  * get_linkcost_text
  *
  * This function transforms an olsr_linkcost value into it's text representation and copies
@@ -310,7 +323,7 @@ get_linkcost_text(olsr_linkcost cost, bool route, struct lqtextbuffer *buffer)
   return active_lq_handler->print_cost(cost, buffer);
 }
 
-/*
+/**
  * olsr_copy_hello_lq
  *
  * this function copies the link quality information from a link_entry to a
@@ -327,7 +340,7 @@ olsr_copy_hello_lq(struct lq_hello_neighbor *target, struct link_entry *source)
   active_lq_handler->copy_link_lq_into_neigh(target->linkquality, source->linkquality);
 }
 
-/*
+/**
  * olsr_copylq_link_entry_2_tc_mpr_addr
  *
  * this function copies the link quality information from a link_entry to a
@@ -344,7 +357,7 @@ olsr_copylq_link_entry_2_tc_mpr_addr(struct tc_mpr_addr *target, struct link_ent
   active_lq_handler->copy_link_lq_into_tc(target->linkquality, source->linkquality);
 }
 
-/*
+/**
  * olsr_copylq_link_entry_2_tc_edge_entry
  *
  * this function copies the link quality information from a link_entry to a
@@ -366,7 +379,7 @@ void olsr_clear_hello_lq(struct link_entry *link) {
   active_lq_handler->clear_hello(link->linkquality);
 }
 
-/*
+/**
  * olsr_clear_tc_lq
  *
  * this function resets the linkquality value of a tc_mpr_addr
@@ -380,7 +393,7 @@ olsr_clear_tc_lq(struct tc_mpr_addr *target)
   active_lq_handler->clear_tc(target->linkquality);
 }
 
-/*
+/**
  * olsr_malloc_hello_neighbor
  *
  * this function allocates memory for an hello_neighbor inclusive
@@ -402,7 +415,7 @@ olsr_malloc_hello_neighbor(const char *id)
   return h;
 }
 
-/*
+/**
  * olsr_malloc_tc_mpr_addr
  *
  * this function allocates memory for an tc_mpr_addr inclusive
@@ -424,7 +437,7 @@ olsr_malloc_tc_mpr_addr(const char *id)
   return t;
 }
 
-/*
+/**
  * olsr_malloc_lq_hello_neighbor
  *
  * this function allocates memory for an lq_hello_neighbor inclusive
@@ -446,7 +459,7 @@ olsr_malloc_lq_hello_neighbor(const char *id)
   return h;
 }
 
-/*
+/**
  * olsr_malloc_link_entry
  *
  * this function allocates memory for an link_entry inclusive
@@ -468,6 +481,14 @@ olsr_malloc_link_entry(const char *id)
   return h;
 }
 
+size_t olsr_sizeof_hello_lqdata(void) {
+  return active_lq_handler->hello_lqdata_size;
+}
+
+size_t olsr_sizeof_tc_lqdata(void) {
+  return active_lq_handler->tc_lqdata_size;
+}
+
 /**
  * This function should be called whenever the current linkcost
  * value changed in a relevant way.
index 2778e2a..19c68c7 100644 (file)
@@ -88,6 +88,8 @@ struct lq_handler {
 
   size_t hello_lq_size;
   size_t tc_lq_size;
+  size_t hello_lqdata_size;
+  size_t tc_lqdata_size;
 };
 
 struct lq_handler_node {
@@ -111,7 +113,6 @@ int avl_strcasecmp(const void *str1, const void *str2);
 void init_lq_handler_tree(void);
 
 void register_lq_handler(struct lq_handler *handler, const char *name);
-void activate_lq_handler(const char *name);
 
 olsr_linkcost olsr_calc_tc_cost(const struct tc_edge_entry *);
 
@@ -138,6 +139,9 @@ struct tc_mpr_addr *olsr_malloc_tc_mpr_addr(const char *id);
 struct lq_hello_neighbor *olsr_malloc_lq_hello_neighbor(const char *id);
 struct link_entry *olsr_malloc_link_entry(const char *id);
 
+size_t olsr_sizeof_hello_lqdata(void);
+size_t olsr_sizeof_tc_lqdata(void);
+
 void olsr_relevant_linkcost_change(void);
 
 /* Externals. */
index 54e6eb6..96d6f54 100644 (file)
@@ -97,7 +97,9 @@ struct lq_handler lq_etx_ff_handler = {
   &default_lq_print_cost_ff,
 
   sizeof(struct default_lq_ff_hello),
-  sizeof(struct default_lq_ff)
+  sizeof(struct default_lq_ff),
+  4,
+  4
 };
 
 static void
index 9d12bcc..dcadc11 100644 (file)
@@ -100,7 +100,9 @@ struct lq_handler lq_etx_ffeth_handler = {
   &default_lq_print_cost_ffeth,
 
   sizeof(struct default_lq_ffeth_hello),
-  sizeof(struct default_lq_ffeth)
+  sizeof(struct default_lq_ffeth),
+  4,
+  4
 };
 
 static void
index dfc9ead..ef39563 100644 (file)
@@ -85,7 +85,9 @@ struct lq_handler lq_etx_float_handler = {
   &default_lq_print_cost_float,
 
   sizeof(struct default_lq_float),
-  sizeof(struct default_lq_float)
+  sizeof(struct default_lq_float),
+  4,
+  4
 };
 
 static void
index 8d23c65..5ff8671 100644 (file)
@@ -86,7 +86,9 @@ struct lq_handler lq_etx_fpm_handler = {
   &default_lq_print_cost_fpm,
 
   sizeof(struct default_lq_fpm),
-  sizeof(struct default_lq_fpm)
+  sizeof(struct default_lq_fpm),
+  4,
+  4
 };
 
 uint32_t aging_factor_new, aging_factor_old;