Jiri Skala 2e0a992
diff --git a/ospfd/ospf_lsa.h b/ospfd/ospf_lsa.h
Jiri Skala 2e0a992
index fee3470..72e2f8a 100644
Jiri Skala 2e0a992
--- a/ospfd/ospf_lsa.h
Jiri Skala 2e0a992
+++ b/ospfd/ospf_lsa.h
Jiri Skala 2e0a992
@@ -114,6 +114,9 @@ struct ospf_lsa
Jiri Skala 2e0a992
 
Jiri Skala 2e0a992
   /* Refreshement List or Queue */
Jiri Skala 2e0a992
   int refresh_list;
Jiri Skala 2e0a992
+  
Jiri Skala 2e0a992
+  /* For Type-9 Opaque-LSAs */
Jiri Skala 2e0a992
+  struct ospf_interface *oi;
Jiri Skala 2e0a992
 };
Jiri Skala 2e0a992
 
Jiri Skala 2e0a992
 /* OSPF LSA Link Type. */
Jiri Skala 2e0a992
diff --git a/ospfd/ospf_nsm.c b/ospfd/ospf_nsm.c
Jiri Skala 2e0a992
index 279d2a0..cbc3171 100644
Jiri Skala 2e0a992
--- a/ospfd/ospf_nsm.c
Jiri Skala 2e0a992
+++ b/ospfd/ospf_nsm.c
Jiri Skala 2e0a992
@@ -216,7 +216,7 @@ ospf_db_summary_add (struct ospf_neighbor *nbr, struct ospf_lsa *lsa)
Jiri Skala 2e0a992
     {
Jiri Skala 2e0a992
     case OSPF_OPAQUE_LINK_LSA:
Jiri Skala 2e0a992
       /* Exclude type-9 LSAs that does not have the same "oi" with "nbr". */
Jiri Skala 2e0a992
-      if (lsa->oi != nbr->oi)
Jiri Skala 2e0a992
+      if (nbr->oi && ospf_if_exists (lsa->oi) != nbr->oi)
Jiri Skala 2e0a992
           return 0;
Jiri Skala 2e0a992
       break;
Jiri Skala 2e0a992
     case OSPF_OPAQUE_AREA_LSA:
Jiri Skala 2e0a992
diff --git a/ospfd/ospf_opaque.c b/ospfd/ospf_opaque.c
Jiri Skala 2e0a992
index 6e90011..aa126e1 100644
Jiri Skala 2e0a992
--- a/ospfd/ospf_opaque.c
Jiri Skala 2e0a992
+++ b/ospfd/ospf_opaque.c
Jiri Skala 2e0a992
@@ -251,7 +251,7 @@ struct ospf_opaque_functab
Jiri Skala 2e0a992
   void (* config_write_debug )(struct vty *vty);
Jiri Skala 2e0a992
   void (* show_opaque_info   )(struct vty *vty, struct ospf_lsa *lsa);
Jiri Skala 2e0a992
   int  (* lsa_originator)(void *arg);
Jiri Skala 2e0a992
-  void (* lsa_refresher )(struct ospf_lsa *lsa);
Jiri Skala 2e0a992
+  struct ospf_lsa *(* lsa_refresher )(struct ospf_lsa *lsa);
Jiri Skala 2e0a992
   int (* new_lsa_hook)(struct ospf_lsa *lsa);
Jiri Skala 2e0a992
   int (* del_lsa_hook)(struct ospf_lsa *lsa);
Jiri Skala 2e0a992
 };
Jiri Skala 2e0a992
@@ -354,7 +354,7 @@ ospf_register_opaque_functab (
Jiri Skala 2e0a992
   void (* config_write_debug )(struct vty *vty),
Jiri Skala 2e0a992
   void (* show_opaque_info   )(struct vty *vty, struct ospf_lsa *lsa),
Jiri Skala 2e0a992
   int  (* lsa_originator)(void *arg),
Jiri Skala 2e0a992
-  void (* lsa_refresher )(struct ospf_lsa *lsa),
Jiri Skala 2e0a992
+  struct ospf_lsa *(* lsa_refresher )(struct ospf_lsa *lsa),
Jiri Skala 2e0a992
   int (* new_lsa_hook)(struct ospf_lsa *lsa),
Jiri Skala 2e0a992
   int (* del_lsa_hook)(struct ospf_lsa *lsa))
