diff --git a/configure.ac b/configure.ac
index 3003e62..5808db3 100755
--- a/configure.ac
+++ b/configure.ac
@@ -254,8 +254,6 @@
   AS_HELP_STRING([--with-libpam], [use libpam for PAM support in vtysh]))
 AC_ARG_ENABLE(tcp-zebra,
   AS_HELP_STRING([--enable-tcp-zebra], [enable TCP/IP socket connection between zebra and protocol daemon]))
-AC_ARG_ENABLE(opaque-lsa,
-  AS_HELP_STRING([--disable-opaque-lsa],[do not build OSPF Opaque-LSA with OSPFAPI support (RFC2370)]))
 AC_ARG_ENABLE(ospfapi,
   AS_HELP_STRING([--disable-ospfapi], [do not build OSPFAPI to access the OSPF LSA Database]))
 AC_ARG_ENABLE(ospfclient,
@@ -325,12 +323,7 @@
   AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
 fi
 
-if test "${enable_opaque_lsa}" != "no"; then
-  AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
-fi
-
 if test "${enable_ospf_te}" != "no"; then
-  AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
   AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
 fi
 
@@ -1155,16 +1148,14 @@
 AM_CONDITIONAL(WATCHQUAGGA, test "x$WATCHQUAGGA" = "xwatchquagga")
 
 OSPFCLIENT=""
-if test "${enable_opaque_lsa}" != "no"; then
-  if test "${enable_ospfapi}" != "no";then
+if test "${enable_ospfapi}" != "no";then
     AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
 
-    if test "${enable_ospfclient}" != "no";then
+  if test "${enable_ospfclient}" != "no";then
       OSPFCLIENT="ospfclient"
-    fi
   fi
-
 fi
+
 AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
 
 case "${enable_ripngd}" in
diff --git a/ospfd/ospf_api.c b/ospfd/ospf_api.c
index cbb234a..e92f162 100644
--- a/ospfd/ospf_api.c
+++ b/ospfd/ospf_api.c
@@ -23,9 +23,6 @@
 #include <zebra.h>
 
 #ifdef SUPPORT_OSPF_API
-#ifndef HAVE_OPAQUE_LSA
-#error "Core Opaque-LSA module must be configured."
-#endif /* HAVE_OPAQUE_LSA */
 
 #include "linklist.h"
 #include "prefix.h"
diff --git a/ospfd/ospf_apiserver.c b/ospfd/ospf_apiserver.c
index 92f68f7..aac8ef4 100644
--- a/ospfd/ospf_apiserver.c
+++ b/ospfd/ospf_apiserver.c
@@ -23,9 +23,6 @@
 #include <zebra.h>
 
 #ifdef SUPPORT_OSPF_API
-#ifndef HAVE_OPAQUE_LSA
-#error "Core Opaque-LSA module must be configured."
-#endif /* HAVE_OPAQUE_LSA */
 
 #include "linklist.h"
 #include "prefix.h"
diff --git a/ospfd/ospf_dump.c b/ospfd/ospf_dump.c
index ac93f1d..fb43210 100644
--- a/ospfd/ospf_dump.c
+++ b/ospfd/ospf_dump.c
@@ -619,13 +619,11 @@
 	case OSPF_AS_NSSA_LSA:
 	  ospf_as_external_lsa_dump (s, length);
 	  break;
-#ifdef HAVE_OPAQUE_LSA
 	case OSPF_OPAQUE_LINK_LSA:
 	case OSPF_OPAQUE_AREA_LSA:
 	case OSPF_OPAQUE_AS_LSA:
 	  ospf_opaque_lsa_dump (s, length);
 	  break;
-#endif /* HAVE_OPAQUE_LSA */
 	default:
 	  break;
 	}
diff --git a/ospfd/ospf_flood.c b/ospfd/ospf_flood.c
index df19adf..8de4974 100644
--- a/ospfd/ospf_flood.c
+++ b/ospfd/ospf_flood.c
@@ -138,9 +138,7 @@
       ospf_router_lsa_update_area (area);
       return;
     case OSPF_NETWORK_LSA:
-#ifdef HAVE_OPAQUE_LSA
     case OSPF_OPAQUE_LINK_LSA:
-#endif /* HAVE_OPAQUE_LSA */
       /* We must find the interface the LSA could belong to.
 	 If the interface is no more a broadcast type or we are no more
 	 the DR, we flush the LSA otherwise -- create the new instance and
@@ -160,13 +158,11 @@
                 return;
               }
             
-#ifdef HAVE_OPAQUE_LSA
             if (new->data->type == OSPF_OPAQUE_LINK_LSA)
               {
                 ospf_opaque_lsa_refresh (new);
                 return;
               }
-#endif /* HAVE_OPAQUE_LSA */
 
             if (oi->network_lsa_self)
 	      oi->network_lsa_self->data->ls_seqnum = new->data->ls_seqnum;
@@ -193,14 +189,12 @@
       else
         ospf_lsa_flush_as (ospf, new);
       break;
-#ifdef HAVE_OPAQUE_LSA
     case OSPF_OPAQUE_AREA_LSA:
       ospf_opaque_lsa_refresh (new);
       break;
     case OSPF_OPAQUE_AS_LSA:
       ospf_opaque_lsa_refresh (new); /* Reconsideration may needed. *//* XXX */
       break;
-#endif /* HAVE_OPAQUE_LSA */
     default:
       break;
     }
@@ -281,25 +275,17 @@
      interface. */
   lsa_ack_flag = ospf_flood_through (ospf, nbr, new);
 
-#ifdef HAVE_OPAQUE_LSA
   /* Remove the current database copy from all neighbors' Link state
      retransmission lists.  AS_EXTERNAL and AS_EXTERNAL_OPAQUE does
                                         ^^^^^^^^^^^^^^^^^^^^^^^
      not have area ID.
      All other (even NSSA's) do have area ID.  */
-#else /* HAVE_OPAQUE_LSA */
-  /* Remove the current database copy from all neighbors' Link state
-     retransmission lists.  Only AS_EXTERNAL does not have area ID.
-     All other (even NSSA's) do have area ID.  */
-#endif /* HAVE_OPAQUE_LSA */
   if (current)
     {
       switch (current->data->type)
         {
         case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_OPAQUE_LSA
         case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
           ospf_ls_retransmit_delete_nbr_as (ospf, current);
           break;
         default:
@@ -421,7 +407,6 @@
 	    }
 	}
 
