On Fri, Aug 10, 2012 at 02:45:18PM +0200, Amadeus wrote:
> When I look at the timestamps it seems as if the old interface is not
> down before the new one comes up which means that bird won't be able to
> set the new routing information as it is still present on the old
> interface, does that make sense to you?

Hello

Try this patch, it fixes an issue with more overlapping prefixes,
it may fix your problem.

-- 
Elen sila lumenn' omentielvo

Ondrej 'SanTiago' Zajicek (email: [email protected])
OpenPGP encrypted e-mails preferred (KeyID 0x11DEADC3, wwwkeys.pgp.net)
"To err is human -- to blame it on a computer is even more so."
diff --git a/nest/neighbor.c b/nest/neighbor.c
index 506d9bd..9dce811 100644
--- a/nest/neighbor.c
+++ b/nest/neighbor.c
@@ -114,7 +114,7 @@ neighbor *
 neigh_find2(struct proto *p, ip_addr *a, struct iface *ifa, unsigned flags)
 {
   neighbor *n;
-  int class, scope = -1;       ;
+  int class, scope = -1;
   unsigned int h = neigh_hash(p, a);
   struct iface *i;
 
@@ -240,7 +240,21 @@ neigh_down(neighbor *n)
     n->proto->neigh_notify(n);
   rem_node(&n->n);
   if (n->flags & NEF_STICKY)
-    add_tail(&sticky_neigh_list, &n->n);
+    {
+      add_tail(&sticky_neigh_list, &n->n);
+
+      /* Respawn neighbor if there is another matching prefix */
+      struct iface *i;
+      int scope;
+
+      if (!n->iface)
+	WALK_LIST(i, iface_list)
+	  if ((scope = if_connected(&n->addr, i)) >= 0)
+	    {
+	      neigh_up(n, i, scope);
+	      return;
+	    }
+    }
   else
     sl_free(neigh_slab, n);
 }

Reply via email to