The Linux quagga ospfd is advertising 0.0.0.0/0 as an external 2, with a metric of 20000. The WRT 0.0.0.0/0 is advertising as an external 2, with a metric of 10000. From an OSPF perspective, the WRT's route is better, however, bird on the WRT sees the route as a kernel route, not as an OSPF route. The default preferences within bird appear to favor the OSPF route. Thinking of things as I am writing this, I decided to try an "import all" on the OSPF process on the WRT. This resolved the issue. The WRT imported the 0.0.0.0/0 route as E2 metric 10000, favoring that above the E2 metric 20000 0.0.0.0/0 coming from the Linux box. The preference issue is still there, however. In the version of bird packaged with WRT54G Talisman firmware, setting protocol preference causes an MTU mismatch between OSPF processes. Damjan wrote:
Maybe you'd like to filter the default route from OSPF
protocol ospf ... { import filter { if net.ip = 0.0.0.0 then reject; accept; }; ... }
I even think, instead of reject-ing the default route you could manipulate its metric too.