-#ifdef HAVE_OPAQUE_LSA
       if (IS_OPAQUE_LSA (lsa->data->type))
         {
           if (! CHECK_FLAG (onbr->options, OSPF_OPTION_O))
@@ -431,7 +416,6 @@
               continue;
             }
         }
-#endif /* HAVE_OPAQUE_LSA */
 
       /* If the new LSA was received from this neighbor,
 	 examine the next neighbor. */
@@ -566,7 +550,6 @@
 	  oi->type ==  OSPF_IFTYPE_VIRTUALLINK) 
 	continue;
 
-#ifdef HAVE_OPAQUE_LSA
       if ((lsa->data->type == OSPF_OPAQUE_LINK_LSA) && (lsa->oi != oi))
         {
           /*
@@ -578,7 +561,6 @@
                         (void *)lsa->oi, (void *)oi);
           continue;
         }
-#endif /* HAVE_OPAQUE_LSA */
 
       if (ospf_flood_through_interface (oi, inbr, lsa))
 	lsa_ack_flag = 1;
@@ -688,16 +670,12 @@
     case OSPF_NETWORK_LSA:
     case OSPF_SUMMARY_LSA:
     case OSPF_ASBR_SUMMARY_LSA:
-#ifdef HAVE_OPAQUE_LSA
     case OSPF_OPAQUE_LINK_LSA: /* ospf_flood_through_interface ? */
     case OSPF_OPAQUE_AREA_LSA:
-#endif /* HAVE_OPAQUE_LSA */
       lsa_ack_flag = ospf_flood_through_area (inbr->oi->area, inbr, lsa);
       break;
     case OSPF_AS_EXTERNAL_LSA: /* Type-5 */
-#ifdef HAVE_OPAQUE_LSA
     case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
       lsa_ack_flag = ospf_flood_through_as (ospf, inbr, lsa);
       break;
       /* Type-7 Only received within NSSA, then flooded */
@@ -727,9 +705,7 @@
   switch (lsa->data->type)
     {
     case OSPF_AS_EXTERNAL_LSA: /* Type-5 */
-#ifdef HAVE_OPAQUE_LSA
     case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
       lsa_ack_flag = ospf_flood_through_as (ospf, inbr, lsa);
       break;
       /* Type-7 Only received within NSSA, then flooded */
@@ -1006,16 +982,12 @@
       case OSPF_SUMMARY_LSA:
       case OSPF_ASBR_SUMMARY_LSA:
       case OSPF_AS_NSSA_LSA:
-#ifdef HAVE_OPAQUE_LSA
       case OSPF_OPAQUE_LINK_LSA:
       case OSPF_OPAQUE_AREA_LSA:
-#endif /* HAVE_OPAQUE_LSA */
         ospf_lsa_flush_area (lsa, lsa->area);
         break;
       case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_OPAQUE_LSA
       case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
         ospf_lsa_flush_as (ospf, lsa);
         break;
       default:
diff --git a/ospfd/ospf_interface.c b/ospfd/ospf_interface.c
index f41c4f1..f4242b0 100644
--- a/ospfd/ospf_interface.c
+++ b/ospfd/ospf_interface.c
@@ -241,9 +241,7 @@
 
   oi->crypt_seqnum = time (NULL);
 
-#ifdef HAVE_OPAQUE_LSA
   ospf_opaque_type9_lsa_init (oi);
-#endif /* HAVE_OPAQUE_LSA */
 
   oi->ospf = ospf;
   
@@ -305,9 +303,7 @@
 
   assert (oi->state == ISM_Down);
 
-#ifdef HAVE_OPAQUE_LSA
   ospf_opaque_type9_lsa_term (oi);
-#endif /* HAVE_OPAQUE_LSA */
 
   /* Free Pseudo Neighbour */
   ospf_nbr_delete (oi->nbr_self);
@@ -686,9 +682,7 @@
   SET_IF_PARAM (IF_DEF_PARAMS (ifp), auth_type);
   IF_DEF_PARAMS (ifp)->auth_type = OSPF_AUTH_NOTSET;
   
-#ifdef HAVE_OPAQUE_LSA
   rc = ospf_opaque_new_if (ifp);
-#endif /* HAVE_OPAQUE_LSA */
   return rc;
 }
 
@@ -697,9 +691,7 @@
 {
   int rc = 0;
   struct route_node *rn;
-#ifdef HAVE_OPAQUE_LSA
   rc = ospf_opaque_del_if (ifp);
-#endif /* HAVE_OPAQUE_LSA */
 
   route_table_finish (IF_OIFS (ifp));
 
diff --git a/ospfd/ospf_interface.h b/ospfd/ospf_interface.h
index 2ed426f..69b9b40 100644
--- a/ospfd/ospf_interface.h
+++ b/ospfd/ospf_interface.h
@@ -193,9 +193,7 @@
 
   /* self-originated LSAs. */
   struct ospf_lsa *network_lsa_self;	/* network-LSA. */
-#ifdef HAVE_OPAQUE_LSA
   struct list *opaque_lsa_self;			/* Type-9 Opaque-LSAs */
-#endif /* HAVE_OPAQUE_LSA */
 
   struct route_table *ls_upd_queue;
 
@@ -216,9 +214,7 @@
   struct thread *t_ls_ack;              /* timer */
   struct thread *t_ls_ack_direct;       /* event */
   struct thread *t_ls_upd_event;        /* event */
-#ifdef HAVE_OPAQUE_LSA
   struct thread *t_opaque_lsa_self;     /* Type-9 Opaque-LSAs */
-#endif /* HAVE_OPAQUE_LSA */
 
   int on_write_q;
   
diff --git a/ospfd/ospf_ism.c b/ospfd/ospf_ism.c
index 9649df8..ae6d0cd 100644
--- a/ospfd/ospf_ism.c
+++ b/ospfd/ospf_ism.c
@@ -593,9 +593,7 @@
       oi->network_lsa_self = NULL;
     }
 
-#ifdef HAVE_OPAQUE_LSA
   ospf_opaque_ism_change (oi, old_state);
-#endif /* HAVE_OPAQUE_LSA */
 
   /* Check area border status.  */
   ospf_check_abr_status (oi->ospf);
diff --git a/ospfd/ospf_lsa.c b/ospfd/ospf_lsa.c
index 6bd8c3e..634bc43 100644
--- a/ospfd/ospf_lsa.c
+++ b/ospfd/ospf_lsa.c
@@ -2594,11 +2594,9 @@
       ospf_ase_unregister_external_lsa (old, ospf);
       ospf_ls_retransmit_delete_nbr_as (ospf, old);
       break;
-#ifdef HAVE_OPAQUE_LSA
     case OSPF_OPAQUE_AS_LSA:
       ospf_ls_retransmit_delete_nbr_as (ospf, old);
       break;
-#endif /* HAVE_OPAQUE_LSA */
     case OSPF_AS_NSSA_LSA:
       ospf_ls_retransmit_delete_nbr_area (old->area, old);
       ospf_ase_unregister_external_lsa (old, ospf);
@@ -2632,9 +2630,7 @@
 	lsdb = ospf->lsdb;
       break;
     case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_OPAQUE_LSA
     case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
       lsdb = ospf->lsdb;
       break;
     default:
@@ -2746,7 +2742,6 @@
     case OSPF_AS_EXTERNAL_LSA:
       new = ospf_external_lsa_install (ospf, lsa, rt_recalc);
       break;
-#ifdef HAVE_OPAQUE_LSA
     case OSPF_OPAQUE_LINK_LSA:
       if (IS_LSA_SELF (lsa))
 	lsa->oi = oi; /* Specify outgoing ospf-interface for this LSA. */
@@ -2759,7 +2754,6 @@
     case OSPF_OPAQUE_AS_LSA:
       new = ospf_opaque_lsa_install (lsa, rt_recalc);
       break;
-#endif /* HAVE_OPAQUE_LSA */
     case OSPF_AS_NSSA_LSA:
       new = ospf_external_lsa_install (ospf, lsa, rt_recalc);
     default: /* type-6,8,9....nothing special */
@@ -2777,9 +2771,7 @@
       switch (lsa->data->type)
         {
         case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_OPAQUE_LSA
         case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
         case OSPF_AS_NSSA_LSA:
           zlog_debug ("LSA[%s]: Install %s",
                  dump_lsa_key (new),
@@ -3013,7 +3005,6 @@
 
         switch (lsa->data->type)
           {
-#ifdef HAVE_OPAQUE_LSA
           case OSPF_OPAQUE_LINK_LSA:
           case OSPF_OPAQUE_AREA_LSA:
           case OSPF_OPAQUE_AS_LSA:
@@ -3026,7 +3017,6 @@
              * topology, and thus, routing recalculation is not needed here.
              */
             break;
-#endif /* HAVE_OPAQUE_LSA */
           case OSPF_AS_EXTERNAL_LSA:
           case OSPF_AS_NSSA_LSA:
 	    ospf_ase_incremental_update (ospf, lsa);
@@ -3067,12 +3057,10 @@
 	ospf_lsa_maxage_walker_remover (ospf, lsa);
       LSDB_LOOP (ASBR_SUMMARY_LSDB (area), rn, lsa)
 	ospf_lsa_maxage_walker_remover (ospf, lsa);
-#ifdef HAVE_OPAQUE_LSA
       LSDB_LOOP (OPAQUE_AREA_LSDB (area), rn, lsa)
 	ospf_lsa_maxage_walker_remover (ospf, lsa);
       LSDB_LOOP (OPAQUE_LINK_LSDB (area), rn, lsa)
 	ospf_lsa_maxage_walker_remover (ospf, lsa);
-#endif /* HAVE_OPAQUE_LSA */
       LSDB_LOOP (NSSA_LSDB (area), rn, lsa)
         ospf_lsa_maxage_walker_remover (ospf, lsa);
     }
@@ -3082,10 +3070,8 @@
     {
       LSDB_LOOP (EXTERNAL_LSDB (ospf), rn, lsa)
 	ospf_lsa_maxage_walker_remover (ospf, lsa);
-#ifdef HAVE_OPAQUE_LSA
       LSDB_LOOP (OPAQUE_AS_LSDB (ospf), rn, lsa)
 	ospf_lsa_maxage_walker_remover (ospf, lsa);
-#endif /* HAVE_OPAQUE_LSA */
     }
 
   OSPF_TIMER_ON (ospf->t_maxage_walker, ospf_lsa_maxage_walker,
@@ -3138,15 +3124,11 @@
     case OSPF_SUMMARY_LSA:
     case OSPF_ASBR_SUMMARY_LSA:
     case OSPF_AS_NSSA_LSA:
-#ifdef HAVE_OPAQUE_LSA
     case OSPF_OPAQUE_LINK_LSA:
     case OSPF_OPAQUE_AREA_LSA:
-#endif /* HAVE_OPAQUE_LSA */
       return ospf_lsdb_lookup_by_id (area->lsdb, type, id, adv_router);
     case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_OPAQUE_LSA
     case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
       return ospf_lsdb_lookup_by_id (ospf->lsdb, type, id, adv_router);
     default:
       break;
@@ -3182,13 +3164,11 @@
       return ospf_lsdb_lookup_by_id (area->lsdb, type, id, id);
     case OSPF_AS_EXTERNAL_LSA:
     case OSPF_AS_NSSA_LSA:
-#ifdef HAVE_OPAQUE_LSA
     case OSPF_OPAQUE_LINK_LSA:
     case OSPF_OPAQUE_AREA_LSA:
     case OSPF_OPAQUE_AS_LSA:
       /* Currently not used. */
       break;
-#endif /* HAVE_OPAQUE_LSA */
     default:
       break;
     }
@@ -3201,14 +3181,12 @@
 {
   struct ospf_lsa *match;
 
-#ifdef HAVE_OPAQUE_LSA
   /*
    * Strictly speaking, the LSA-ID field for Opaque-LSAs (type-9/10/11)
    * is redefined to have two subfields; opaque-type and opaque-id.
    * However, it is harmless to treat the two sub fields together, as if
    * they two were forming a unique LSA-ID.
    */
-#endif /* HAVE_OPAQUE_LSA */
 
   match = ospf_lsa_lookup (area, lsah->type, lsah->id, lsah->adv_router);
 
@@ -3359,14 +3337,12 @@
 
   switch (lsa->data->type)
     {
-#ifdef HAVE_OPAQUE_LSA
     /* Opaque wants to be notified of flushes */
     case OSPF_OPAQUE_LINK_LSA:
     case OSPF_OPAQUE_AREA_LSA:
     case OSPF_OPAQUE_AS_LSA:
       ospf_opaque_lsa_refresh (lsa);
       break;
-#endif /* HAVE_OPAQUE_LSA */
     default:
       ospf_refresher_unregister_lsa (ospf, lsa);
       ospf_lsa_flush (ospf, lsa);
@@ -3426,22 +3402,18 @@
 	ospf_lsa_flush_schedule (ospf, lsa);
       LSDB_LOOP (ASBR_SUMMARY_LSDB (area), rn, lsa)
 	ospf_lsa_flush_schedule (ospf, lsa);
-#ifdef HAVE_OPAQUE_LSA
       LSDB_LOOP (OPAQUE_LINK_LSDB (area), rn, lsa)
 	ospf_lsa_flush_schedule (ospf, lsa);
       LSDB_LOOP (OPAQUE_AREA_LSDB (area), rn, lsa)
 	ospf_lsa_flush_schedule (ospf, lsa);
-#endif /* HAVE_OPAQUE_LSA */
     }
 
   if (need_to_flush_ase)
     {
       LSDB_LOOP (EXTERNAL_LSDB (ospf), rn, lsa)
 	ospf_lsa_flush_schedule (ospf, lsa);
-#ifdef HAVE_OPAQUE_LSA
       LSDB_LOOP (OPAQUE_AS_LSDB (ospf), rn, lsa)
 	ospf_lsa_flush_schedule (ospf, lsa);
-#endif /* HAVE_OPAQUE_LSA */
     }
 
   /*
@@ -3650,13 +3622,11 @@
       else
         ospf_lsa_flush_as (ospf, lsa);
       break;
-#ifdef HAVE_OPAQUE_LSA
     case OSPF_OPAQUE_LINK_LSA:
     case OSPF_OPAQUE_AREA_LSA:
     case OSPF_OPAQUE_AS_LSA:
       new = ospf_opaque_lsa_refresh (lsa);
       break;
-#endif /* HAVE_OPAQUE_LSA */
     default:
       break;
     }
diff --git a/ospfd/ospf_lsa.h b/ospfd/ospf_lsa.h
index c940724..3c87962 100644
--- a/ospfd/ospf_lsa.h
+++ b/ospfd/ospf_lsa.h
@@ -27,11 +27,7 @@
 
 /* OSPF LSA Range definition. */
 #define OSPF_MIN_LSA		1  /* begin range here */
-#if defined (HAVE_OPAQUE_LSA)
 #define OSPF_MAX_LSA           12
-#else
-#define OSPF_MAX_LSA		8
-#endif
 
 /* OSPF LSA Type definition. */
 #define OSPF_UNKNOWN_LSA	      0
@@ -211,9 +207,7 @@
   } e[1];
 };
 
-#ifdef HAVE_OPAQUE_LSA
 #include "ospfd/ospf_opaque.h"
-#endif /* HAVE_OPAQUE_LSA */
 
 /* Macros. */
 #define GET_METRIC(x) get_metric(x)
diff --git a/ospfd/ospf_main.c b/ospfd/ospf_main.c
index 1e4184f..f373650 100644
--- a/ospfd/ospf_main.c
+++ b/ospfd/ospf_main.c
@@ -308,9 +308,7 @@
 #ifdef HAVE_SNMP
   ospf_snmp_init ();
 #endif /* HAVE_SNMP */
-#ifdef HAVE_OPAQUE_LSA
   ospf_opaque_init ();
-#endif /* HAVE_OPAQUE_LSA */
   
   /* Get configuration file. */
   vty_read_config (config_file, config_default);
diff --git a/ospfd/ospf_neighbor.c b/ospfd/ospf_neighbor.c
index 23a6417..862de5e 100644
--- a/ospfd/ospf_neighbor.c
+++ b/ospfd/ospf_neighbor.c
@@ -272,7 +272,6 @@
   return count;
 }
 
