ospf_spf_process_stubs: use LSA pos to find OSFP interface

This is better than a prefix lookup as prefixes may not be
unique, that is, the same prefix can exist on several interfaces.

Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
diff --git a/ospfd/ospf_route.c b/ospfd/ospf_route.c
index d2e5e1e..a5d6d18 100644
--- a/ospfd/ospf_route.c
+++ b/ospfd/ospf_route.c
@@ -429,7 +429,7 @@
 void
 ospf_intra_add_stub (struct route_table *rt, struct router_lsa_link *link,
 		     struct vertex *v, struct ospf_area *area,
-		     int parent_is_root)
+		     int parent_is_root, int lsa_pos)
 {
   u_int32_t cost;
   struct route_node *rn;
@@ -577,7 +577,7 @@
       if (IS_DEBUG_OSPF_EVENT)
 	zlog_debug ("ospf_intra_add_stub(): this network is on this router");
 
-      if ((oi = ospf_if_lookup_by_prefix (area->ospf, &p)))
+      if ((oi = ospf_if_lookup_by_lsa_pos (area, lsa_pos)))
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
 	    zlog_debug ("ospf_intra_add_stub(): the interface is %s",
diff --git a/ospfd/ospf_route.h b/ospfd/ospf_route.h
index 17ab68e..5742b46 100644
--- a/ospfd/ospf_route.h
+++ b/ospfd/ospf_route.h
@@ -141,7 +141,7 @@
 extern void ospf_intra_add_stub (struct route_table *,
 				 struct router_lsa_link *, struct vertex *,
 				 struct ospf_area *,
-				 int parent_is_root);
+				 int parent_is_root, int);
 
 extern int ospf_route_cmp (struct ospf *, struct ospf_route *,
 			   struct ospf_route *);
diff --git a/ospfd/ospf_spf.c b/ospfd/ospf_spf.c
index 26fe485..6682951 100644
--- a/ospfd/ospf_spf.c
+++ b/ospfd/ospf_spf.c
@@ -973,6 +973,7 @@
       u_char *lim;
       struct router_lsa_link *l;
       struct router_lsa *rlsa;
+      int lsa_pos = 0;
 
       if (IS_DEBUG_OSPF_EVENT)
         zlog_debug ("ospf_process_stubs():processing router LSA, id: %s",
@@ -994,7 +995,8 @@
                 (l->m[0].tos_count * OSPF_ROUTER_LSA_TOS_SIZE));
 
           if (l->m[0].type == LSA_LINK_TYPE_STUB)
-            ospf_intra_add_stub (rt, l, v, area, parent_is_root);
+	    ospf_intra_add_stub (rt, l, v, area, parent_is_root, lsa_pos);
+	  lsa_pos++;
         }
     }