Free Range Routing vs Quagga/Cisco (posted 2022-11-02)
Back in the 1990s, I used Cisco routers. Mostly rather underpowered ones such as the Cisco 2500 series. I later started using the Zebra and then Quagga routing software for the lab part of my training courses.
As I was writing my new BGP book, I made configuration examples using Quagga. But about two thirds in, I decided to switch to FRRouting. This had the huge advantage that I could include RPKI examples. But on the other hand, I now had to revisit all my earlier configuration examples to see if they still worked under FRR. And too often, the answer was "no".
So let me list some differences between Quagga or even old school Cisco routers and FRRouting.
A really annoying change is that in FRR, it's no longer "ip as-path ..." but "bgp as-path ..." to define AS path access lists. Yes, it makes more sense. But this change immediately makes it impossible to have a configuration file that works on both Cisco/Quagga and FRR. Same thing for "ip community ..." vs "bgp community ...".
I think the solution here would have been to accept the "ip ..." syntax and translate that into "bgp ..." syntax. That way, an FRR BGP daemon could still read Quagga BGP daemon configurations and work as expected.
Another change is that with FRR, there's no way to get around "address-family ipv4".
Way, way, way back in the day, we didn't have IPv6. Actually, it took quite a while for 1990s routers like the 2500 series to gain IPv6 capability. So there was no reason to differentiate between BGP configuration commands that both apply to IPv4 and IPv6 and configuration commands that only apply to either IPv4 or IPv6.
With Cisco routers, you could always just pretend like IPv6 didn't exist and enter configurations like:
! router bgp 65086 no synchronization network 10.86.0.0 mask 255.255.0.0 neighbor 203.0.113.83 remote-as 65083 no auto-summary !
On FRR, you can still paste that configuration snippet. But if you then issue "show running-config", this is what you get back:
! router bgp 65086 neighbor 203.0.113.83 remote-as 65083 ! address-family ipv4 unicast network 10.86.0.0/16 exit-address-family exit !
Yes, it boils down to the same thing, but it looks rather different. Especially as the configuration gets longer and the non address family part and the IPv4 address family part don't fit on the screen at the same time.
Bottom line: FRR is moving away from the traditional Cisco configuration language relatively quickly, white Quagga, for BGP at least, stayed pretty close to that. So moving from Quagga to FRR is a bigger step than you might think.
Also, as much as we may be unhappy with Cisco for some of their high profile software bugs, more minor software bugs happen much more frequently in these software implementations such as Quagga and FRR. For instance, I find myself not being able to use ^(64496_)+$ to match one or more instances of AS 64496 in an AS path but nothing else. However, ^(_64496)+$ does work as expected.