-#ifdef HAVE_OPAQUE_LSA
 int
 ospf_nbr_count_opaque_capable (struct ospf_interface *oi)
 {
@@ -289,7 +288,6 @@
 
   return count;
 }
-#endif /* HAVE_OPAQUE_LSA */
 
 /* lookup nbr by address - use this only if you know you must
  * otherwise use the ospf_nbr_lookup() wrapper, which deals
diff --git a/ospfd/ospf_neighbor.h b/ospfd/ospf_neighbor.h
index 822c202..38f8cb5 100644
--- a/ospfd/ospf_neighbor.h
+++ b/ospfd/ospf_neighbor.h
@@ -102,9 +102,7 @@
 extern void ospf_nbr_self_reset (struct ospf_interface *);
 extern void ospf_nbr_add_self (struct ospf_interface *);
 extern int ospf_nbr_count (struct ospf_interface *, int);
-#ifdef HAVE_OPAQUE_LSA
 extern int ospf_nbr_count_opaque_capable (struct ospf_interface *);
-#endif /* HAVE_OPAQUE_LSA */
 extern struct ospf_neighbor *ospf_nbr_get (struct ospf_interface *,
 					   struct ospf_header *,
 					   struct ip *, struct prefix *);
diff --git a/ospfd/ospf_nsm.c b/ospfd/ospf_nsm.c
index 4fecb59..b43d885 100644
--- a/ospfd/ospf_nsm.c
+++ b/ospfd/ospf_nsm.c
@@ -208,7 +208,6 @@
 static int
 ospf_db_summary_add (struct ospf_neighbor *nbr, struct ospf_lsa *lsa)
 {
-#ifdef HAVE_OPAQUE_LSA
   switch (lsa->data->type)
     {
     case OSPF_OPAQUE_LINK_LSA:
@@ -226,7 +225,6 @@
     default:
       break;
     }
-#endif /* HAVE_OPAQUE_LSA */
 
   /* Stay away from any Local Translated Type-7 LSAs */
   if (CHECK_FLAG (lsa->flags, OSPF_LSA_LOCAL_XLT))
@@ -282,7 +280,6 @@
   LSDB_LOOP (ASBR_SUMMARY_LSDB (area), rn, lsa)
     ospf_db_summary_add (nbr, lsa);
 
-#ifdef HAVE_OPAQUE_LSA
   /* Process only if the neighbor is opaque capable. */
   if (CHECK_FLAG (nbr->options, OSPF_OPTION_O))
     {
@@ -291,7 +288,6 @@
       LSDB_LOOP (OPAQUE_AREA_LSDB (area), rn, lsa)
 	ospf_db_summary_add (nbr, lsa);
     }
-#endif /* HAVE_OPAQUE_LSA */
 
   if (CHECK_FLAG (nbr->options, OSPF_OPTION_NP))
     {
@@ -304,13 +300,11 @@
     LSDB_LOOP (EXTERNAL_LSDB (nbr->oi->ospf), rn, lsa)
       ospf_db_summary_add (nbr, lsa);
 
-#ifdef HAVE_OPAQUE_LSA
   if (CHECK_FLAG (nbr->options, OSPF_OPTION_O)
       && (nbr->oi->type != OSPF_IFTYPE_VIRTUALLINK
 	  && area->external_routing == OSPF_AREA_DEFAULT))
     LSDB_LOOP (OPAQUE_AS_LSDB (nbr->oi->ospf), rn, lsa)
       ospf_db_summary_add (nbr, lsa);
-#endif /* HAVE_OPAQUE_LSA */
 
   return 0;
 }
@@ -360,10 +354,8 @@
   if (!ospf_ls_retransmit_isempty (nbr))
     ospf_ls_retransmit_clear (nbr);
 
-#ifdef HAVE_OPAQUE_LSA
   if (CHECK_FLAG (nbr->options, OSPF_OPTION_O))
     UNSET_FLAG (nbr->options, OSPF_OPTION_O);
-#endif /* HAVE_OPAQUE_LSA */
 }
 
 static int
