So part of the IPv6 spec deals with reach-ability. It turns out the kernel is much better than this, purely because it relieves updates userland cannot when packets flow to/from the router we care about. So removing the Neighbour Solicition code and instead polling (BSD) or listening for neighbour updates (Linux) makes the reachability detection much more reliable.