[ospfd] Minor enhancements to recent self-host-routes suppression patch

	* ospf_spf.c: (ospf_spf_process_stubs) Track whether
	  parent router vertex is the root, so that the host-route
	  suppression logic need only be activated for such vertices.
	  Move the actual logic to ospf_intra_add_stub.
	* ospf_route.c: (ospf_intra_add_stub) Main test of link moved
	  here, notionally more appropriate.
diff --git a/ospfd/ospf_route.c b/ospfd/ospf_route.c
index 3a1fa99..50fba75 100644
--- a/ospfd/ospf_route.c
+++ b/ospfd/ospf_route.c
@@ -481,7 +481,8 @@
 /* RFC2328 16.1. second stage. */
 void
 ospf_intra_add_stub (struct route_table *rt, struct router_lsa_link *link,
-		     struct vertex *v, struct ospf_area *area)
+		     struct vertex *v, struct ospf_area *area,
+		     int parent_is_root)
 {
   u_int32_t cost;
   struct route_node *rn;
@@ -514,7 +515,20 @@
   if (IS_DEBUG_OSPF_EVENT)
     zlog_debug ("ospf_intra_add_stub(): calculated cost is %d + %d = %d", 
 	       v->distance, ntohs(link->m[0].metric), cost);
-
+  
+  /* PtP links with /32 masks adds host routes to remote, directly
+   * connected hosts, see RFC 2328, 12.4.1.1, Option 1.
+   * Such routes can just be ignored for the sake of tidyness.
+   */
+  if (parent_is_root && link->link_data.s_addr == 0xffffffff &&
+      ospf_if_lookup_by_local_addr (area->ospf, NULL, link->link_id))
+    {
+      if (IS_DEBUG_OSPF_EVENT)
+        zlog_debug ("%s: ignoring host route %s/32 to self.",
+                    __func__, inet_ntoa (link->link_id));
+      return;
+    }
+  
   rn = route_node_get (rt, (struct prefix *) &p);
 
   /* Lookup current routing table. */