Hello misc@, claudio@,
I've noticed that when I propagate subnet of size /63 on our ospf-v3
network (unfortunately on routeros), ospf6d not only marks the ASE
update as invalid, but also refuses to move on with the rest, ending
up filling logs with nonsense in endless loop.
This diff only makes ospf6d to continue with the rest, but some routes
still can't get to the routing table:

send_rtmsg: action 1, prefix ::/0: Network is unreachable
send_rtmsg: action 1, prefix 2a01:dead:beef:cafe::/63: Network is unreachable

I don't understand much how the stuff in kroute.c works, could you
(anyone) please at least give me some hint? (or sketch a data flow).
What puzzles me a little, that I can't see the /63 route neither in my
temporary bgp setup (but can't debug it now, because the bgpd takes
care of my way there), even when allowing prefixlen > 48.

Thanks in advance for your reply...
-- 
Martin Pelikan

================================
--- /tmp/rde_lsdb.c     Wed Jun  9 13:23:34 2010
+++ rde_lsdb.c  Wed Jun  9 13:25:23 2010
@@ -940,7 +940,7 @@
 {
        struct lsa_prefix       *lp = buf;
        u_int32_t               *buf32, *addr = NULL;
-       u_int8_t                 prefixlen;
+       u_int8_t                 prefixlen, blks;
        u_int16_t                consumed = 0;

        if (len < sizeof(*lp))
@@ -959,7 +959,8 @@
        buf32 = (u_int32_t *)(lp + 1);
        consumed += sizeof(*lp);

-       for (; ((prefixlen + 31) / 32) > 0; prefixlen -= 32) {
+       for (; (blks = (prefixlen + 31) / 32) > 0 && blks <= 4;
+            prefixlen -= 32) {
                if (len < consumed + sizeof(u_int32_t))
                        return (-1);
                if (addr)

Reply via email to