<font face="arial" size="2"><p style="margin:0;padding:0;">Here's the architectural issue at the root of this issue (I think):</p>
<p style="margin:0;padding:0;"> </p>
<p style="margin:0;padding:0;">"P.S.: Also, NetworkManager and Quagga should never run on the same host.<br />NetworkManager does Host processing, Quagga does Router processing, and<br />those two are mutually exclusive."</p>
<p style="margin:0;padding:0;"> </p>
<p style="margin:0;padding:0;">It should be the case that a host and a router can exist and run in the same physical box, this is part of the IP architecture.   But Linux's network stack may make this hard to achieve (maybe impossible without careful isolation of all the parts).  If so, it is a Linux stack issue that arises from mingling host and router datagrams in a way that does not fully separate them.</p>
<p style="margin:0;padding:0;"> </p>
<p style="margin:0;padding:0;">So, it could be viewed as a bug in Linux (including NetworkManager and Quagga) that that separation is not achievable(achieved).   NetworkManager spans the layers and manages Ethernet mostly, but sometimes views it through the IP lens, making some assumptions that are not always valid architectural invariants.  NetworkManager assumes that there is only one primary host IP interface, for example, as I recall, even though IPv6 especially supports many IPv6 addresses in the same box for Hosts and for routers.</p>
<p style="margin:0;padding:0;"> </p>
<p style="margin:0;padding:0;">So the interfaces and IP addresses for the router must be managed separately from those in the host, even if on the same box.</p>
<p style="margin:0;padding:0;"> </p>
<p style="margin:0;padding:0;">The easiest way to do a very clean separation in Linux when sharing the physical NICs as link-endpoints among router and host functions is perhaps using virtualization of the NICs with VLANs and/or the TAP interface providing a virtual link between the router and host on the same box.  (I haven't studied this in detail, but it seems straightforward with no gotchas).  This would separate the host interfaces from the router ones unambiguously.</p>
<p style="margin:0;padding:0;"> </p>
<p style="margin:0;padding:0;">Then let NetworkManager see only the host-controlled interface, but let the other interfaces be out of NetworkManager's control.</p>
<p style="margin:0;padding:0;"> </p>
<p style="margin:0;padding:0;"> </p>
<p style="margin:0;padding:0;"> </p>
<p style="margin:0;padding:0;"> </p>
<p style="margin:0;padding:0;">-----Original Message-----<br />From: "David Lamparter" <equinox@diac24.net><br />Sent: Friday, July 6, 2012 12:59pm<br />To: "Dave Taht" <dave.taht@gmail.com><br />Cc: "babel-users" <babel-users@lists.alioth.debian.org>, "cerowrt-devel" <cerowrt-devel@lists.bufferbloat.net><br />Subject: Re: [Cerowrt-devel] [Babel-users] switching cerowrt to quagga-babeld issues<br /><br /></p>
<div id="SafeStyles1341675038">
<p style="margin:0;padding:0;">On Tue, Jul 03, 2012 at 09:18:43AM -0400, Dave Taht wrote:<br />> On Tue, Jul 3, 2012 at 8:35 AM, Denis Ovsienko <infrastation@yandex.ru> wrote:<br />> >> Does anybody know where this difference comes from?<br />> ><br />> > The difference comes from NetworkManager. Its efforts in reproducing<br />> > high-metric RTPROT_KERNEL routes with low-metric RTPROT_STATIC ones<br />> > are effectively hiding the kernel issue outside of CeroWrt runtime.<br />> > Would it be better to add a watchdog shell script, which does the<br />> > same, or patch the kernel?<br />> <br />> I would *much rather* patch the kernel than have a watchdog. However I<br />> don't quite understand<br />> the redistribution issue vs a vs ipv6 here. If I have a "redistribute<br />> kernel" on for ipv4, it does propagate the default route.<br /><br />I'm not sure I understood your problem here, but if it boils down to<br />"zebra doesn't redistribute an IPv6 RA default route", then that's by<br />design and shouldn't be touched.<br /><br />IPv6 RA is a router to host protocol.  Routers should never accept<br />information from it, it is neither secure nor able to convey enough<br />details to prevent loops or dead-end routes.<br /><br />This is also why enabling IPv6 forwarding disables reception of route<br />advertisements in-kernel.<br /><br />If I understand correctly, your use-case is a mesh router that acts as a<br />host on a "parent" network.  If so, this case should be handled by a<br />separate daemon that receives and processes IPv6 RAs, hopefully applies<br />some filtering.  Also, this absolutely cannot be default behaviour.<br /><br />If I misunderstood the issues, please ignore my mail.<br /><br />Cheers,<br /><br /><br />-David<br /><br /><br />P.S.: Also, NetworkManager and Quagga should never run on the same host.<br />NetworkManager does Host processing, Quagga does Router processing, and<br />those two are mutually exclusive.<br />_______________________________________________<br />Cerowrt-devel mailing list<br />Cerowrt-devel@lists.bufferbloat.net<br />https://lists.bufferbloat.net/listinfo/cerowrt-devel</p>
</div></font>