ospf6d: Fixing a couple of issues with ospf6_route_remove () routine.

When a route_node has multiple ospf6_routes under it (common subnet case),
then the current implementation has an issue in adjusting the route_node->info
on a ospf6_route_remove() call.

The main reason is that it ends up using exact match to determine if the next
ospf6_route belongs to the same route_node or not. Fixing that part to use
rnode (the existing back-pointer to the route_node) from the ospf6_route to
determine that.

Also fixing some of the walks to turn them safe so that the route deletion is
fine.

Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com>
Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
diff --git a/ospf6d/ospf6_route.c b/ospf6d/ospf6_route.c
index 5057556..1c6495b 100644
--- a/ospf6d/ospf6_route.c
+++ b/ospf6d/ospf6_route.c
@@ -620,7 +620,7 @@
 
   if (node->info == route)
     {
-      if (route->next && ospf6_route_is_same (route->next, route))
+      if (route->next && route->next->rnode == node)
         {
           node->info = route->next;
           SET_FLAG (route->next->flag, OSPF6_ROUTE_BEST);