Revert all of dyn_hna because fix does not help
authorSven-Ola Tuecke <sven-ola@gmx.de>
Sun, 9 May 2010 13:35:59 +0000 (15:35 +0200)
committerSven-Ola Tuecke <sven-ola@gmx.de>
Sun, 9 May 2010 13:35:59 +0000 (15:35 +0200)
src/cfgparser/olsrd_conf.c
src/hna_set.c
src/olsr_spf.c
src/process_routes.c

index 66a52be..dcb3b0c 100644 (file)
@@ -993,9 +993,6 @@ static void update_has_gateway_fields(void) {
     olsr_cnf->has_ipv4_gateway |= ip_prefix_is_v4_inetgw(&h->net) || ip_prefix_is_mappedv4_inetgw(&h->net);
     olsr_cnf->has_ipv6_gateway |= ip_prefix_is_v6_inetgw(&h->net);
   }
-
-  /* force routing table upgrade */
-  olsr_calculate_routing_table(true);
 }
 
 void
index 6f28400..99548f7 100644 (file)
@@ -435,6 +435,8 @@ olsr_input_hna(union olsr_message *m, struct interface *in_if __attribute__ ((un
   while (curr < curr_end) {
     struct olsr_ip_prefix prefix;
     union olsr_ip_addr mask;
+
+    struct ip_prefix_list *entry;
     struct interface *ifs;
     bool stop = false;
 
@@ -467,7 +469,11 @@ olsr_input_hna(union olsr_message *m, struct interface *in_if __attribute__ ((un
       continue;
     }
 #endif
-    olsr_update_hna_entry(&originator, &prefix.prefix, prefix.prefix_len, vtime);
+    entry = ip_prefix_list_find(olsr_cnf->hna_entries, &prefix.prefix, prefix.prefix_len);
+    if (entry == NULL) {
+      /* only update if it's not from us */
+      olsr_update_hna_entry(&originator, &prefix.prefix, prefix.prefix_len, vtime);
+    }
   }
   /* Forward the message */
   return true;
index 386b5b8..10fffb4 100644 (file)
@@ -470,11 +470,6 @@ olsr_calculate_routing_table(bool force)
 
       rtp = rtp_prefix_tree2rtp(rtp_tree_node);
 
-      if (ip_prefix_list_find(olsr_cnf->hna_entries, &rtp->rtp_dst.prefix, rtp->rtp_dst.prefix_len)) {
-        /* do not add HNAs that collide with local entries to global RIB */
-        continue;
-      }
-
       if (rtp->rtp_rt) {
 
         /*
index 757cd3b..47df783 100644 (file)
@@ -284,7 +284,7 @@ olsr_del_kernel_routes(struct list_node *head_node)
   struct rt_entry *rt;
 
   while (!list_is_empty(head_node)) {
-    if (0 == (rt = changelist2rt(head_node->prev))) continue;
+    rt = changelist2rt(head_node->prev);
 #ifdef LINUX_NETLINK_ROUTING
     if (rt->rt_nexthop.iif_index >= 0)
 #endif /*LINUX_NETLINK_ROUTING*/