Greetings: I am beginning to use bird 1.0.9 under Linux 2.2 on a small IPv4-only network and uncovered a difficulty with using the "ip route change" command. The linux router in question is configured with "protocol kernel" having "preference 180" so that local "alien" routes will supercede equivalent RIP routes (so that backup routes managed by the linux router will be taken instead of routes available on other routers). I noticed that if I try to use the "ip route change ..." command to modify an "alien" route, the route is instead removed and replaced by the RIP route. I can use the same command a second time to replace the RIP route with the "alien" route and it works properly. Also, if I first delete the original "alien" route, wait a second for the RIP route to take its place, then issue the "ip route change..." command, the change works properly. For example: - The route (via "ip route list") is: 206.163.40.96/27 via 65.100.46.254 dev ipsec0 - I execute: ip route change 206.163.40.96/27 via 65.100.46.254 dev ipsec0 src 206.163.40.44 - The following items appear in the log: 20-01-2005 16:14:55 <TRACE> kernel1: 206.163.40.96/27: [alien async] removed 20-01-2005 16:14:55 <TRACE> rip1 < forced accept by protocol 206.163.40.96/27 via 206.163.40.33 on ipsec1 20-01-2005 16:14:55 <TRACE> rip1 < replaced 206.163.40.96/27 via 206.163.40.33 on ipsec1 20-01-2005 16:14:55 <TRACE> kernel1 < replaced 206.163.40.96/27 via 206.163.40.33 on ipsec1 20-01-2005 16:14:55 <TRACE> kernel1 > removed [replaced] 206.163.40.96/27 via 65.100.46.254 on ipsec0 20-01-2005 16:14:55 <TRACE> kernel1: 206.163.40.96/27: [alien async] created 20-01-2005 16:14:55 <TRACE> kernel1 > added [best] 206.163.40.96/27 via 65.100.46.254 on ipsec0 20-01-2005 16:14:55 <TRACE> rip1 < replaced 206.163.40.96/27 via 65.100.46.254 on ipsec0 20-01-2005 16:14:55 <TRACE> kernel1 < replaced 206.163.40.96/27 via 65.100.46.254 on ipsec0 20-01-2005 16:14:55 <TRACE> kernel1: 206.163.40.96/27: [alien async] removed 20-01-2005 16:14:55 <TRACE> rip1 < forced accept by protocol 206.163.40.96/27 via 206.163.40.33 on ipsec1 20-01-2005 16:14:55 <TRACE> rip1 < replaced 206.163.40.96/27 via 206.163.40.33 on ipsec1 20-01-2005 16:14:55 <TRACE> kernel1 < replaced 206.163.40.96/27 via 206.163.40.33 on ipsec1 20-01-2005 16:14:55 <TRACE> kernel1 > removed [replaced] 206.163.40.96/27 via 65.100.46.254 on ipsec0 - The route (via "ip route list") now shows a totally different (RIP) route: 206.163.40.96/27 via 206.163.40.33 dev eth1 proto bird Looking at the code, I couldn't spot the trouble spot. I am left to imagine that the timing of the "ip route change" command conflicts with the timing of bird adding its own RIP route. I just don't know how it works in the Netlink interface. As indicated above, preceding the route change command with a delete and a delay results in the change working properly: ip route del 206.163.40.96/27 sleep 1 ip route change 206.163.40.96/27 via 65.100.46.254 dev ipsec0 src 206.163.40.44 I noticed lots of low-level debugging output in the netlink code, but I couldn't figure out how to output it. When I configure with "--enable-debug", I don't see any additional output in the debug file or or stderr (with "-d") or in the "debug output file" (with "-D bugout"), but I do have to specify the locations of the bird.conf and bird.ctl files. If you have any hints for debugging, I'm eager for those as well. Thanks, -Michael
participants (1)
-
michael_moore@csnw.com