I rejected this because I don't consider "sticky routes" when link is down a bug.
Date: Tue, 10 Oct 2006 02:17:26 -0700 From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: [Bug 7296] New: Connected networks persist in routing table despite no IF_RUNNING http://bugzilla.kernel.org/show_bug.cgi?id=7296 Summary: Connected networks persist in routing table despite no IF_RUNNING Kernel Version: 2.6.18 Status: NEW Severity: normal Owner: [EMAIL PROTECTED] Submitter: [EMAIL PROTECTED] Most recent kernel where this bug did not occur: All affected AFAIK Distribution: Debian Sarge Hardware Environment: Dual (Intel) Ethernet, PPro, SATA RAID, etc 0000:02:06.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev 0d) 0000:02:07.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev 0d) Software Environment: K:2.6.18 and more. (Quagga: 0.98.3-7.2) Problem Description: Introduction ------------ Our servers have two ethernet interfaces to offer resiliency. They run a routing protocol (OSPF) in order to learn exit paths via either of these interfaces. These routing protocols are independant to this problem, however from experience the problem curtails the effectiveness of any such protocols in resilient architectures. Therefore with growing interest shown in utilising Linux as a router, IMO this should be considered a fairly serious bug. Problem ------- Whilst the nature of my specific topology is rather complex, I can define the problem generally as: A "connected" IP network whose interface subsequently loses its IF_RUNNING flag (ie unusable for routing), persists in the Linux routing table apparently as a "kernel" route. In the case of running routing protocols on dual interface servers this connected network is likely, following the destruction of the connected interface, to be reachable via the other. If the route persists however, it will never use this alternate path and black hole any traffic by routing it via a dead interface. See below example: ------------------ # ifconfig eth0 Link encap:Ethernet HWaddr 00:20:ED:35:D4:C8 inet addr:192.168.0.143 Bcast:192.168.0.191 Mask:255.255.255.192 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 eth1 Link encap:Ethernet HWaddr 00:20:ED:35:D4:C9 inet addr:192.168.0.207 Bcast:192.168.0.255 Mask:255.255.255.192 UP BROADCAST MULTICAST MTU:1500 Metric:1 # ip route show 192.168.0.128/26 dev eth0 proto kernel scope link src 192.168.0.143 192.168.0.192/26 dev eth1 proto kernel scope link src 192.168.0.207 <-- NO!! 192.168.0.192/26 via 192.168.0.130 dev eth0 proto zebra metric 60 equalize # ping {anything else on 192.168.0.192/26} <zilch> The path for 192.168.0.192 is learned via 192.168.0.130 (current ospf dr - irrelevant), but it'll never use it because of the kernel sourced directly connected route still sitting in there. If I then IFDOWN eth1, everything is fine and the route withdraws correctly, but this kinda defeats the object of dynamic routing =:/ Not sure whether this is a "driver tells the kernel" or a "kernel checks the driver at {n} intervals" issue - I would suggest the former would be more correct, but it is a problem regardless. Steps to reproduce: Ingredients ----------- 1 x Linux (mine is Debian sarge but it may affect all kernels) 1 x Dual Ethernet server (see Intel cards above for my exact build) 1 x Switch or Hub or similar (cheap will do) Connect the Server ports to the switch ports so the server interfaces are RUNNING in ifconfig On the server, configure: eth0 as 192.168.0.1/24 eth1 as 192.168.1.1/24 NOW "ip route show" Pull the plug on the eth0 interface, or admin shut it on the SWITCH end if you're a ciscoite. If buggy then "ip route show" will still show the network 192.168.0.0/24 in the routing table. It really shouldn't do this - if a path to this network had been learned via a protocol via the other interface, it would never use that path because the network persists as directly connected and thus supercedes any dynamic path in true cisco style. Try ifdown, the route will withdraw correctly, it needs to do that if IF_RUNNING goes away. Rgds Shaun Kemp ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee. -- Stephen Hemminger <[EMAIL PROTECTED]> - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html