ospfd: Remove oi field from LSA, have network_lsa_refresh look up when needed

* ospf_lsa.h: (struct ospf_lsa) remove oi pointer
* ospf_lsa.c: (ospf_network_lsa_refresh) instead of keeping a pointer, just
  lookup the oi when it's needed. This decouples network LSA from oi lifetime
  and avoids having to invalidate pointers in LSAs when an oi changes,
  simplifying the code.
diff --git a/ospfd/ospf_lsa.c b/ospfd/ospf_lsa.c
index 7e71b5d..842df49 100644
--- a/ospfd/ospf_lsa.c
+++ b/ospfd/ospf_lsa.c
@@ -1045,7 +1045,6 @@
     }
   
   new->area = oi->area;
-  new->oi = oi;
   SET_FLAG (new->flags, OSPF_LSA_SELF | OSPF_LSA_SELF_CHECKED);
 
   /* Copy LSA to store. */
@@ -1114,10 +1113,23 @@
   struct ospf_area *area = lsa->area;
   struct ospf_lsa *new, *new2;
   struct ospf_if_params *oip;
-  struct ospf_interface *oi = lsa->oi;
+  struct ospf_interface *oi;
   
   assert (lsa->data);
-
+  
+  /* Retrieve the oi for the network LSA */
+  oi = ospf_if_lookup_by_local_addr (area->ospf, NULL, lsa->data->id);
+  if (oi == NULL)
+    {
+      if (IS_DEBUG_OSPF (lsa, LSA_GENERATE))
+        {
+          zlog_debug ("LSA[Type%d:%s]: network-LSA refresh: "
+                      "no oi found, ick, ignoring.",
+		      lsa->data->type, inet_ntoa (lsa->data->id));
+          ospf_lsa_header_dump (lsa->data);
+        }
+      return NULL;
+    }
   /* Delete LSA from neighbor retransmit-list. */
   ospf_ls_retransmit_delete_nbr_area (area, lsa);
 
diff --git a/ospfd/ospf_lsa.h b/ospfd/ospf_lsa.h
index 0959a63..fee3470 100644
--- a/ospfd/ospf_lsa.h
+++ b/ospfd/ospf_lsa.h
@@ -114,9 +114,6 @@
 
   /* Refreshement List or Queue */
   int refresh_list;
-
-  /* For Type-9 Opaque-LSAs or Type-2 Network-LSAs */
-  struct ospf_interface *oi;
 };
 
 /* OSPF LSA Link Type. */