@@ -735,9 +727,7 @@
 	}
     }
 
-#ifdef HAVE_OPAQUE_LSA
   ospf_opaque_nsm_change (nbr, old_state);
-#endif /* HAVE_OPAQUE_LSA */
 
   /* State changes from > ExStart to <= ExStart should clear any Exchange
    * or Full/LSA Update related lists and state.
diff --git a/ospfd/ospf_opaque.c b/ospfd/ospf_opaque.c
index 6428480..215676e 100644
--- a/ospfd/ospf_opaque.c
+++ b/ospfd/ospf_opaque.c
@@ -27,7 +27,6 @@
 #define MTYPE_OPAQUE_INFO_PER_ID	0
 
 #include <zebra.h>
-#ifdef HAVE_OPAQUE_LSA
 
 #include "linklist.h"
 #include "prefix.h"
@@ -2179,4 +2178,3 @@
   return top;
 }
 
-#endif /* HAVE_OPAQUE_LSA */
diff --git a/ospfd/ospf_packet.c b/ospfd/ospf_packet.c
index 117401c..25f70bb 100644
--- a/ospfd/ospf_packet.c
+++ b/ospfd/ospf_packet.c
@@ -894,7 +894,6 @@
     }
 #endif /* REJECT_IF_TBIT_ON */
 
