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)