diff -Nur olsrd-0.5.5.orig/src/lq_route.c olsrd-0.5.5/src/lq_route.c
--- olsrd-0.5.5.orig/src/lq_route.c	2008-02-14 20:19:38.000000000 +0100
+++ olsrd-0.5.5/src/lq_route.c	2008-02-14 20:19:38.000000000 +0100
@@ -314,6 +314,83 @@
   }
 }
 
+static const char* debug_path[] =
+{
+	"104.198.65.69",
+	"104.198.65.97",
+	"104.130.77.80",
+	"104.130.77.11",
+	"104.192.192.225",
+	"104.198.65.81",
+	"104.198.65.94"
+};
+
+static void do_debug_path(const char* debmsg, const char* path[], const int length)
+{
+  int i;
+  float etx1 = 0.0, etx2 = 0.0, avg = 0.0, new = 0.0;
+  fprintf(stderr, "%s\n", debmsg);
+  for (i = 1; i < length; i++)
+  {
+    struct ipaddr_str buf;
+    union olsr_ip_addr addr1, addr2, *p;
+    struct tc_entry *tc1, *tc2;
+    struct tc_edge_entry *edge1 = NULL, *edge2 = NULL;
+    int i_ip;
+    const char* s_ip;
+    struct olsr_if *ifs;
+    
+    if(inet_pton(olsr_cnf->ip_version, path[i - 1], &addr1) <= 0)
+    {
+      fprintf(stderr, "Error converting fixed IP %s for deny rule!!\n", path[i - 1]);
+      continue;
+    }
+    if(inet_pton(olsr_cnf->ip_version, path[i], &addr2) <= 0)
+    {
+      fprintf(stderr, "Error converting fixed IP %s for deny rule!!\n", path[i]);
+      continue;
+    }
+    if (NULL != (p = mid_lookup_main_addr(&addr1))) addr1 = *p;
+    if (NULL != (p = mid_lookup_main_addr(&addr2))) addr2 = *p;
+    for (ifs = olsr_cnf->interfaces; ifs; ifs = ifs->next) if (0 != ifs->interf)
+    {
+      if (ip4equal((struct in_addr *)&addr1, &ifs->interf->int_addr.sin_addr)) addr1 = olsr_cnf->main_addr;
+      if (ip4equal((struct in_addr *)&addr2, &ifs->interf->int_addr.sin_addr)) addr2 = olsr_cnf->main_addr;
+    }
+    s_ip = olsr_ip_to_string(&buf, &addr1);
+    fprintf(stderr, "%s", s_ip);
+    i_ip = strlen(s_ip);
+    while (i_ip++ < 16) fprintf(stderr, " ");
+    if (NULL != (tc1 = olsr_lookup_tc_entry(&addr1))) edge1 = olsr_lookup_tc_edge(tc1, &addr2);
+    if (NULL != (tc2 = olsr_lookup_tc_entry(&addr2))) edge2 = olsr_lookup_tc_edge(tc2, &addr1);
+    if (NULL != edge1)
+    {
+      fprintf(stderr, "petx=%5.2f s=%ld, nlq=%5.2f lq=%5.2f, etx=%5.2f",
+        tc1->path_etx, edge1->etxseqno, edge1->inverse_link_quality, edge1->link_quality, edge1->etx);
+      etx1 += edge1->etx;
+    }
+    fprintf(stderr, " %s-%s ",
+      NULL == edge1 ? "0" : NULL == edge1->edge_inv ? "X" : edge1->edge_inv == edge2 ? "<" : " ",
+      NULL == edge2 ? "0" : NULL == edge2->edge_inv ? "X" : edge2->edge_inv == edge1 ? ">" : " ");
+    if (NULL != edge2)
+    {
+      fprintf(stderr, "etx=%5.2f lq=%5.2f nlq=%5.2f, s=%ld, petx=%5.2f",
+        edge2->etx, edge2->link_quality, edge2->inverse_link_quality, edge2->etxseqno, tc2->path_etx);
+      etx2 += edge2->etx;
+    }
+    if (NULL != edge1 && 0.0 != edge1->etx && NULL != edge2 && 0.0 != edge2->etx)
+    {
+      avg += ((edge1->etx + edge2->etx) / 2.0);
+    }
+    if (NULL != edge1 && NULL != edge2)
+    {
+      new += edge1->etxseqno > edge2->etxseqno ? edge1->etx : edge2->etx;
+    }
+    fprintf(stderr, " %s\n", olsr_ip_to_string(&buf, &addr2));
+  }
+  fprintf(stderr, "etx1=%5.2f, etx2=%5.2f, diff=%5.2f avg=%5.2f, new=%5.2f\n", etx1, etx2, etx1-etx2, avg, new);
+}
+
 void
 olsr_calculate_routing_table (void)
 {
@@ -511,6 +588,9 @@
               (int)total.tv_usec, (int)spf_init.tv_usec, (int)spf_run.tv_usec,
               (int)route.tv_usec, (int)kernel.tv_usec);
 #endif
+  do_debug_path("\n", debug_path, (int)(sizeof(debug_path) / sizeof(debug_path[0])));
+  system("ip r ls|grep ^104.198.65.69");
+  system("ip r ls|grep ^104.198.65.94");
 }
 
 /*
diff -Nur olsrd-0.5.5.orig/src/tc_set.c olsrd-0.5.5/src/tc_set.c
--- olsrd-0.5.5.orig/src/tc_set.c	2008-02-14 20:19:38.000000000 +0100
+++ olsrd-0.5.5/src/tc_set.c	2008-02-14 20:19:38.000000000 +0100
@@ -310,6 +310,8 @@
   tc_edge->T_time = GET_TIMESTAMP(timer);
 }
 
+static long etxseqno = 0;
+
 /*
  * If the edge does not have a minimum acceptable link quality
  * set the etx cost to infinity such that it gets ignored during
@@ -336,6 +338,7 @@
     tc_edge->etx = 1.0 / (tc_edge->link_quality * tc_edge->inverse_link_quality);
 #endif
   }
+  tc_edge->etxseqno = etxseqno++;
 }
 
 /**
diff -Nur olsrd-0.5.5.orig/src/tc_set.h olsrd-0.5.5/src/tc_set.h
--- olsrd-0.5.5.orig/src/tc_set.h	2008-02-14 20:19:38.000000000 +0100
+++ olsrd-0.5.5/src/tc_set.h	2008-02-14 20:19:38.000000000 +0100
@@ -72,6 +72,7 @@
   float              link_quality;
   float              inverse_link_quality;
 #endif
+   long               etxseqno;
 };
 
 #define OLSR_TC_EDGE_DOWN (1 << 0) /* this edge is down */