Jiri Skala 2e0a992
 {
Jiri Skala 2e0a992
@@ -1608,12 +1608,13 @@ out:
Jiri Skala 2e0a992
   return new;
Jiri Skala 2e0a992
 }
Jiri Skala 2e0a992
 
Jiri Skala 2e0a992
-void
Jiri Skala 2e0a992
+struct ospf_lsa *
Jiri Skala 2e0a992
 ospf_opaque_lsa_refresh (struct ospf_lsa *lsa)
Jiri Skala 2e0a992
 {
Jiri Skala 2e0a992
   struct ospf *ospf;
Jiri Skala 2e0a992
   struct ospf_opaque_functab *functab;
Jiri Skala 2e0a992
-
Jiri Skala 2e0a992
+  struct ospf_lsa *new = NULL;
Jiri Skala 2e0a992
+  
Jiri Skala 2e0a992
   ospf = ospf_lookup ();
Jiri Skala 2e0a992
 
Jiri Skala 2e0a992
   if ((functab = ospf_opaque_functab_lookup (lsa)) == NULL
Jiri Skala 2e0a992
@@ -1633,9 +1634,9 @@ ospf_opaque_lsa_refresh (struct ospf_lsa *lsa)
Jiri Skala 2e0a992
       ospf_lsa_flush (ospf, lsa);
Jiri Skala 2e0a992
     }
Jiri Skala 2e0a992
   else
Jiri Skala 2e0a992
-    (* functab->lsa_refresher)(lsa);
Jiri Skala 2e0a992
+    new = (* functab->lsa_refresher)(lsa);
Jiri Skala 2e0a992
 
Jiri Skala 2e0a992
-  return;
Jiri Skala 2e0a992
+  return new;
Jiri Skala 2e0a992
 }
Jiri Skala 2e0a992
 
Jiri Skala 2e0a992
 /*------------------------------------------------------------------------*
Jiri Skala 2e0a992
diff --git a/ospfd/ospf_opaque.h b/ospfd/ospf_opaque.h
Jiri Skala 2e0a992
index f49fe46..2273064 100644
Jiri Skala 2e0a992
--- a/ospfd/ospf_opaque.h
Jiri Skala 2e0a992
+++ b/ospfd/ospf_opaque.h
Jiri Skala 2e0a992
@@ -120,7 +120,7 @@ ospf_register_opaque_functab (
Jiri Skala 2e0a992
   void (* config_write_debug )(struct vty *vty),
Jiri Skala 2e0a992
   void (* show_opaque_info   )(struct vty *vty, struct ospf_lsa *lsa),
Jiri Skala 2e0a992
   int  (* lsa_originator)(void *arg),
Jiri Skala 2e0a992
-  void (* lsa_refresher )(struct ospf_lsa *lsa),
Jiri Skala 2e0a992
+  struct ospf_lsa *(* lsa_refresher )(struct ospf_lsa *lsa),
Jiri Skala 2e0a992
   int (* new_lsa_hook)(struct ospf_lsa *lsa),
Jiri Skala 2e0a992
   int (* del_lsa_hook)(struct ospf_lsa *lsa)
Jiri Skala 2e0a992
 );
Jiri Skala 2e0a992
@@ -143,7 +143,7 @@ extern void ospf_opaque_lsa_originate_schedule (struct ospf_interface *oi,
Jiri Skala 2e0a992
 						int *init_delay);
Jiri Skala 2e0a992
 extern struct ospf_lsa *ospf_opaque_lsa_install (struct ospf_lsa *,
Jiri Skala 2e0a992
 						 int rt_recalc);
Jiri Skala 2e0a992
-extern void ospf_opaque_lsa_refresh (struct ospf_lsa *lsa);
Jiri Skala 2e0a992
+extern struct ospf_lsa *ospf_opaque_lsa_refresh (struct ospf_lsa *lsa);
Jiri Skala 2e0a992
 
Jiri Skala 2e0a992
 extern void ospf_opaque_lsa_reoriginate_schedule (void *lsa_type_dependent,
Jiri Skala 2e0a992
 						  u_char lsa_type,