-#ifdef HAVE_OPAQUE_LSA
   if (CHECK_FLAG (oi->ospf->config, OSPF_OPAQUE_CAPABLE)
       && CHECK_FLAG (hello->options, OSPF_OPTION_O))
     {
@@ -910,7 +909,6 @@
       UNSET_FLAG (hello->options, OSPF_OPTION_O); /* Ignore O-bit. */
 #endif /* STRICT_OBIT_USAGE_CHECK */
     }
-#endif /* HAVE_OPAQUE_LSA */
 
   /* new for NSSA is to ensure that NP is on and E is off */
 
@@ -1062,7 +1060,6 @@
 	  return;
 	}
 
-#ifdef HAVE_OPAQUE_LSA
       if (IS_OPAQUE_LSA (lsah->type)
       &&  ! CHECK_FLAG (nbr->options, OSPF_OPTION_O))
         {
@@ -1070,14 +1067,11 @@
           OSPF_NSM_EVENT_SCHEDULE (nbr, NSM_SeqNumberMismatch);
           return;
         }
-#endif /* HAVE_OPAQUE_LSA */
 
       switch (lsah->type)
         {
         case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_OPAQUE_LSA
 	case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
           /* Check for stub area.  Reject if AS-External from stub but
              allow if from NSSA. */
           if (oi->area->external_routing == OSPF_AREA_STUB)
@@ -1248,7 +1242,6 @@
     }
 #endif /* REJECT_IF_TBIT_ON */
 
-#ifdef HAVE_OPAQUE_LSA
   if (CHECK_FLAG (dd->options, OSPF_OPTION_O)
       && !CHECK_FLAG (oi->ospf->config, OSPF_OPAQUE_CAPABLE))
     {
@@ -1258,7 +1251,6 @@
        */
       UNSET_FLAG (dd->options, OSPF_OPTION_O);
     }
-#endif /* HAVE_OPAQUE_LSA */
 
   /* Add event to thread. */
   OSPF_NSM_EVENT_SCHEDULE (nbr, NSM_PacketReceived);
@@ -1323,7 +1315,6 @@
       /* This is where the real Options are saved */
       nbr->options = dd->options;
 
-#ifdef HAVE_OPAQUE_LSA
       if (CHECK_FLAG (oi->ospf->config, OSPF_OPAQUE_CAPABLE))
         {
           if (IS_DEBUG_OSPF_EVENT)
@@ -1341,7 +1332,6 @@
               /* This situation is undesirable, but not a real error. */
             }
         }
-#endif /* HAVE_OPAQUE_LSA */
 
       OSPF_NSM_EVENT_EXECUTE (nbr, NSM_NegotiationDone);
 
@@ -1619,7 +1609,6 @@
       if (ntohs (lsah->ls_age) > OSPF_LSA_MAXAGE)
         lsah->ls_age = htons (OSPF_LSA_MAXAGE);
 
-#ifdef HAVE_OPAQUE_LSA
       if (CHECK_FLAG (nbr->options, OSPF_OPTION_O))
         {
 #ifdef STRICT_OBIT_USAGE_CHECK
@@ -1651,7 +1640,6 @@
           zlog_warn ("LSA[Type%d:%s]: Opaque capability mismatch?", lsah->type, inet_ntoa (lsah->id));
           continue;
         }
-#endif /* HAVE_OPAQUE_LSA */
 
       /* Create OSPF LSA instance. */
       lsa = ospf_lsa_new ();
