Hi, I have an issue with BIRD 1.6.2 from http://bird.network.cz/debian/ on Debian jessie: When bird6 is running and I "ifup" an interface with a static IPv6 address the address is added but no IPv6 route in the associated network via that interface. When bird6 is not running everything works. It looks like bird6 1.6.2 is eating IPv6 routes set by the kernel. I have not encountered this issue with the IPv4 bird daemon. After downgrading to bird 1.4.5 from Debian jessie everything works as expected. What information do you need? Regards -- Robert Sander Heinlein Support GmbH Schwedter Str. 8/9b, 10119 Berlin http://www.heinlein-support.de Tel: 030 / 405051-43 Fax: 030 / 405051-19 Zwangsangaben lt. §35a GmbHG: HRB 93818 B / Amtsgericht Berlin-Charlottenburg, Geschäftsführer: Peer Heinlein -- Sitz: Berlin
On Mon, Nov 07, 2016 at 03:37:32PM +0100, Robert Sander wrote:
Hi,
I have an issue with BIRD 1.6.2 from http://bird.network.cz/debian/ on Debian jessie:
When bird6 is running and I "ifup" an interface with a static IPv6 address the address is added but no IPv6 route in the associated network via that interface.
When bird6 is not running everything works.
It looks like bird6 1.6.2 is eating IPv6 routes set by the kernel. I have not encountered this issue with the IPv4 bird daemon.
Hi Could you send me output of 'ip -6 route list' and 'birdc show route' to see which kernel routes get removed? And set 'debug all' to kernel protocol and see BIRD log messages related to route removal? -- Elen sila lumenn' omentielvo Ondrej 'Santiago' Zajicek (email: santiago@crfreenet.org) OpenPGP encrypted e-mails preferred (KeyID 0x11DEADC3, wwwkeys.pgp.net) "To err is human -- to blame it on a computer is even more so."
On Mon, Nov 07, 2016 at 03:37:32PM +0100, Robert Sander wrote:
Hi,
I have an issue with BIRD 1.6.2 from http://bird.network.cz/debian/ on Debian jessie:
When bird6 is running and I "ifup" an interface with a static IPv6 address the address is added but no IPv6 route in the associated network via that interface.
When bird6 is not running everything works.
It looks like bird6 1.6.2 is eating IPv6 routes set by the kernel. I have not encountered this issue with the IPv4 bird daemon.
Hi The problem is likely caused by first exporting OSPF route to kernel and then removing it, but Linux removes both route from BIRD and its own (it ignores protocol attribute, while in IPv4 it obeys the attribute). The solution is to specify kernel metric using kernel protocol option 'metric' to some value (different than 0 (unspecified) or 256 (kernel route)). If you set it to lower value than 256, then your routes got precendence to kernel routes. -- Elen sila lumenn' omentielvo Ondrej 'Santiago' Zajicek (email: santiago@crfreenet.org) OpenPGP encrypted e-mails preferred (KeyID 0x11DEADC3, wwwkeys.pgp.net) "To err is human -- to blame it on a computer is even more so."
On 13.11.2016 20:59, Ondrej Zajicek wrote:
The problem is likely caused by first exporting OSPF route to kernel and then removing it, but Linux removes both route from BIRD and its own (it ignores protocol attribute, while in IPv4 it obeys the attribute).
The solution is to specify kernel metric using kernel protocol option 'metric' to some value (different than 0 (unspecified) or 256 (kernel route)). If you set it to lower value than 256, then your routes got precendence to kernel routes.
That did the trick, thanks. I added a "metric 20" to the kernel protocol and now I can ifdown and ifup without issue. I was confused because the IPv4 counterpart does not have this behaviour. Regards -- Robert Sander Heinlein Support GmbH Schwedter Str. 8/9b, 10119 Berlin http://www.heinlein-support.de Tel: 030 / 405051-43 Fax: 030 / 405051-19 Zwangsangaben lt. §35a GmbHG: HRB 93818 B / Amtsgericht Berlin-Charlottenburg, Geschäftsführer: Peer Heinlein -- Sitz: Berlin
On 11/13/2016 07:59 PM, Ondrej Zajicek wrote:
It looks like bird6 1.6.2 is eating IPv6 routes set by the kernel. I have not encountered this issue with the IPv4 bird daemon. Hi
The problem is likely caused by first exporting OSPF route to kernel and then removing it, but Linux removes both route from BIRD and its own (it ignores protocol attribute, while in IPv4 it obeys the attribute).
The solution is to specify kernel metric using kernel protocol option 'metric' to some value (different than 0 (unspecified) or 256 (kernel route)). If you set it to lower value than 256, then your routes got precendence to kernel routes.
This just bit me hard. I knew about this back from when I upgraded a few routers to 1.6.2, but unfortunately forgot since then. Today I was upgrading the backup core, with ensuing fun when it lost all directly connected routes. I understand that the kernel itself seems to be inconsistent between IPv4 and IPv6, causing this problem. However, whatever you were doing back in 1.5.0 was working. I assume the change in behavior is due to the new features in 1.6 (e.g. ECMP on IPv6), and it's not practical to go back to the old way. That said, would it be possible to have a default kernel metric that already prevents this from happening? So that people aren't bit unexpectedly. Even if it's just metric 1 or something. I set mine to 20, following your suggestion, and it works as expected. Failing that, perhaps it would be a good idea to mention this behavior in the documentation, for the benefit of those who did not read this thread (or, like me, did read it but forgot). Regards, Israel
On Wed, Dec 21, 2016 at 02:53:33PM +0000, Israel G. Lugo wrote:
On 11/13/2016 07:59 PM, Ondrej Zajicek wrote:
It looks like bird6 1.6.2 is eating IPv6 routes set by the kernel. I have not encountered this issue with the IPv4 bird daemon. Hi
I understand that the kernel itself seems to be inconsistent between IPv4 and IPv6, causing this problem. However, whatever you were doing back in 1.5.0 was working. I assume the change in behavior is due to the new features in 1.6 (e.g. ECMP on IPv6), and it's not practical to go back to the old way.
Hi That is true. We found later that the old code worked by some unspecified kernel behavior and probably was not reliable either. There were several ways to workaround it, but each one breaks in some circumstances. In retrospect, the best way would be to have both old code and new code (with ECMP) and require an option to enable ECMP (and use some metric in that case). But now, that would break configs that depend on ECMP enabled by default.
That said, would it be possible to have a default kernel metric that already prevents this from happening? So that people aren't bit unexpectedly. Even if it's just metric 1 or something. I set mine to 20, following your suggestion, and it works as expected.
That is something we plan for the next major release (2.0, or 1.7 if we will have that). Unfortunately having default kernel metric also could break some configs (as then krt_metric route attribute is ignored).
Failing that, perhaps it would be a good idea to mention this behavior in the documentation, for the benefit of those who did not read this thread (or, like me, did read it but forgot).
Well, it is mentioned in description of 'metric' option, but perhaps not emphasized enough. I will add it to FAQ. -- Elen sila lumenn' omentielvo Ondrej 'Santiago' Zajicek (email: santiago@crfreenet.org) OpenPGP encrypted e-mails preferred (KeyID 0x11DEADC3, wwwkeys.pgp.net) "To err is human -- to blame it on a computer is even more so."
participants (3)
-
Israel G. Lugo -
Ondrej Zajicek -
Robert Sander