[Babel-users] Convergence problem

Robert Lukan Robert.Lukan at ltfe.org
Fri Jul 4 09:14:30 UTC 2008


I used ipv6cp-use-persistent in /etc/ppp/options files, and problem of changing link local address was solved. I can also try without ipv6cp-use-persistent, to test patch, if you there is a necessity.

But problem with convergence is still present, not always but sometimes. I enclosed again debug files, I tried few times disconnecting link, after few successful converging of link, you can see there is still a problem. The only solution was to disconnect link from other side or to restart babel process.   

I did not change any of parameters.

ANd again thank you very much for support. I hope you dont have to much work because of my experiments :)

Robert



-----Original Message-----
From: Juliusz Chroboczek [mailto:Juliusz.Chroboczek at pps.jussieu.fr]
Sent: Thu 7/3/2008 5:23 PM
To: Robert Lukan; babel-users at lists.alioth.debian.org
Subject: Re: [Babel-users] Convergence problem
 
> The issue is that your implementation of ppp switches link-local
> addresses on every up/down event.  IPv6 link-local addresses are
> supposed to remain stable, so this is why Babel gets confused by this
> case.  I'll implement a workaround, but you really should try to
> ensure that your link-local addresses remain stable if possible.

Please try the attached patch, and let me know if it fixes your issue.

                                        Juliusz

Thu Jul  3 17:21:04 CEST 2008  Juliusz Chroboczek <jch at pps.jussieu.fr>
  * Protect against duplicate neighbours.
diff -rN -u old-babel/neighbour.c new-babel/neighbour.c
--- old-babel/neighbour.c       2008-07-03 17:21:33.000000000 +0200
+++ new-babel/neighbour.c       2008-07-03 17:21:33.000000000 +0200
@@ -48,6 +48,17 @@
     return NULL;
 }
 
+struct neighbour *
+find_neighbour_by_id(const unsigned char *id, struct network *net)
+{
+    struct neighbour *neigh;
+    FOR_ALL_NEIGHBOURS(neigh) {
+        if(memcmp(id, neigh->id, 16) == 0 && neigh->network == net)
+            return neigh;
+    }
+    return NULL;
+}
+
 void
 flush_neighbour(struct neighbour *neigh)
 {
@@ -84,6 +95,22 @@
             neigh = NULL;
         }
     }
+
+    neigh = find_neighbour_by_id(id, net);
+    if(neigh) {
+        if((neigh->reach & 0xE000) == 0) {
+            /* The other neighbour is probably obsolete. */
+            flush_neighbour(neigh);
+            neigh = NULL;
+        } else {
+            fprintf(stderr, "Duplicate neighbour %s (%s and %s)!\n",
+                    format_address(id),
+                    format_address(neigh->address),
+                    format_address(address));
+            return NULL;
+        }
+    }
+
     debugf("Creating neighbour %s (%s).\n",
            format_address(id), format_address(address));
 


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.alioth.debian.org/pipermail/babel-users/attachments/20080704/0c0ddb34/attachment-0001.htm 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: babel.alix.log.gz
Type: application/x-gzip
Size: 13151 bytes
Desc: babel.alix.log.gz
Url : http://lists.alioth.debian.org/pipermail/babel-users/attachments/20080704/0c0ddb34/attachment-0002.bin 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: babel.suse.log.gz
Type: application/x-gzip
Size: 13065 bytes
Desc: babel.suse.log.gz
Url : http://lists.alioth.debian.org/pipermail/babel-users/attachments/20080704/0c0ddb34/attachment-0003.bin 


More information about the Babel-users mailing list