We've been using bird 1.6.8 to advertise nullzero routes from a FreeBSD box to our routers for awhile. (We use quagga to the same for IPv4.) We're in the process of upgrading to 2.0.7 and will use bird for IPv4 and IPv6.

I'm so far unable to come up with good ways of dumping only IPv4 or IPv4 routes. I can't even find concrete examples of what's possible.

A filter example I found is:

    https://bird.network.cz/?get_doc&v=20&f=bird-5.html#ss5.3
    show route filter { if 127.0.0.5 ~ net then accept; }

So I for IPv6 I tried:

    show route filter { if net.len = 128 then accept; }

which works but it logs error messages:

     Filter (unnamed) did not return accept nor reject. Make up your mind

This works without errors:

    show route filter { if net.len = 128 then accept; reject; }

As does:

    show route where net.len = 128

Both seem like hacks to me and do not allow unambiguous printing of IPv4 routes:

    show route where net.len = 32

In my case I know I won't have any IPv6 routes that are 32 bits but there must be a better way.

I also found:

    show route table master4
    show route table master6

I'd rather not depend on the names of default routing tables. I suppose I could explicitly import the kernel routes into v4 and v6 tables but routing works without this extra complexity.

One experiment I tried was:

    show route filter { print  "net.type is ", net.type; }

which logs 1 or 2 for IPv4 or IPv6:

    bird: net.type is (enum 36)1
    bird: net.type is (enum 36)2

but the obvious commands do not print any routes:

    show route where net.type = 1
    show route where net.type = 2

And anyway I couldn't find any keywords for ipv4 and ipv6.

What's the magic I'm missing? How can I dump only IPv4 or dump only IPv6 routes?

                Craig

Reply via email to