@@ -1661,16 +1649,12 @@
       switch (lsah->type)
         {
         case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_OPAQUE_LSA
         case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
           lsa->area = NULL;
           break;
-#ifdef HAVE_OPAQUE_LSA
         case OSPF_OPAQUE_LINK_LSA:
           lsa->oi = oi; /* Remember incoming interface for flooding control. */
           /* Fallthrough */
-#endif /* HAVE_OPAQUE_LSA */
         default:
           lsa->area = oi->area;
           break;
@@ -1857,7 +1841,6 @@
           DISCARD_LSA (lsa, 3);
 	}
 
-#ifdef HAVE_OPAQUE_LSA
       if (IS_OPAQUE_LSA (lsa->data->type)
       &&  IPV4_ADDR_SAME (&lsa->data->adv_router, &oi->ospf->router_id))
         {
@@ -1905,7 +1888,6 @@
               continue;
             }
         }
-#endif /* HAVE_OPAQUE_LSA */
 
       /* It might be happen that received LSA is self-originated network LSA, but
        * router ID is changed. So, we should check if LSA is a network-LSA whose
@@ -2481,7 +2463,6 @@
   case OSPF_SUMMARY_LSA:
   case OSPF_ASBR_SUMMARY_LSA:
     /* RFC2328 A.4.4, LSA header + 4 bytes followed by N>=1 4-bytes TOS blocks */
-#ifdef HAVE_OPAQUE_LSA
   case OSPF_OPAQUE_LINK_LSA:
   case OSPF_OPAQUE_AREA_LSA:
   case OSPF_OPAQUE_AS_LSA:
@@ -2489,7 +2470,6 @@
      * data) padded to 32-bit alignment." This is considered equivalent
      * to 4-byte alignment of all other LSA types, see OSPF-ALIGNMENT.txt
      * file for the detailed analysis of this passage. */
-#endif
     ret = lsalen % 4 ? MSG_NG : MSG_OK;
     break;
   default:
@@ -3120,10 +3100,8 @@
 
   /* Set Options. */
   options = OPTIONS (oi);
-#ifdef HAVE_OPAQUE_LSA
   if (CHECK_FLAG (oi->ospf->config, OSPF_OPAQUE_CAPABLE))
     SET_FLAG (options, OSPF_OPTION_O);
-#endif /* HAVE_OPAQUE_LSA */
   stream_putc (s, options);
 
   /* DD flags */
@@ -3148,7 +3126,6 @@
       for (rn = route_top (table); rn; rn = route_next (rn))
 	if ((lsa = rn->info) != NULL)
 	  {
-#ifdef HAVE_OPAQUE_LSA
             if (IS_OPAQUE_LSA (lsa->data->type)
             && (! CHECK_FLAG (options, OSPF_OPTION_O)))
               {
@@ -3157,7 +3134,6 @@
                 ospf_lsdb_delete (lsdb, lsa);
                 continue;
               }
-#endif /* HAVE_OPAQUE_LSA */
 
 	    if (!CHECK_FLAG (lsa->flags, OSPF_LSA_DISCARD))
 	      {
diff --git a/ospfd/ospf_te.c b/ospfd/ospf_te.c
index bcb8963..fe14235 100644
--- a/ospfd/ospf_te.c
+++ b/ospfd/ospf_te.c
@@ -27,9 +27,6 @@
 #include <zebra.h>
 
 #ifdef HAVE_OSPF_TE
-#ifndef HAVE_OPAQUE_LSA
-#error "Wrong configure option"
-#endif /* HAVE_OPAQUE_LSA */
 
 #include "linklist.h"
 #include "prefix.h"
diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c
index 45a19c0..fb17dff 100644
--- a/ospfd/ospf_vty.c
+++ b/ospfd/ospf_vty.c
@@ -2786,14 +2786,12 @@
   vty_out (vty, "   Number of NSSA LSA %ld. Checksum Sum 0x%08x%s",
            ospf_lsdb_count (area->lsdb, OSPF_AS_NSSA_LSA),
            ospf_lsdb_checksum (area->lsdb, OSPF_AS_NSSA_LSA), VTY_NEWLINE);
-#ifdef HAVE_OPAQUE_LSA
   vty_out (vty, "   Number of opaque link LSA %ld. Checksum Sum 0x%08x%s",
            ospf_lsdb_count (area->lsdb, OSPF_OPAQUE_LINK_LSA),
            ospf_lsdb_checksum (area->lsdb, OSPF_OPAQUE_LINK_LSA), VTY_NEWLINE);
   vty_out (vty, "   Number of opaque area LSA %ld. Checksum Sum 0x%08x%s",
            ospf_lsdb_count (area->lsdb, OSPF_OPAQUE_AREA_LSA),
            ospf_lsdb_checksum (area->lsdb, OSPF_OPAQUE_AREA_LSA), VTY_NEWLINE);
-#endif /* HAVE_OPAQUE_LSA */
   vty_out (vty, "%s", VTY_NEWLINE);
 }
 
@@ -2834,12 +2832,10 @@
   vty_out (vty, " RFC1583Compatibility flag is %s%s",
 	   CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE) ?
 	   "enabled" : "disabled", VTY_NEWLINE);
-#ifdef HAVE_OPAQUE_LSA
   vty_out (vty, " OpaqueCapability flag is %s%s",
 	   CHECK_FLAG (ospf->config, OSPF_OPAQUE_CAPABLE) ?
            "enabled" : "disabled",
            VTY_NEWLINE);
-#endif /* HAVE_OPAQUE_LSA */
   
   /* Show stub-router configuration */
   if (ospf->stub_router_startup_time != OSPF_STUB_ROUTER_UNCONFIGURED
@@ -2899,11 +2895,9 @@
   vty_out (vty, " Number of external LSA %ld. Checksum Sum 0x%08x%s",
 	   ospf_lsdb_count (ospf->lsdb, OSPF_AS_EXTERNAL_LSA),
 	   ospf_lsdb_checksum (ospf->lsdb, OSPF_AS_EXTERNAL_LSA), VTY_NEWLINE);
-#ifdef HAVE_OPAQUE_LSA
   vty_out (vty, " Number of opaque AS LSA %ld. Checksum Sum 0x%08x%s",
 	   ospf_lsdb_count (ospf->lsdb, OSPF_OPAQUE_AS_LSA),
 	   ospf_lsdb_checksum (ospf->lsdb, OSPF_OPAQUE_AS_LSA), VTY_NEWLINE);
-#endif /* HAVE_OPAQUE_LSA */
   /* Show number of areas attached. */
   vty_out (vty, " Number of areas attached to this router: %d%s",
            listcount (ospf->areas), VTY_NEWLINE);
@@ -3606,11 +3600,9 @@
 	    break;
 	  case OSPF_NETWORK_LSA:
 	  case OSPF_ASBR_SUMMARY_LSA:
-#ifdef HAVE_OPAQUE_LSA
 	  case OSPF_OPAQUE_LINK_LSA:
 	  case OSPF_OPAQUE_AREA_LSA:
 	  case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
 	  default:
 	    break;
 	  }
@@ -3630,12 +3622,10 @@
   "AS External Link States",
   "Group Membership LSA",
   "NSSA-external Link States",
-#ifdef HAVE_OPAQUE_LSA
   "Type-8 LSA",
   "Link-Local Opaque-LSA",
   "Area-Local Opaque-LSA",
   "AS-external Opaque-LSA",
-#endif /* HAVE_OPAQUE_LSA */
 };
 
 static const char *show_database_header[] =
@@ -3648,12 +3638,10 @@
   "Link ID         ADV Router      Age  Seq#       CkSum  Route",
   " --- header for Group Member ----",
   "Link ID         ADV Router      Age  Seq#       CkSum  Route",
-#ifdef HAVE_OPAQUE_LSA
   " --- type-8 ---",
   "Opaque-Type/Id  ADV Router      Age  Seq#       CkSum",
   "Opaque-Type/Id  ADV Router      Age  Seq#       CkSum",
   "Opaque-Type/Id  ADV Router      Age  Seq#       CkSum",
-#endif /* HAVE_OPAQUE_LSA */
 };
 
 static void
@@ -3925,7 +3913,6 @@
   return 0;
 }
 
-#ifdef HAVE_OPAQUE_LSA
 static int
 show_opaque_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
 {
@@ -3938,7 +3925,6 @@
     }
   return 0;
 }
-#endif /* HAVE_OPAQUE_LSA */
 
 int (*show_function[])(struct vty *, struct ospf_lsa *) =
 {
@@ -3950,12 +3936,10 @@
   show_as_external_lsa_detail,
   show_func_dummy,
   show_as_nssa_lsa_detail,  /* almost same as external */
-#ifdef HAVE_OPAQUE_LSA
   NULL,				/* type-8 */
   show_opaque_lsa_detail,
   show_opaque_lsa_detail,
   show_opaque_lsa_detail,
-#endif /* HAVE_OPAQUE_LSA */
 };
 
 static void
@@ -4014,9 +3998,7 @@
   switch (type)
     {
     case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_OPAQUE_LSA
     case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
       vty_out (vty, "                %s %s%s",
                show_database_desc[type],
                VTY_NEWLINE, VTY_NEWLINE);
@@ -4063,9 +4045,7 @@
   switch (type)
     {
     case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_OPAQUE_LSA
     case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
       vty_out (vty, "                %s %s%s",
                show_database_desc[type],
                VTY_NEWLINE, VTY_NEWLINE);
@@ -4101,9 +4081,7 @@
 	  switch (type)
 	    {
 	    case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_OPAQUE_LSA
             case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
 	      continue;
 	    default:
 	      break;
@@ -4130,9 +4108,7 @@
       switch (type)
         {
           case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_OPAQUE_LSA
           case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
             break;
           default:
             continue;
@@ -4184,17 +4160,10 @@
 #define OSPF_LSA_TYPE_NSSA_DESC      "NSSA external link state\n"
 #define OSPF_LSA_TYPE_NSSA_CMD_STR   "|nssa-external"
 
-#ifdef HAVE_OPAQUE_LSA
 #define OSPF_LSA_TYPE_OPAQUE_LINK_DESC "Link local Opaque-LSA\n"
 #define OSPF_LSA_TYPE_OPAQUE_AREA_DESC "Link area Opaque-LSA\n"
 #define OSPF_LSA_TYPE_OPAQUE_AS_DESC   "Link AS Opaque-LSA\n"
 #define OSPF_LSA_TYPE_OPAQUE_CMD_STR   "|opaque-link|opaque-area|opaque-as"
-#else /* HAVE_OPAQUE_LSA */
-#define OSPF_LSA_TYPE_OPAQUE_LINK_DESC ""
-#define OSPF_LSA_TYPE_OPAQUE_AREA_DESC ""
-#define OSPF_LSA_TYPE_OPAQUE_AS_DESC   ""
-#define OSPF_LSA_TYPE_OPAQUE_CMD_STR   ""
-#endif /* HAVE_OPAQUE_LSA */
 
 #define OSPF_LSA_TYPES_CMD_STR                                                \
     "asbr-summary|external|network|router|summary"                            \
@@ -4264,14 +4233,12 @@
       show_ip_ospf_database_maxage (vty, ospf);
       return CMD_SUCCESS;
     }
-#ifdef HAVE_OPAQUE_LSA
   else if (strncmp (argv[0], "opaque-l", 8) == 0)
     type = OSPF_OPAQUE_LINK_LSA;
   else if (strncmp (argv[0], "opaque-ar", 9) == 0)
     type = OSPF_OPAQUE_AREA_LSA;
   else if (strncmp (argv[0], "opaque-as", 9) == 0)
     type = OSPF_OPAQUE_AS_LSA;
-#endif /* HAVE_OPAQUE_LSA */
   else
     return CMD_WARNING;
 
@@ -4391,14 +4358,12 @@
     type = OSPF_ASBR_SUMMARY_LSA;
   else if (strncmp (argv[0], "e", 1) == 0)
     type = OSPF_AS_EXTERNAL_LSA;
-#ifdef HAVE_OPAQUE_LSA
   else if (strncmp (argv[0], "opaque-l", 8) == 0)
     type = OSPF_OPAQUE_LINK_LSA;
   else if (strncmp (argv[0], "opaque-ar", 9) == 0)
     type = OSPF_OPAQUE_AREA_LSA;
   else if (strncmp (argv[0], "opaque-as", 9) == 0)
     type = OSPF_OPAQUE_AS_LSA;
-#endif /* HAVE_OPAQUE_LSA */
   else
     return CMD_WARNING;
 
@@ -7084,9 +7049,7 @@
 	  }
       } while (rn);
       
-#ifdef HAVE_OPAQUE_LSA
       ospf_opaque_config_write_if (vty, ifp);
-#endif /* HAVE_OPAQUE_LSA */
     }
 
   return write;
@@ -7555,9 +7518,7 @@
       /* Distance configuration. */
       config_write_ospf_distance (vty, ospf);
 
-#ifdef HAVE_OPAQUE_LSA
       ospf_opaque_config_write_router (vty, ospf);
-#endif /* HAVE_OPAQUE_LSA */
     }
 
   return write;
diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c
index c317ed8..c9fcdc3 100644
--- a/ospfd/ospfd.c
+++ b/ospfd/ospfd.c
@@ -294,9 +294,7 @@
       if (ospf->router_id_static.s_addr == 0)
 	ospf_router_id_update (ospf);
 
-#ifdef HAVE_OPAQUE_LSA
       ospf_opaque_type11_lsa_init (ospf);
-#endif /* HAVE_OPAQUE_LSA */
     }
 
   return ospf;
@@ -429,9 +427,7 @@
   struct listnode *node, *nnode;
   int i;
 
-#ifdef HAVE_OPAQUE_LSA
   ospf_opaque_type11_lsa_term (ospf);
-#endif /* HAVE_OPAQUE_LSA */
   
   /* be nice if this worked, but it doesn't */
   /*ospf_flush_self_originated_lsas_now (ospf);*/
@@ -507,17 +503,13 @@
   OSPF_TIMER_OFF (ospf->t_lsa_refresher);
   OSPF_TIMER_OFF (ospf->t_read);
   OSPF_TIMER_OFF (ospf->t_write);
-#ifdef HAVE_OPAQUE_LSA
   OSPF_TIMER_OFF (ospf->t_opaque_lsa_self);
-#endif
 
   close (ospf->fd);
   stream_free(ospf->ibuf);
    
-#ifdef HAVE_OPAQUE_LSA
   LSDB_LOOP (OPAQUE_AS_LSDB (ospf), rn, lsa)
     ospf_discard_from_db (ospf, ospf->lsdb, lsa);
-#endif /* HAVE_OPAQUE_LSA */
   LSDB_LOOP (EXTERNAL_LSDB (ospf), rn, lsa)
     ospf_discard_from_db (ospf, ospf->lsdb, lsa);
 
@@ -609,9 +601,7 @@
   /* Self-originated LSAs initialize. */
   new->router_lsa_self = NULL;
 
-#ifdef HAVE_OPAQUE_LSA
   ospf_opaque_type10_lsa_init (new);
-#endif /* HAVE_OPAQUE_LSA */
 
   new->oiflist = list_new ();
   new->ranges = route_table_init ();
@@ -640,12 +630,10 @@
 
   LSDB_LOOP (NSSA_LSDB (area), rn, lsa)
     ospf_discard_from_db (area->ospf, area->lsdb, lsa);
-#ifdef HAVE_OPAQUE_LSA
   LSDB_LOOP (OPAQUE_AREA_LSDB (area), rn, lsa)
     ospf_discard_from_db (area->ospf, area->lsdb, lsa);
   LSDB_LOOP (OPAQUE_LINK_LSDB (area), rn, lsa)
     ospf_discard_from_db (area->ospf, area->lsdb, lsa);
-#endif /* HAVE_OPAQUE_LSA */
 
   ospf_lsdb_delete_all (area->lsdb);
   ospf_lsdb_free (area->lsdb);
@@ -663,9 +651,7 @@
 
   /* Cancel timer. */
   OSPF_TIMER_OFF (area->t_stub_router);
-#ifdef HAVE_OPAQUE_LSA
   OSPF_TIMER_OFF (area->t_opaque_lsa_self);
-#endif /* HAVE_OPAQUE_LSA */
   
   if (OSPF_IS_AREA_BACKBONE (area))
     area->ospf->backbone = NULL;
diff --git a/ospfd/ospfd.h b/ospfd/ospfd.h
index 595c04f..098fc5f 100644
--- a/ospfd/ospfd.h
+++ b/ospfd/ospfd.h
@@ -131,11 +131,9 @@
 #define OSPF_LOG_ADJACENCY_CHANGES	(1 << 3)
 #define OSPF_LOG_ADJACENCY_DETAIL	(1 << 4)
 
-#ifdef HAVE_OPAQUE_LSA
   /* Opaque-LSA administrative flags. */
   u_char opaque;
 #define OPAQUE_OPERATION_READY_BIT	(1 << 0)
-#endif /* HAVE_OPAQUE_LSA */
 
   /* RFC3137 stub router. Configured time to stay stub / max-metric */
   unsigned int stub_router_startup_time;	/* seconds */
@@ -178,9 +176,7 @@
   int external_origin;			/* AS-external-LSA origin flag. */
   int ase_calc;				/* ASE calculation flag. */
 
-#ifdef HAVE_OPAQUE_LSA
   struct list *opaque_lsa_self;		/* Type-11 Opaque-LSAs */
-#endif /* HAVE_OPAQUE_LSA */
 
   /* Routing tables. */
   struct route_table *old_table;        /* Old routing table. */
@@ -209,9 +205,7 @@
   struct thread *t_spf_calc;	        /* SPF calculation timer. */
   struct thread *t_ase_calc;		/* ASE calculation timer. */
   struct thread *t_external_lsa;	/* AS-external-LSA origin timer. */
-#ifdef HAVE_OPAQUE_LSA
   struct thread *t_opaque_lsa_self;	/* Type-11 Opaque-LSAs origin event. */
-#endif /* HAVE_OPAQUE_LSA */
 
   unsigned int maxage_delay;		/* Delay on Maxage remover timer, sec */
   struct thread *t_maxage;              /* MaxAge LSA remover timer. */
@@ -344,9 +338,7 @@
 
   /* Self-originated LSAs. */
   struct ospf_lsa *router_lsa_self;
-#ifdef HAVE_OPAQUE_LSA
   struct list *opaque_lsa_self;		/* Type-10 Opaque-LSAs */
-#endif /* HAVE_OPAQUE_LSA */
 
   /* Area announce list. */
   struct 
@@ -388,9 +380,7 @@
 
   /* Threads. */
   struct thread *t_stub_router;    /* Stub-router timer */
-#ifdef HAVE_OPAQUE_LSA
   struct thread *t_opaque_lsa_self;	/* Type-10 Opaque-LSAs origin. */
-#endif /* HAVE_OPAQUE_LSA */
 
   /* Statistics field. */
   u_int32_t spf_calculation;	/* SPF Calculation Count. */
