I've got quagga running on Slackware 14.2, kernel 4.4.7, (quagga-1.0.20160315 build from sources). Quagga fails to update route when path dissappears.
For example, that route is wrong and it was previously created by quagga:
94.246.185.0/24 via 94.246.185.42 dev eth3.2224 proto zebra metric 20
As I understand, quagga has information about correct path, but ignores it because there's already route in kernel table…
bgp# show ip bgp 94.74.72.0/24
BGP routing table entry for 94.74.72.0/24
Paths: (2 available, best #2, table Default-IP-Routing-Table)
Not advertised to any peer
12741 1299 7713 45470 45470 50935
213.17.213.97 from 213.17.213.97 (83.238.252.171)
Origin IGP, localpref 100, valid, external
Community: 1299:37000 12741:21000 12741:21041
Last update: Tue Aug 30 11:28:22 2016
9002 7713 45470 45470 50935
87.245.245.89 from 87.245.245.89 (87.245.225.167)
Origin IGP, localpref 100, valid, external, best
Community: 9002:9002 9002:64789
Last update: Tue Aug 30 11:27:55 201
bgp# show ip route 94.74.72.0/24
Routing entry for 94.74.72.0/24
Known via "bgp", distance 20, metric 0, vrf 0
Last update 01:22:43 ago
87.245.245.89, via eth3.585
Routing entry for 94.74.72.0/24
Known via "kernel", distance 0, metric 0, vrf 0, best, fib
* 94.246.185.42, via eth3.2224
Is this may be a bug in quagga or error in my configuration?
Best Answer
I am having the same issue using Quagga (version 1.2.2). I had the --retain flag on the daemon, removed it from my start up script and restarted quagga, but it didn't fix the issue. Only manually deleting the route from the kernel fixed the routing loop.
In the shell (freeBSD), I delete the kernel route:
And then the router is repopulated from zebra with the proper router: