diff --git a/ospf6d/ChangeLog b/ospf6d/ChangeLog
index a3e8c94..2b53ed5 100644
--- a/ospf6d/ChangeLog
+++ b/ospf6d/ChangeLog
@@ -1,3 +1,7 @@
+2004-12-24 Hasso Tepper <hasso at quagga.net>
+
+	* *.c: Change level of debug messages to LOG_DEBUG.
+
 2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
 
 	* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
diff --git a/ospf6d/ospf6_abr.c b/ospf6d/ospf6_abr.c
index 52fa590..8bacfcd 100644
--- a/ospf6d/ospf6_abr.c
+++ b/ospf6d/ospf6_abr.c
@@ -171,8 +171,8 @@
           is_debug++;
           inet_ntop (AF_INET, &(ADV_ROUTER_IN_PREFIX (&route->prefix)),
                      buf, sizeof (buf));
-          zlog_info ("Originating summary in area %s for ASBR %s",
-                     area->name, buf);
+          zlog_debug ("Originating summary in area %s for ASBR %s",
+		      area->name, buf);
         }
       summary_table = area->summary_router;
     }
@@ -182,8 +182,8 @@
         {
           is_debug++;
           prefix2str (&route->prefix, buf, sizeof (buf));
-          zlog_info ("Originating summary in area %s for %s",
-                     area->name, buf);
+          zlog_debug ("Originating summary in area %s for %s",
+		      area->name, buf);
         }
       summary_table = area->summary_prefix;
     }
@@ -198,7 +198,7 @@
   if (CHECK_FLAG (route->flag, OSPF6_ROUTE_REMOVE))
     {
       if (is_debug)
-        zlog_info ("The route has just removed, purge previous LSA");
+        zlog_debug ("The route has just removed, purge previous LSA");
       if (summary)
         ospf6_route_remove (summary, summary_table);
       if (old)
@@ -213,7 +213,7 @@
        ! CHECK_FLAG (route->path.router_bits, OSPF6_ROUTER_BIT_E)))
     {
       if (is_debug)
-        zlog_info ("Route type is none of network, range nor ASBR, withdraw");
+        zlog_debug ("Route type is none of network, range nor ASBR, withdraw");
       if (summary)
         ospf6_route_remove (summary, summary_table);
       if (old)
@@ -226,7 +226,7 @@
       route->path.type == OSPF6_PATH_TYPE_EXTERNAL2)
     {
       if (is_debug)
-        zlog_info ("Path type is external, withdraw");
+        zlog_debug ("Path type is external, withdraw");
       if (summary)
         ospf6_route_remove (summary, summary_table);
       if (old)
@@ -238,7 +238,7 @@
   if (route->path.area_id == area->area_id)
     {
       if (is_debug)
-        zlog_info ("The route is in the area itself, ignore");
+        zlog_debug ("The route is in the area itself, ignore");
       if (summary)
         ospf6_route_remove (summary, summary_table);
       if (old)
@@ -251,7 +251,7 @@
   if (oi && oi->area && oi->area == area)
     {
       if (is_debug)
-        zlog_info ("The route's nexthop is in the same area, ignore");
+        zlog_debug ("The route's nexthop is in the same area, ignore");
       if (summary)
         ospf6_route_remove (summary, summary_table);
       if (old)
@@ -263,7 +263,7 @@
   if (route->path.cost >= LS_INFINITY)
     {
       if (is_debug)
-        zlog_info ("The cost exceeds LSInfinity, withdraw");
+        zlog_debug ("The cost exceeds LSInfinity, withdraw");
       if (summary)
         ospf6_route_remove (summary, summary_table);
       if (old)
@@ -278,7 +278,7 @@
       if (! CHECK_FLAG (route->flag, OSPF6_ROUTE_BEST))
         {
           if (is_debug)
-            zlog_info ("This is the secondary path to the ASBR, ignore");
+            zlog_debug ("This is the secondary path to the ASBR, ignore");
           if (summary)
             ospf6_route_remove (summary, summary_table);
           if (old)
@@ -309,7 +309,7 @@
           if (is_debug)
             {
               prefix2str (&range->prefix, buf, sizeof (buf));
-              zlog_info ("Suppressed by range %s of area %s",
+              zlog_debug ("Suppressed by range %s of area %s",
                          buf, route_area->name);
             }
 
@@ -328,7 +328,7 @@
       if (CHECK_FLAG (route->flag, OSPF6_ROUTE_DO_NOT_ADVERTISE))
         {
           if (is_debug)
-            zlog_info ("This is the range with DoNotAdvertise set. ignore");
+            zlog_debug ("This is the range with DoNotAdvertise set. ignore");
           if (summary)
             ospf6_route_remove (summary, summary_table);
           if (old)
@@ -340,7 +340,7 @@
       if (! CHECK_FLAG (route->flag, OSPF6_ROUTE_ACTIVE_SUMMARY))
         {
           if (is_debug)
-            zlog_info ("The range is not active. withdraw");
+            zlog_debug ("The range is not active. withdraw");
           if (summary)
             ospf6_route_remove (summary, summary_table);
           if (old)
@@ -513,7 +513,7 @@
       if (IS_OSPF6_DEBUG_EXAMIN (INTER_PREFIX))
         {
           is_debug++;
-          zlog_info ("Examin %s in area %s", lsa->name, oa->name);
+          zlog_debug ("Examin %s in area %s", lsa->name, oa->name);
         }
 
       prefix_lsa = (struct ospf6_inter_prefix_lsa *)
@@ -534,7 +534,7 @@
       if (IS_OSPF6_DEBUG_EXAMIN (INTER_ROUTER))
         {
           is_debug++;
-          zlog_info ("Examin %s in area %s", lsa->name, oa->name);
+          zlog_debug ("Examin %s in area %s", lsa->name, oa->name);
         }
 
       router_lsa = (struct ospf6_inter_router_lsa *)
@@ -570,7 +570,7 @@
   if (cost == LS_INFINITY)
     {
       if (is_debug)
-        zlog_info ("cost is LS_INFINITY, ignore");
+        zlog_debug ("cost is LS_INFINITY, ignore");
       if (old)
         ospf6_route_remove (old, table);
       return;
@@ -578,7 +578,7 @@
   if (OSPF6_LSA_IS_MAXAGE (lsa))
     {
       if (is_debug)
-        zlog_info ("LSA is MaxAge, ignore");
+        zlog_debug ("LSA is MaxAge, ignore");
       if (old)
         ospf6_route_remove (old, table);
       return;
@@ -588,7 +588,7 @@
   if (lsa->header->adv_router == oa->ospf6->router_id)
     {
       if (is_debug)
-        zlog_info ("LSA is self-originated, ignore");
+        zlog_debug ("LSA is self-originated, ignore");
       if (old)
         ospf6_route_remove (old, table);
       return;
@@ -601,7 +601,7 @@
       if (range)
         {
           if (is_debug)
-            zlog_info ("Prefix is equal to address range, ignore");
+            zlog_debug ("Prefix is equal to address range, ignore");
           if (old)
             ospf6_route_remove (old, table);
           return;
@@ -616,7 +616,7 @@
       ! CHECK_FLAG (abr_entry->path.router_bits, OSPF6_ROUTER_BIT_B))
     {
       if (is_debug)
-        zlog_info ("ABR router entry does not exist, ignore");
+        zlog_debug ("ABR router entry does not exist, ignore");
       if (old)
         ospf6_route_remove (old, table);
       return;
@@ -647,7 +647,7 @@
     route->nexthop[i] = abr_entry->nexthop[i];
 
   if (is_debug)
-    zlog_info ("Install route: %s", buf);
+    zlog_debug ("Install route: %s", buf);
   ospf6_route_add (route, table);
 }
 
diff --git a/ospf6d/ospf6_area.c b/ospf6d/ospf6_area.c
index c9d15b8..2a738cb 100644
--- a/ospf6d/ospf6_area.c
+++ b/ospf6d/ospf6_area.c
@@ -61,9 +61,9 @@
     case OSPF6_LSTYPE_NETWORK:
       if (IS_OSPF6_DEBUG_EXAMIN_TYPE (lsa->header->type))
         {
-          zlog_info ("Examin %s", lsa->name);
-          zlog_info ("Schedule SPF Calculation for %s",
-                     OSPF6_AREA (lsa->lsdb->data)->name);
+          zlog_debug ("Examin %s", lsa->name);
+          zlog_debug ("Schedule SPF Calculation for %s",
+		      OSPF6_AREA (lsa->lsdb->data)->name);
         }
       ospf6_spf_schedule (OSPF6_AREA (lsa->lsdb->data));
       break;
@@ -91,8 +91,8 @@
     case OSPF6_LSTYPE_NETWORK:
       if (IS_OSPF6_DEBUG_EXAMIN_TYPE (lsa->header->type))
         {
-          zlog_info ("LSA disappearing: %s", lsa->name);
-          zlog_info ("Schedule SPF Calculation for %s",
+          zlog_debug ("LSA disappearing: %s", lsa->name);
+          zlog_debug ("Schedule SPF Calculation for %s",
                      OSPF6_AREA (lsa->lsdb->data)->name);
         }
       ospf6_spf_schedule (OSPF6_AREA (lsa->lsdb->data));
diff --git a/ospf6d/ospf6_asbr.c b/ospf6d/ospf6_asbr.c
index 41da5e7..0cc2001 100644
--- a/ospf6d/ospf6_asbr.c
+++ b/ospf6d/ospf6_asbr.c
@@ -84,7 +84,7 @@
   if (IS_OSPF6_DEBUG_ASBR || IS_OSPF6_DEBUG_ORIGINATE (AS_EXTERNAL))
     {
       prefix2str (&route->prefix, buf, sizeof (buf));
-      zlog_info ("Originate AS-External-LSA for %s", buf);
+      zlog_debug ("Originate AS-External-LSA for %s", buf);
     }
 
   /* prepare buffer */
@@ -176,19 +176,19 @@
     OSPF6_LSA_HEADER_END (lsa->header);
 
   if (IS_OSPF6_DEBUG_EXAMIN (AS_EXTERNAL))
-    zlog_info ("Calculate AS-External route for %s", lsa->name);
+    zlog_debug ("Calculate AS-External route for %s", lsa->name);
 
   if (lsa->header->adv_router == ospf6->router_id)
     {
       if (IS_OSPF6_DEBUG_EXAMIN (AS_EXTERNAL))
-        zlog_info ("Ignore self-originated AS-External-LSA");
+        zlog_debug ("Ignore self-originated AS-External-LSA");
       return;
     }
 
   if (OSPF6_ASBR_METRIC (external) == LS_INFINITY)
     {
       if (IS_OSPF6_DEBUG_EXAMIN (AS_EXTERNAL))
-        zlog_info ("Ignore LSA with LSInfinity Metric");
+        zlog_debug ("Ignore LSA with LSInfinity Metric");
       return;
     }
 
@@ -200,7 +200,7 @@
       if (IS_OSPF6_DEBUG_EXAMIN (AS_EXTERNAL))
         {
           prefix2str (&asbr_id, buf, sizeof (buf));
-          zlog_info ("ASBR entry not found: %s", buf);
+          zlog_debug ("ASBR entry not found: %s", buf);
         }
       return;
     }
@@ -238,7 +238,7 @@
   if (IS_OSPF6_DEBUG_EXAMIN (AS_EXTERNAL))
     {
       prefix2str (&route->prefix, buf, sizeof (buf));
-      zlog_info ("AS-External route add: %s", buf);
+      zlog_debug ("AS-External route add: %s", buf);
     }
 
   ospf6_route_add (route, ospf6->route_table);
@@ -256,12 +256,12 @@
     OSPF6_LSA_HEADER_END (lsa->header);
 
   if (IS_OSPF6_DEBUG_EXAMIN (AS_EXTERNAL))
-    zlog_info ("Withdraw AS-External route for %s", lsa->name);
+    zlog_debug ("Withdraw AS-External route for %s", lsa->name);
 
   if (lsa->header->adv_router == ospf6->router_id)
     {
       if (IS_OSPF6_DEBUG_EXAMIN (AS_EXTERNAL))
-        zlog_info ("Ignore self-originated AS-External-LSA");
+        zlog_debug ("Ignore self-originated AS-External-LSA");
       return;
     }
 
@@ -276,7 +276,7 @@
       if (IS_OSPF6_DEBUG_EXAMIN (AS_EXTERNAL))
         {
           prefix2str (&prefix, buf, sizeof (buf));
-          zlog_info ("AS-External route %s not found", buf);
+          zlog_debug ("AS-External route %s not found", buf);
         }
       return;
     }
@@ -297,7 +297,7 @@
       if (IS_OSPF6_DEBUG_EXAMIN (AS_EXTERNAL))
         {
           prefix2str (&route->prefix, buf, sizeof (buf));
-          zlog_info ("AS-External route remove: %s", buf);
+          zlog_debug ("AS-External route remove: %s", buf);
         }
       ospf6_route_remove (route, ospf6->route_table);
     }
@@ -314,7 +314,7 @@
   if (IS_OSPF6_DEBUG_EXAMIN (AS_EXTERNAL))
     {
       ospf6_linkstate_prefix2str (&asbr_entry->prefix, buf, sizeof (buf));
-      zlog_info ("New ASBR %s found", buf);
+      zlog_debug ("New ASBR %s found", buf);
     }
 
   type = htons (OSPF6_LSTYPE_AS_EXTERNAL);
@@ -329,7 +329,7 @@
   if (IS_OSPF6_DEBUG_EXAMIN (AS_EXTERNAL))
     {
       ospf6_linkstate_prefix2str (&asbr_entry->prefix, buf, sizeof (buf));
-      zlog_info ("Calculation for new ASBR %s done", buf);
+      zlog_debug ("Calculation for new ASBR %s done", buf);
     }
 }
 
@@ -344,7 +344,7 @@
   if (IS_OSPF6_DEBUG_EXAMIN (AS_EXTERNAL))
     {
       ospf6_linkstate_prefix2str (&asbr_entry->prefix, buf, sizeof (buf));
-      zlog_info ("ASBR %s disappeared", buf);
+      zlog_debug ("ASBR %s disappeared", buf);
     }
 
   type = htons (OSPF6_LSTYPE_AS_EXTERNAL);
@@ -356,7 +356,7 @@
   if (IS_OSPF6_DEBUG_EXAMIN (AS_EXTERNAL))
     {
       ospf6_linkstate_prefix2str (&asbr_entry->prefix, buf, sizeof (buf));
-      zlog_info ("Calculation for old ASBR %s done", buf);
+      zlog_debug ("Calculation for old ASBR %s done", buf);
     }
 }
 
@@ -453,7 +453,7 @@
   if (IS_OSPF6_DEBUG_ASBR)
     {
       prefix2str (prefix, pbuf, sizeof (pbuf));
-      zlog_info ("Redistribute %s (%s)", pbuf, ZROUTE_NAME (type));
+      zlog_debug ("Redistribute %s (%s)", pbuf, ZROUTE_NAME (type));
     }
 
   /* if route-map was specified but not found, do not advertise */
@@ -481,7 +481,7 @@
       if (ret != RMAP_MATCH)
         {
           if (IS_OSPF6_DEBUG_ASBR)
-            zlog_info ("Denied by route-map \"%s\"", ospf6->rmap[type].name);
+            zlog_debug ("Denied by route-map \"%s\"", ospf6->rmap[type].name);
           return;
         }
     }
@@ -518,7 +518,7 @@
       if (IS_OSPF6_DEBUG_ASBR)
         {
           inet_ntop (AF_INET, &prefix_id.u.prefix4, ibuf, sizeof (ibuf));
-          zlog_info ("Advertise as AS-External Id:%s", ibuf);
+          zlog_debug ("Advertise as AS-External Id:%s", ibuf);
         }
 
       match->path.origin.id = htonl (info->id);
@@ -567,7 +567,7 @@
   if (IS_OSPF6_DEBUG_ASBR)
     {
       inet_ntop (AF_INET, &prefix_id.u.prefix4, ibuf, sizeof (ibuf));
-      zlog_info ("Advertise as AS-External Id:%s", ibuf);
+      zlog_debug ("Advertise as AS-External Id:%s", ibuf);
     }
 
   route->path.origin.id = htonl (info->id);
@@ -599,7 +599,7 @@
       if (IS_OSPF6_DEBUG_ASBR)
         {
           prefix2str (prefix, pbuf, sizeof (pbuf));
-          zlog_info ("No such route %s to withdraw", pbuf);
+          zlog_debug ("No such route %s to withdraw", pbuf);
         }
       return;
     }
@@ -612,7 +612,7 @@
       if (IS_OSPF6_DEBUG_ASBR)
         {
           prefix2str (prefix, pbuf, sizeof (pbuf));
-          zlog_info ("Original protocol mismatch: %s", pbuf);
+          zlog_debug ("Original protocol mismatch: %s", pbuf);
         }
       return;
     }
@@ -621,7 +621,7 @@
     {
       prefix2str (prefix, pbuf, sizeof (pbuf));
       inet_ntop (AF_INET, &prefix_id.u.prefix4, ibuf, sizeof (ibuf));
-      zlog_info ("Withdraw %s (AS-External Id:%s)", pbuf, ibuf);
+      zlog_debug ("Withdraw %s (AS-External Id:%s)", pbuf, ibuf);
     }
 
   lsa = ospf6_lsdb_lookup (htons (OSPF6_LSTYPE_AS_EXTERNAL),
diff --git a/ospf6d/ospf6_flood.c b/ospf6d/ospf6_flood.c
index 3c9987f..9971ef1 100644
--- a/ospf6d/ospf6_flood.c
+++ b/ospf6d/ospf6_flood.c
@@ -103,7 +103,7 @@
   if (old && ! OSPF6_LSA_IS_DIFFER (lsa, old))
     {
       if (IS_OSPF6_DEBUG_ORIGINATE_TYPE (lsa->header->type))
-        zlog_info ("Suppress updating LSA: %s", lsa->name);
+        zlog_debug ("Suppress updating LSA: %s", lsa->name);
       ospf6_lsa_delete (lsa);
       return;
     }
@@ -118,7 +118,7 @@
   if (IS_OSPF6_DEBUG_LSA_TYPE (lsa->header->type) ||
       IS_OSPF6_DEBUG_ORIGINATE_TYPE (lsa->header->type))
     {
-      zlog_info ("LSA Originate:");
+      zlog_debug ("LSA Originate:");
       ospf6_lsa_header_print (lsa);
     }
 
@@ -213,7 +213,7 @@
 
   if (IS_OSPF6_DEBUG_LSA_TYPE (lsa->header->type) ||
       IS_OSPF6_DEBUG_EXAMIN_TYPE (lsa->header->type))
-    zlog_info ("Install LSA: %s", lsa->name);
+    zlog_debug ("Install LSA: %s", lsa->name);
 
   /* Remove the old instance from all neighbors' Link state
      retransmission list (RFC2328 13.2 last paragraph) */
@@ -255,7 +255,7 @@
       IS_OSPF6_DEBUG_FLOOD_TYPE (lsa->header->type))
     {
       is_debug++;
-      zlog_info ("Flooding on %s: %s", oi->interface->name, lsa->name);
+      zlog_debug ("Flooding on %s: %s", oi->interface->name, lsa->name);
     }
 
   /* (1) For each neighbor */
@@ -264,13 +264,13 @@
       on = (struct ospf6_neighbor *) getdata (node);
 
       if (is_debug)
-        zlog_info ("To neighbor %s", on->name);
+        zlog_debug ("To neighbor %s", on->name);
 
       /* (a) if neighbor state < Exchange, examin next */
       if (on->state < OSPF6_NEIGHBOR_EXCHANGE)
         {
           if (is_debug)
-            zlog_info ("Neighbor state less than ExChange, next neighbor");
+            zlog_debug ("Neighbor state less than ExChange, next neighbor");
           continue;
         }
 
@@ -278,14 +278,14 @@
       if (on->state != OSPF6_NEIGHBOR_FULL)
         {
           if (is_debug)
-            zlog_info ("Neighbor not yet Full");
+            zlog_debug ("Neighbor not yet Full");
 
           req = ospf6_lsdb_lookup (lsa->header->type, lsa->header->id,
                                    lsa->header->adv_router, on->request_list);
           if (req == NULL)
             {
               if (is_debug)
-                zlog_info ("Not on request-list for this neighbor");
+                zlog_debug ("Not on request-list for this neighbor");
               /* fall through */
             }
           else
@@ -294,7 +294,7 @@
               if (ospf6_lsa_compare (lsa, req) > 0)
                 {
                   if (is_debug)
-                    zlog_info ("Requesting is newer, next neighbor");
+                    zlog_debug ("Requesting is newer, next neighbor");
                   continue;
                 }
 
@@ -303,7 +303,7 @@
               if (ospf6_lsa_compare (lsa, req) == 0)
                 {
                   if (is_debug)
-                    zlog_info ("Requesting the same, remove it, next neighbor");
+                    zlog_debug ("Requesting the same, remove it, next neighbor");
                   ospf6_lsdb_remove (req, on->request_list);
                   continue;
                 }
@@ -312,7 +312,7 @@
               if (ospf6_lsa_compare (lsa, req) < 0)
                 {
                   if (is_debug)
-                    zlog_info ("Received is newer, remove requesting");
+                    zlog_debug ("Received is newer, remove requesting");
                   ospf6_lsdb_remove (req, on->request_list);
                   /* fall through */
                 }
@@ -324,13 +324,13 @@
       if (from == on)
         {
           if (is_debug)
-            zlog_info ("Received is from the neighbor, next neighbor");
+            zlog_debug ("Received is from the neighbor, next neighbor");
           continue;
         }
 
       /* (d) add retrans-list, schedule retransmission */
       if (is_debug)
-        zlog_info ("Add retrans-list of this neighbor");
+        zlog_debug ("Add retrans-list of this neighbor");
       ospf6_increment_retrans_count (lsa);
       ospf6_lsdb_add (ospf6_lsa_copy (lsa), on->retrans_list);
       if (on->thread_send_lsupdate == NULL)
@@ -344,7 +344,7 @@
   if (retrans_added == 0)
     {
       if (is_debug)
-        zlog_info ("No retransmission scheduled, next interface");
+        zlog_debug ("No retransmission scheduled, next interface");
       return;
     }
 
@@ -354,7 +354,7 @@
       (from->router_id == oi->drouter || from->router_id == oi->bdrouter))
     {
       if (is_debug)
-        zlog_info ("Received is from the I/F's DR or BDR, next interface");
+        zlog_debug ("Received is from the I/F's DR or BDR, next interface");
       return;
     }
 
@@ -363,13 +363,13 @@
   if (from && from->ospf6_if == oi && oi->state == OSPF6_INTERFACE_BDR)
     {
       if (is_debug)
-        zlog_info ("Received is from the I/F, itself BDR, next interface");
+        zlog_debug ("Received is from the I/F, itself BDR, next interface");
       return;
     }
 
   /* (5) flood the LSA out the interface. */
   if (is_debug)
-    zlog_info ("Schedule flooding for the interface");
+    zlog_debug ("Schedule flooding for the interface");
   if (if_is_broadcast (oi->interface))
     {
       ospf6_lsdb_add (ospf6_lsa_copy (lsa), oi->lsupdate_list);
@@ -463,7 +463,7 @@
         {
           if (IS_OSPF6_DEBUG_FLOODING ||
               IS_OSPF6_DEBUG_FLOOD_TYPE (lsa->header->type))
-            zlog_info ("Remove %s from retrans_list of %s",
+            zlog_debug ("Remove %s from retrans_list of %s",
                        rem->name, on->name);
           ospf6_decrement_retrans_count (rem);
           ospf6_lsdb_remove (rem, on->retrans_list);
@@ -547,7 +547,7 @@
   if (CHECK_FLAG (lsa->flag, OSPF6_LSA_FLOODBACK))
     {
       if (is_debug)
-        zlog_info ("No acknowledgement (BDR & FloodBack)");
+        zlog_debug ("No acknowledgement (BDR & FloodBack)");
       return;
     }
 
@@ -560,7 +560,7 @@
       if (oi->drouter == from->router_id)
         {
           if (is_debug)
-            zlog_info ("Delayed acknowledgement (BDR & MoreRecent & from DR)");
+            zlog_debug ("Delayed acknowledgement (BDR & MoreRecent & from DR)");
           /* Delayed acknowledgement */
           ospf6_lsdb_add (ospf6_lsa_copy (lsa), oi->lsack_list);
           if (oi->thread_send_lsack == NULL)
@@ -570,7 +570,7 @@
       else
         {
           if (is_debug)
-            zlog_info ("No acknowledgement (BDR & MoreRecent & ! from DR)");
+            zlog_debug ("No acknowledgement (BDR & MoreRecent & ! from DR)");
         }
       return;
     }
@@ -584,7 +584,7 @@
       if (oi->drouter == from->router_id)
         {
           if (is_debug)
-            zlog_info ("Delayed acknowledgement (BDR & Duplicate & ImpliedAck & from DR)");
+            zlog_debug ("Delayed acknowledgement (BDR & Duplicate & ImpliedAck & from DR)");
           /* Delayed acknowledgement */
           ospf6_lsdb_add (ospf6_lsa_copy (lsa), oi->lsack_list);
           if (oi->thread_send_lsack == NULL)
@@ -594,7 +594,7 @@
       else
         {
           if (is_debug)
-            zlog_info ("No acknowledgement (BDR & Duplicate & ImpliedAck & ! from DR)");
+            zlog_debug ("No acknowledgement (BDR & Duplicate & ImpliedAck & ! from DR)");
         }
       return;
     }
@@ -605,7 +605,7 @@
       ! CHECK_FLAG (lsa->flag, OSPF6_LSA_IMPLIEDACK))
     {
       if (is_debug)
-        zlog_info ("Direct acknowledgement (BDR & Duplicate)");
+        zlog_debug ("Direct acknowledgement (BDR & Duplicate)");
       ospf6_lsdb_add (ospf6_lsa_copy (lsa), from->lsack_list);
       if (from->thread_send_lsack == NULL)
         from->thread_send_lsack =
@@ -639,7 +639,7 @@
   if (CHECK_FLAG (lsa->flag, OSPF6_LSA_FLOODBACK))
     {
       if (is_debug)
-        zlog_info ("No acknowledgement (AllOther & FloodBack)");
+        zlog_debug ("No acknowledgement (AllOther & FloodBack)");
       return;
     }
 
@@ -648,7 +648,7 @@
   if (ismore_recent < 0)
     {
       if (is_debug)
-        zlog_info ("Delayed acknowledgement (AllOther & MoreRecent)");
+        zlog_debug ("Delayed acknowledgement (AllOther & MoreRecent)");
       /* Delayed acknowledgement */
       ospf6_lsdb_add (ospf6_lsa_copy (lsa), oi->lsack_list);
       if (oi->thread_send_lsack == NULL)
@@ -663,7 +663,7 @@
       CHECK_FLAG (lsa->flag, OSPF6_LSA_IMPLIEDACK))
     {
       if (is_debug)
-        zlog_info ("No acknowledgement (AllOther & Duplicate & ImpliedAck)");
+        zlog_debug ("No acknowledgement (AllOther & Duplicate & ImpliedAck)");
       return;
     }
 
@@ -673,7 +673,7 @@
       ! CHECK_FLAG (lsa->flag, OSPF6_LSA_IMPLIEDACK))
     {
       if (is_debug)
-        zlog_info ("Direct acknowledgement (AllOther & Duplicate)");
+        zlog_debug ("Direct acknowledgement (AllOther & Duplicate)");
       ospf6_lsdb_add (ospf6_lsa_copy (lsa), from->lsack_list);
       if (from->thread_send_lsack == NULL)
         from->thread_send_lsack =
@@ -766,7 +766,7 @@
       IS_OSPF6_DEBUG_FLOOD_TYPE (new->header->type))
     {
       is_debug++;
-      zlog_info ("LSA Receive from %s", from->name);
+      zlog_debug ("LSA Receive from %s", from->name);
       ospf6_lsa_header_print (new);
     }
 
@@ -775,7 +775,7 @@
   if (ntohs (ospf6_lsa_checksum (new->header)) != cksum)
     {
       if (is_debug)
-        zlog_info ("Wrong LSA Checksum, discard");
+        zlog_debug ("Wrong LSA Checksum, discard");
       ospf6_lsa_delete (new);
       return;
     }
@@ -786,7 +786,7 @@
       OSPF6_LSA_SCOPE (new->header->type) == OSPF6_SCOPE_AS)
     {
       if (is_debug)
-        zlog_info ("AS-External-LSA (or AS-scope LSA) in stub area, discard");
+        zlog_debug ("AS-External-LSA (or AS-scope LSA) in stub area, discard");
       ospf6_lsa_delete (new);
       return;
     }
@@ -808,7 +808,7 @@
       break;
     default:
       if (is_debug)
-        zlog_info ("LSA has reserved scope, discard");
+        zlog_debug ("LSA has reserved scope, discard");
       ospf6_lsa_delete (new);
       return;
     }
@@ -819,7 +819,7 @@
     {
       /* log */
       if (is_debug)
-        zlog_info ("Drop MaxAge LSA with direct acknowledgement.");
+        zlog_debug ("Drop MaxAge LSA with direct acknowledgement.");
 
       /* a) Acknowledge back to neighbor (Direct acknowledgement, 13.5) */
       ospf6_lsdb_add (ospf6_lsa_copy (new), from->lsack_list);
@@ -842,7 +842,7 @@
       if (ntohl (new->header->seqnum) == ntohl (old->header->seqnum))
         {
           if (is_debug)
-            zlog_info ("Received is duplicated LSA");
+            zlog_debug ("Received is duplicated LSA");
           SET_FLAG (new->flag, OSPF6_LSA_DUPLICATE);
         }
     }
@@ -862,7 +862,7 @@
           if (res.tv_sec < MIN_LS_ARRIVAL)
             {
               if (is_debug)
-                zlog_info ("LSA can't be updated within MinLSArrival, discard");
+                zlog_debug ("LSA can't be updated within MinLSArrival, discard");
               ospf6_lsa_delete (new);
               return;   /* examin next lsa */
             }
@@ -871,7 +871,7 @@
       gettimeofday (&new->received, (struct timezone *) NULL);
 
       if (is_debug)
-        zlog_info ("Flood, Install, Possibly acknowledge the received LSA");
+        zlog_debug ("Flood, Install, Possibly acknowledge the received LSA");
 
       /* (b) immediately flood and (c) remove from all retrans-list */
       /* Prevent self-originated LSA to be flooded. this is to make
@@ -899,8 +899,8 @@
              or have to flush this LSA. */
           if (is_debug)
             {
-              zlog_info ("Newer instance of the self-originated LSA");
-              zlog_info ("Schedule reorigination");
+              zlog_debug ("Newer instance of the self-originated LSA");
+              zlog_debug ("Schedule reorigination");
             }
           new->refresh = thread_add_event (master, ospf6_lsa_refresh, new, 0);
         }
@@ -917,8 +917,8 @@
 
       if (is_debug)
         {
-          zlog_info ("Received is not newer, on the neighbor's request-list");
-          zlog_info ("BadLSReq, discard the received LSA");
+          zlog_debug ("Received is not newer, on the neighbor's request-list");
+          zlog_debug ("BadLSReq, discard the received LSA");
         }
 
       /* BadLSReq */
@@ -932,7 +932,7 @@
   if (ismore_recent == 0)
     {
       if (is_debug)
-        zlog_info ("The same instance as database copy (neither recent)");
+        zlog_debug ("The same instance as database copy (neither recent)");
 
       /* (a) if on retrans-list, Treat this LSA as an Ack: Implied Ack */
       rem = ospf6_lsdb_lookup (new->header->type, new->header->id,
@@ -941,8 +941,8 @@
         {
           if (is_debug)
             {
-              zlog_info ("It is on the neighbor's retrans-list.");
-              zlog_info ("Treat as an Implied acknowledgement");
+              zlog_debug ("It is on the neighbor's retrans-list.");
+              zlog_debug ("Treat as an Implied acknowledgement");
             }
           SET_FLAG (new->flag, OSPF6_LSA_IMPLIEDACK);
           ospf6_decrement_retrans_count (rem);
@@ -950,7 +950,7 @@
         }
 
       if (is_debug)
-        zlog_info ("Possibly acknowledge and then discard");
+        zlog_debug ("Possibly acknowledge and then discard");
 
       /* (b) possibly acknowledge */
       ospf6_acknowledge_lsa (new, ismore_recent, from);
@@ -970,8 +970,8 @@
         {
           if (is_debug)
             {
-              zlog_info ("The LSA is in Seqnumber Wrapping");
-              zlog_info ("MaxAge & MaxSeqNum, discard");
+              zlog_debug ("The LSA is in Seqnumber Wrapping");
+              zlog_debug ("MaxAge & MaxSeqNum, discard");
             }
           ospf6_lsa_delete (new);
           return;
@@ -981,8 +981,8 @@
         {
           if (is_debug)
             {
-              zlog_info ("Database copy is more recent.");
-              zlog_info ("Send back directly and then discard");
+              zlog_debug ("Database copy is more recent.");
+              zlog_debug ("Send back directly and then discard");
             }
 
           /* XXX, MinLSArrival check !? RFC 2328 13 (8) */
diff --git a/ospf6d/ospf6_interface.c b/ospf6d/ospf6_interface.c
index 99d5acb..8a7ef1b 100644
--- a/ospf6d/ospf6_interface.c
+++ b/ospf6d/ospf6_interface.c
@@ -141,8 +141,8 @@
   if (oi->ifmtu > iobuflen)
     {
       if (IS_OSPF6_DEBUG_INTERFACE)
-        zlog_info ("Interface %s: IfMtu is adjusted to I/O buffer size: %d.",
-                   ifp->name, iobuflen);
+        zlog_debug ("Interface %s: IfMtu is adjusted to I/O buffer size: %d.",
+		    ifp->name, iobuflen);
       oi->ifmtu = iobuflen;
     }
 
@@ -274,8 +274,8 @@
   if (oi->ifmtu > iobuflen)
     {
       if (IS_OSPF6_DEBUG_INTERFACE)
-        zlog_info ("Interface %s: IfMtu is adjusted to I/O buffer size: %d.",
-                   ifp->name, iobuflen);
+        zlog_debug ("Interface %s: IfMtu is adjusted to I/O buffer size: %d.",
+		    ifp->name, iobuflen);
       oi->ifmtu = iobuflen;
     }
 
@@ -373,8 +373,8 @@
           if (ret == PREFIX_DENY)
             {
               if (IS_OSPF6_DEBUG_INTERFACE)
-                zlog_info ("%s on %s filtered by prefix-list %s ",
-                           buf, oi->interface->name, oi->plist_name);
+                zlog_debug ("%s on %s filtered by prefix-list %s ",
+			    buf, oi->interface->name, oi->plist_name);
               continue;
             }
         }
@@ -411,9 +411,9 @@
   /* log */
   if (IS_OSPF6_DEBUG_INTERFACE)
     {
-      zlog_info ("Interface state change %s: %s -> %s", oi->interface->name,
-                 ospf6_interface_state_str[prev_state],
-                 ospf6_interface_state_str[next_state]);
+      zlog_debug ("Interface state change %s: %s -> %s", oi->interface->name,
+		  ospf6_interface_state_str[prev_state],
+		  ospf6_interface_state_str[next_state]);
     }
 
   if ((prev_state == OSPF6_INTERFACE_DR ||
@@ -586,9 +586,9 @@
       oi->bdrouter != (bdrouter ? bdrouter->router_id : htonl (0)))
     {
       if (IS_OSPF6_DEBUG_INTERFACE)
-        zlog_info ("DR Election on %s: DR: %s BDR: %s", oi->interface->name,
-                   (drouter ? drouter->name : "0.0.0.0"),
-                   (bdrouter ? bdrouter->name : "0.0.0.0"));
+        zlog_debug ("DR Election on %s: DR: %s BDR: %s", oi->interface->name,
+		    (drouter ? drouter->name : "0.0.0.0"),
+		    (bdrouter ? bdrouter->name : "0.0.0.0"));
 
       for (i = listhead (oi->neighbor_list); i; nextnode (i))
         {
@@ -616,15 +616,15 @@
   assert (oi && oi->interface);
 
   if (IS_OSPF6_DEBUG_INTERFACE)
-    zlog_info ("Interface Event %s: [InterfaceUp]",
-               oi->interface->name);
+    zlog_debug ("Interface Event %s: [InterfaceUp]",
+		oi->interface->name);
 
   /* check physical interface is up */
   if (! if_is_up (oi->interface))
     {
       if (IS_OSPF6_DEBUG_INTERFACE)
-        zlog_info ("Interface %s is down, can't execute [InterfaceUp]",
-                   oi->interface->name);
+        zlog_debug ("Interface %s is down, can't execute [InterfaceUp]",
+		    oi->interface->name);
       return 0;
     }
 
@@ -632,8 +632,8 @@
   if (oi->state > OSPF6_INTERFACE_DOWN)
     {
       if (IS_OSPF6_DEBUG_INTERFACE)
-        zlog_info ("Interface %s already enabled",
-                   oi->interface->name);
+        zlog_debug ("Interface %s already enabled",
+		    oi->interface->name);
       return 0;
     }
 
@@ -670,8 +670,8 @@
   assert (oi && oi->interface);
 
   if (IS_OSPF6_DEBUG_INTERFACE)
-    zlog_info ("Interface Event %s: [WaitTimer]",
-               oi->interface->name);
+    zlog_debug ("Interface Event %s: [WaitTimer]",
+		oi->interface->name);
 
   if (oi->state == OSPF6_INTERFACE_WAITING)
     ospf6_interface_state_change (dr_election (oi), oi);
@@ -688,8 +688,8 @@
   assert (oi && oi->interface);
 
   if (IS_OSPF6_DEBUG_INTERFACE)
-    zlog_info ("Interface Event %s: [BackupSeen]",
-               oi->interface->name);
+    zlog_debug ("Interface Event %s: [BackupSeen]",
+		oi->interface->name);
 
   if (oi->state == OSPF6_INTERFACE_WAITING)
     ospf6_interface_state_change (dr_election (oi), oi);
@@ -706,8 +706,8 @@
   assert (oi && oi->interface);
 
   if (IS_OSPF6_DEBUG_INTERFACE)
-    zlog_info ("Interface Event %s: [NeighborChange]",
-               oi->interface->name);
+    zlog_debug ("Interface Event %s: [NeighborChange]",
+		oi->interface->name);
 
   if (oi->state == OSPF6_INTERFACE_DROTHER ||
       oi->state == OSPF6_INTERFACE_BDR ||
@@ -726,8 +726,8 @@
   assert (oi && oi->interface);
 
   if (IS_OSPF6_DEBUG_INTERFACE)
-    zlog_info ("Interface Event %s: [LoopInd]",
-               oi->interface->name);
+    zlog_debug ("Interface Event %s: [LoopInd]",
+		oi->interface->name);
 
   /* XXX not yet */
 
@@ -745,8 +745,8 @@
   assert (oi && oi->interface);
 
   if (IS_OSPF6_DEBUG_INTERFACE)
-    zlog_info ("Interface Event %s: [InterfaceDown]",
-               oi->interface->name);
+    zlog_debug ("Interface Event %s: [InterfaceDown]",
+		oi->interface->name);
 
   /* Leave AllSPFRouters */
   if (oi->state > OSPF6_INTERFACE_DOWN)
diff --git a/ospf6d/ospf6_intra.c b/ospf6d/ospf6_intra.c
index 62b7ffc..e784411 100644
--- a/ospf6d/ospf6_intra.c
+++ b/ospf6d/ospf6_intra.c
@@ -122,7 +122,7 @@
   oa->thread_router_lsa = NULL;
 
   if (IS_OSPF6_DEBUG_ORIGINATE (ROUTER))
-    zlog_info ("Originate Router-LSA for Area %s", oa->name);
+    zlog_debug ("Originate Router-LSA for Area %s", oa->name);
 
   memset (buffer, 0, sizeof (buffer));
   lsa_header = (struct ospf6_lsa_header *) buffer;
@@ -181,7 +181,7 @@
                                   sizeof (struct ospf6_router_lsa))
             {
               if (IS_OSPF6_DEBUG_ORIGINATE (ROUTER))
-                zlog_info ("Size limit setting for Router-LSA too short");
+                zlog_debug ("Size limit setting for Router-LSA too short");
               return 0;
             }
 
@@ -294,7 +294,7 @@
   else
     {
       if (IS_OSPF6_DEBUG_ORIGINATE (ROUTER))
-        zlog_info ("Nothing to describe in Router-LSA, suppress");
+        zlog_debug ("Nothing to describe in Router-LSA, suppress");
     }
 
   /* Do premature-aging of rest, undesired Router-LSAs */
@@ -379,7 +379,7 @@
     }
 
   if (IS_OSPF6_DEBUG_ORIGINATE (NETWORK))
-    zlog_info ("Originate Network-LSA for Interface %s", oi->interface->name);
+    zlog_debug ("Originate Network-LSA for Interface %s", oi->interface->name);
 
   /* If none of neighbor is adjacent to us */
   count = 0;
@@ -392,7 +392,7 @@
   if (count == 0)
     {
       if (IS_OSPF6_DEBUG_ORIGINATE (NETWORK))
-        zlog_info ("Interface stub, ignore");
+        zlog_debug ("Interface stub, ignore");
       if (old)
         ospf6_lsa_purge (old);
       return 0;
@@ -549,13 +549,13 @@
     }
 
   if (IS_OSPF6_DEBUG_ORIGINATE (LINK))
-    zlog_info ("Originate Link-LSA for Interface %s", oi->interface->name);
+    zlog_debug ("Originate Link-LSA for Interface %s", oi->interface->name);
 
   /* can't make Link-LSA if linklocal address not set */
   if (oi->linklocal_addr == NULL)
     {
       if (IS_OSPF6_DEBUG_ORIGINATE (LINK))
-        zlog_info ("No Linklocal address on %s, defer originating",
+        zlog_debug ("No Linklocal address on %s, defer originating",
                    oi->interface->name);
       if (old)
         ospf6_lsa_purge (old);
@@ -709,7 +709,7 @@
     }
 
   if (IS_OSPF6_DEBUG_ORIGINATE (INTRA_PREFIX))
-    zlog_info ("Originate Intra-Area-Prefix-LSA for area %s's stub prefix",
+    zlog_debug ("Originate Intra-Area-Prefix-LSA for area %s's stub prefix",
                oa->name);
 
   /* prepare buffer */
@@ -732,7 +732,7 @@
       if (oi->state == OSPF6_INTERFACE_DOWN)
         {
           if (IS_OSPF6_DEBUG_ORIGINATE (INTRA_PREFIX))
-            zlog_info ("  Interface %s is down, ignore", oi->interface->name);
+            zlog_debug ("  Interface %s is down, ignore", oi->interface->name);
           continue;
         }
 
@@ -748,13 +748,13 @@
           full_count != 0)
         {
           if (IS_OSPF6_DEBUG_ORIGINATE (INTRA_PREFIX))
-            zlog_info ("  Interface %s is not stub, ignore",
+            zlog_debug ("  Interface %s is not stub, ignore",
                        oi->interface->name);
           continue;
         }
 
       if (IS_OSPF6_DEBUG_ORIGINATE (INTRA_PREFIX))
-        zlog_info ("  Interface %s:", oi->interface->name);
+        zlog_debug ("  Interface %s:", oi->interface->name);
 
       /* connected prefix to advertise */
       for (route = ospf6_route_head (oi->route_connected); route;
@@ -763,7 +763,7 @@
           if (IS_OSPF6_DEBUG_ORIGINATE (INTRA_PREFIX))
             {
               prefix2str (&route->prefix, buf, sizeof (buf));
-              zlog_info ("    include %s", buf);
+              zlog_debug ("    include %s", buf);
             }
           ospf6_route_add (ospf6_route_copy (route), route_advertise);
         }
@@ -798,7 +798,7 @@
   if (prefix_num == 0)
     {
       if (IS_OSPF6_DEBUG_ORIGINATE (INTRA_PREFIX))
-        zlog_info ("Quit to Advertise Intra-Prefix: no route to advertise");
+        zlog_debug ("Quit to Advertise Intra-Prefix: no route to advertise");
       return 0;
     }
 
@@ -867,7 +867,7 @@
     }
 
   if (IS_OSPF6_DEBUG_ORIGINATE (INTRA_PREFIX))
-    zlog_info ("Originate Intra-Area-Prefix-LSA for interface %s's prefix",
+    zlog_debug ("Originate Intra-Area-Prefix-LSA for interface %s's prefix",
                oi->interface->name);
 
   /* prepare buffer */
@@ -884,7 +884,7 @@
   if (oi->state != OSPF6_INTERFACE_DR)
     {
       if (IS_OSPF6_DEBUG_ORIGINATE (INTRA_PREFIX))
-        zlog_info ("  Interface is not DR");
+        zlog_debug ("  Interface is not DR");
       if (old)
         ospf6_lsa_purge (old);
       return 0;
@@ -900,7 +900,7 @@
   if (full_count == 0)
     {
       if (IS_OSPF6_DEBUG_ORIGINATE (INTRA_PREFIX))
-        zlog_info ("  Interface is stub");
+        zlog_debug ("  Interface is stub");
       if (old)
         ospf6_lsa_purge (old);
       return 0;
@@ -917,7 +917,7 @@
         continue;
 
       if (IS_OSPF6_DEBUG_ORIGINATE (INTRA_PREFIX))
-        zlog_info ("  include prefix from %s", lsa->name);
+        zlog_debug ("  include prefix from %s", lsa->name);
 
       if (lsa->header->adv_router != oi->area->ospf6->router_id)
         {
@@ -925,7 +925,7 @@
           if (on == NULL || on->state != OSPF6_NEIGHBOR_FULL)
             {
               if (IS_OSPF6_DEBUG_ORIGINATE (INTRA_PREFIX))
-                zlog_info ("    Neighbor not found or not Full, ignore");
+                zlog_debug ("    Neighbor not found or not Full, ignore");
               continue;
             }
         }
@@ -966,14 +966,14 @@
           if (IS_OSPF6_DEBUG_ORIGINATE (INTRA_PREFIX))
             {
               prefix2str (&route->prefix, buf, sizeof (buf));
-              zlog_info ("    include %s", buf);
+              zlog_debug ("    include %s", buf);
             }
 
           ospf6_route_add (route, route_advertise);
           prefix_num--;
         }
       if (current != end && IS_OSPF6_DEBUG_ORIGINATE (INTRA_PREFIX))
-        zlog_info ("Trailing garbage in %s", lsa->name);
+        zlog_debug ("Trailing garbage in %s", lsa->name);
     }
 
   op = (struct ospf6_prefix *)
@@ -997,7 +997,7 @@
   if (prefix_num == 0)
     {
       if (IS_OSPF6_DEBUG_ORIGINATE (INTRA_PREFIX))
-        zlog_info ("Quit to Advertise Intra-Prefix: no route to advertise");
+        zlog_debug ("Quit to Advertise Intra-Prefix: no route to advertise");
       return 0;
     }
 
@@ -1041,7 +1041,7 @@
     return;
 
   if (IS_OSPF6_DEBUG_EXAMIN (INTRA_PREFIX))
-    zlog_info ("%s found", lsa->name);
+    zlog_debug ("%s found", lsa->name);
 
   oa = OSPF6_AREA (lsa->lsdb->data);
 
@@ -1056,8 +1056,8 @@
   else
     {
       if (IS_OSPF6_DEBUG_EXAMIN (INTRA_PREFIX))
-        zlog_info ("Unknown reference LS-type: %#hx",
-                   ntohs (intra_prefix_lsa->ref_type));
+        zlog_debug ("Unknown reference LS-type: %#hx",
+		    ntohs (intra_prefix_lsa->ref_type));
       return;
     }
 
@@ -1067,7 +1067,7 @@
       if (IS_OSPF6_DEBUG_EXAMIN (INTRA_PREFIX))
         {
           ospf6_linkstate_prefix2str (&ls_prefix, buf, sizeof (buf));
-          zlog_info ("LS entry does not exist: %s", buf);
+          zlog_debug ("LS entry does not exist: %s", buf);
         }
       return;
     }
@@ -1109,7 +1109,7 @@
       if (IS_OSPF6_DEBUG_EXAMIN (INTRA_PREFIX))
         {
           prefix2str (&route->prefix, buf, sizeof (buf));
-          zlog_info ("  add %s", buf);
+          zlog_debug ("  add %s", buf);
         }
 
       ospf6_route_add (route, oa->route_table);
@@ -1117,7 +1117,7 @@
     }
 
   if (current != end && IS_OSPF6_DEBUG_EXAMIN (INTRA_PREFIX))
-    zlog_info ("Trailing garbage ignored");
+    zlog_debug ("Trailing garbage ignored");
 }
 
 void
@@ -1133,7 +1133,7 @@
   char buf[64];
 
   if (IS_OSPF6_DEBUG_EXAMIN (INTRA_PREFIX))
-    zlog_info ("%s disappearing", lsa->name);
+    zlog_debug ("%s disappearing", lsa->name);
 
   oa = OSPF6_AREA (lsa->lsdb->data);
 
@@ -1180,14 +1180,14 @@
           if (IS_OSPF6_DEBUG_EXAMIN (INTRA_PREFIX))
             {
               prefix2str (&route->prefix, buf, sizeof (buf));
-              zlog_info ("remove %s", buf);
+              zlog_debug ("remove %s", buf);
             }
           ospf6_route_remove (route, oa->route_table);
         }
     }
 
   if (current != end && IS_OSPF6_DEBUG_EXAMIN (INTRA_PREFIX))
-    zlog_info ("Trailing garbage ignored");
+    zlog_debug ("Trailing garbage ignored");
 }
 
 void
@@ -1200,7 +1200,7 @@
   void (*hook_remove) (struct ospf6_route *) = NULL;
 
   if (IS_OSPF6_DEBUG_EXAMIN (INTRA_PREFIX))
-    zlog_info ("Re-examin intra-routes for area %s", oa->name);
+    zlog_debug ("Re-examin intra-routes for area %s", oa->name);
 
   hook_add = oa->route_table->hook_add;
   hook_remove = oa->route_table->hook_remove;
@@ -1242,7 +1242,7 @@
     }
 
   if (IS_OSPF6_DEBUG_EXAMIN (INTRA_PREFIX))
-    zlog_info ("Re-examin intra-routes for area %s: Done", oa->name);
+    zlog_debug ("Re-examin intra-routes for area %s: Done", oa->name);
 }
 
 void
@@ -1254,7 +1254,7 @@
   char buf[16];
 
   if (IS_OSPF6_DEBUG_ROUTE (INTRA))
-    zlog_info ("Border-router calculation for area %s", oa->name);
+    zlog_debug ("Border-router calculation for area %s", oa->name);
 
   hook_add = oa->ospf6->brouter_table->hook_add;
   hook_remove = oa->ospf6->brouter_table->hook_remove;
@@ -1290,7 +1290,7 @@
         {
           inet_ntop (AF_INET, &ADV_ROUTER_IN_PREFIX (&copy->prefix),
                      buf, sizeof (buf));
-          zlog_info ("Re-install router entry %s", buf);
+          zlog_debug ("Re-install router entry %s", buf);
         }
     }
 
@@ -1322,7 +1322,7 @@
             {
               inet_ntop (AF_INET, &ADV_ROUTER_IN_PREFIX (&lsentry->prefix),
                          buf, sizeof (buf));
-              zlog_info ("Call hook for router entry %s", buf);
+              zlog_debug ("Call hook for router entry %s", buf);
             }
           if (hook_add)
             (*hook_add) (lsentry);
@@ -1332,7 +1332,7 @@
     }
 
   if (IS_OSPF6_DEBUG_ROUTE (INTRA))
-    zlog_info ("Border-router calculation for area %s: Done", oa->name);
+    zlog_debug ("Border-router calculation for area %s: Done", oa->name);
 }
 
 struct ospf6_lsa_handler router_handler =
diff --git a/ospf6d/ospf6_lsa.c b/ospf6d/ospf6_lsa.c
index 4d3287d..5edee77 100644
--- a/ospf6d/ospf6_lsa.c
+++ b/ospf6d/ospf6_lsa.c
@@ -234,7 +234,7 @@
 {
   /* log */
   if (IS_OSPF6_DEBUG_LSA_TYPE (lsa->header->type))
-    zlog_info ("LSA: Premature aging: %s", lsa->name);
+    zlog_debug ("LSA: Premature aging: %s", lsa->name);
 
   THREAD_OFF (lsa->expire);
   THREAD_OFF (lsa->refresh);
@@ -315,11 +315,11 @@
   inet_ntop (AF_INET, &header->id, id, sizeof (id));
   inet_ntop (AF_INET, &header->adv_router, adv_router,
              sizeof (adv_router));
-  zlog_info ("    [%s Id:%s Adv:%s]",
-             ospf6_lstype_name (header->type), id, adv_router);
-  zlog_info ("    Age: %4hu SeqNum: %#08lx Cksum: %04hx Len: %d",
-             ntohs (header->age), (u_long) ntohl (header->seqnum),
-             ntohs (header->checksum), ntohs (header->length));
+  zlog_debug ("    [%s Id:%s Adv:%s]",
+	      ospf6_lstype_name (header->type), id, adv_router);
+  zlog_debug ("    Age: %4hu SeqNum: %#08lx Cksum: %04hx Len: %d",
+	      ntohs (header->age), (u_long) ntohl (header->seqnum),
+	      ntohs (header->checksum), ntohs (header->length));
 }
 
 void
@@ -587,7 +587,7 @@
 
   if (IS_OSPF6_DEBUG_LSA_TYPE (lsa->header->type))
     {
-      zlog_info ("LSA Expire:");
+      zlog_debug ("LSA Expire:");
       ospf6_lsa_header_print (lsa);
     }
 
@@ -624,7 +624,7 @@
   if (self == NULL)
     {
       if (IS_OSPF6_DEBUG_LSA_TYPE (old->header->type))
-        zlog_info ("Refresh: could not find self LSA, flush %s", old->name);
+        zlog_debug ("Refresh: could not find self LSA, flush %s", old->name);
       ospf6_lsa_premature_aging (old);
       return 0;
     }
@@ -646,7 +646,7 @@
 
   if (IS_OSPF6_DEBUG_LSA_TYPE (new->header->type))
     {
-      zlog_info ("LSA Refresh:");
+      zlog_debug ("LSA Refresh:");
       ospf6_lsa_header_print (new);
     }
 
diff --git a/ospf6d/ospf6_lsdb.c b/ospf6d/ospf6_lsdb.c
index aad6cfc..b839d16 100644
--- a/ospf6d/ospf6_lsdb.c
+++ b/ospf6d/ospf6_lsdb.c
@@ -83,13 +83,13 @@
   if (num == lsdb->count)
     return;
 
-  zlog_info ("PANIC !! lsdb[%p]->count = %d, real = %d",
+  zlog_debug ("PANIC !! lsdb[%p]->count = %d, real = %d",
              lsdb, lsdb->count, num);
   for (debug = ospf6_lsdb_head (lsdb); debug;
        debug = ospf6_lsdb_next (debug))
-    zlog_info ("%p %p %s lsdb[%p]", debug->prev, debug->next, debug->name,
+    zlog_debug ("%p %p %s lsdb[%p]", debug->prev, debug->next, debug->name,
                debug->lsdb);
-  zlog_info ("DUMP END");
+  zlog_debug ("DUMP END");
 
   assert (num == lsdb->count);
 }
@@ -282,7 +282,7 @@
   {
     char buf[64];
     prefix2str (p, buf, sizeof (buf));
-    zlog_info ("lsdb_lookup_next: key: %s", buf);
+    zlog_debug ("lsdb_lookup_next: key: %s", buf);
   }
 
   node = lsdb->table->top;
@@ -323,7 +323,7 @@
       assert (lsa_prev->next == lsa_next);
       if (lsa_next)
         assert (lsa_next->prev == lsa_prev);
-      zlog_info ("lsdb_lookup_next: assert OK with previous LSA");
+      zlog_debug ("lsdb_lookup_next: assert OK with previous LSA");
     }
 
   if (! node)
diff --git a/ospf6d/ospf6_message.c b/ospf6d/ospf6_message.c
index e436867..1486b69 100644
--- a/ospf6d/ospf6_message.c
+++ b/ospf6d/ospf6_message.c
@@ -55,9 +55,9 @@
   inet_ntop (AF_INET, &oh->router_id, router_id, sizeof (router_id));
   inet_ntop (AF_INET, &oh->area_id, area_id, sizeof (area_id));
 
-  zlog_info ("    OSPFv%d Type:%d Len:%hu Router-ID:%s",
+  zlog_debug ("    OSPFv%d Type:%d Len:%hu Router-ID:%s",
              oh->version, oh->type, ntohs (oh->length), router_id);
-  zlog_info ("    Area-ID:%s Cksum:%hx Instance-ID:%d",
+  zlog_debug ("    Area-ID:%s Cksum:%hx Instance-ID:%d",
              area_id, ntohs (oh->checksum), oh->instance_id);
 }
 
@@ -79,22 +79,22 @@
   inet_ntop (AF_INET, &hello->bdrouter, bdrouter, sizeof (bdrouter));
   ospf6_options_printbuf (hello->options, options, sizeof (options));
 
-  zlog_info ("    I/F-Id:%ld Priority:%d Option:%s",
+  zlog_debug ("    I/F-Id:%ld Priority:%d Option:%s",
              (u_long) ntohl (hello->interface_id), hello->priority, options);
-  zlog_info ("    HelloInterval:%hu DeadInterval:%hu",
+  zlog_debug ("    HelloInterval:%hu DeadInterval:%hu",
              ntohs (hello->hello_interval), ntohs (hello->dead_interval));
-  zlog_info ("    DR:%s BDR:%s", drouter, bdrouter);
+  zlog_debug ("    DR:%s BDR:%s", drouter, bdrouter);
 
   for (p = (char *) ((caddr_t) hello + sizeof (struct ospf6_hello));
        p + sizeof (u_int32_t) <= OSPF6_MESSAGE_END (oh);
        p += sizeof (u_int32_t))
     {
       inet_ntop (AF_INET, (void *) p, neighbor, sizeof (neighbor));
-      zlog_info ("    Neighbor: %s", neighbor);
+      zlog_debug ("    Neighbor: %s", neighbor);
     }
 
   if (p != OSPF6_MESSAGE_END (oh))
-    zlog_info ("Trailing garbage exists");
+    zlog_debug ("Trailing garbage exists");
 }
 
 void
@@ -112,9 +112,9 @@
 
   ospf6_options_printbuf (dbdesc->options, options, sizeof (options));
 
-  zlog_info ("    MBZ: %#x Option: %s IfMTU: %hu",
+  zlog_debug ("    MBZ: %#x Option: %s IfMTU: %hu",
              dbdesc->reserved1, options, ntohs (dbdesc->ifmtu));
-  zlog_info ("    MBZ: %#x Bits: %s%s%s SeqNum: %#lx",
+  zlog_debug ("    MBZ: %#x Bits: %s%s%s SeqNum: %#lx",
              dbdesc->reserved2,
              (CHECK_FLAG (dbdesc->bits, OSPF6_DBDESC_IBIT) ? "I" : "-"),
              (CHECK_FLAG (dbdesc->bits, OSPF6_DBDESC_MBIT) ? "M" : "-"),
@@ -127,7 +127,7 @@
     ospf6_lsa_header_print_raw ((struct ospf6_lsa_header *) p);
 
   if (p != OSPF6_MESSAGE_END (oh))
-    zlog_info ("Trailing garbage exists");
+    zlog_debug ("Trailing garbage exists");
 }
 
 void
@@ -146,12 +146,12 @@
       struct ospf6_lsreq_entry *e = (struct ospf6_lsreq_entry *) p;
       inet_ntop (AF_INET, &e->adv_router, adv_router, sizeof (adv_router));
       inet_ntop (AF_INET, &e->id, id, sizeof (id));
-      zlog_info ("    [%s Id:%s Adv:%s]",
+      zlog_debug ("    [%s Id:%s Adv:%s]",
                  ospf6_lstype_name (e->type), id, adv_router);
     }
 
   if (p != OSPF6_MESSAGE_END (oh))
-    zlog_info ("Trailing garbage exists");
+    zlog_debug ("Trailing garbage exists");
 }
 
 void
@@ -168,7 +168,7 @@
     ((caddr_t) oh + sizeof (struct ospf6_header));
 
   num = ntohl (lsupdate->lsa_number);
-  zlog_info ("    Number of LSA: %ld", num);
+  zlog_debug ("    Number of LSA: %ld", num);
 
   for (p = (char *) ((caddr_t) lsupdate + sizeof (struct ospf6_lsupdate));
        p < OSPF6_MESSAGE_END (oh) &&
@@ -178,7 +178,7 @@
       ospf6_lsa_header_print_raw ((struct ospf6_lsa_header *) p);
       if (OSPF6_LSA_SIZE (p) < sizeof (struct ospf6_lsa_header))
         {
-          zlog_info ("    Malformed LSA length, quit printing");
+          zlog_debug ("    Malformed LSA length, quit printing");
           break;
         }
     }
@@ -190,20 +190,20 @@
       int num = 0;
       memset (buf, 0, sizeof (buf));
 
-      zlog_info ("    Trailing garbage exists");
+      zlog_debug ("    Trailing garbage exists");
       while (p < OSPF6_MESSAGE_END (oh))
         {
           snprintf (buf, sizeof (buf), "%s %2x", buf, *p++);
           num++;
           if (num == 8)
             {
-              zlog_info ("    %s", buf);
+              zlog_debug ("    %s", buf);
               memset (buf, 0, sizeof (buf));
               num = 0;
             }
         }
       if (num)
-        zlog_info ("    %s", buf);
+        zlog_debug ("    %s", buf);
     }
 }
 
@@ -221,7 +221,7 @@
     ospf6_lsa_header_print_raw ((struct ospf6_lsa_header *) p);
 
   if (p != OSPF6_MESSAGE_END (oh))
-    zlog_info ("Trailing garbage exists");
+    zlog_debug ("Trailing garbage exists");
 }
 
 /* Receive function */
@@ -238,7 +238,7 @@
   if (oh->version != OSPFV3_VERSION)
     {
       if (IS_OSPF6_DEBUG_MESSAGE (type, RECV))
-        zlog_info ("Message with unknown version");
+        zlog_debug ("Message with unknown version");
       return MSG_NG;
     }
 
@@ -248,12 +248,12 @@
       if (oh->area_id == BACKBONE_AREA_ID)
         {
           if (IS_OSPF6_DEBUG_MESSAGE (type, RECV))
-            zlog_info ("Message may be via Virtual Link: not supported");
+            zlog_debug ("Message may be via Virtual Link: not supported");
           return MSG_NG;
         }
 
       if (IS_OSPF6_DEBUG_MESSAGE (type, RECV))
-        zlog_info ("Area-ID mismatch");
+        zlog_debug ("Area-ID mismatch");
       return MSG_NG;
     }
 
@@ -261,7 +261,7 @@
   if (oh->instance_id != oi->instance_id)
     {
       if (IS_OSPF6_DEBUG_MESSAGE (type, RECV))
-        zlog_info ("Instance-ID mismatch");
+        zlog_debug ("Instance-ID mismatch");
       return MSG_NG;
     }
 
@@ -293,7 +293,7 @@
   if (ntohs (hello->hello_interval) != oi->hello_interval)
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("HelloInterval mismatch");
+        zlog_debug ("HelloInterval mismatch");
       return;
     }
 
@@ -301,7 +301,7 @@
   if (ntohs (hello->dead_interval) != oi->dead_interval)
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("RouterDeadInterval mismatch");
+        zlog_debug ("RouterDeadInterval mismatch");
       return;
     }
 
@@ -310,7 +310,7 @@
       OSPF6_OPT_ISSET (oi->area->options, OSPF6_OPT_E))
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("E-bit mismatch");
+        zlog_debug ("E-bit mismatch");
       return;
     }
 
@@ -340,7 +340,7 @@
   if (p != OSPF6_MESSAGE_END (oh))
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Trailing garbage ignored");
+        zlog_debug ("Trailing garbage ignored");
     }
 
   /* RouterPriority check */
@@ -404,7 +404,7 @@
   if (on->state < OSPF6_NEIGHBOR_INIT)
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Neighbor state less than Init, ignore");
+        zlog_debug ("Neighbor state less than Init, ignore");
       return;
     }
 
@@ -412,7 +412,7 @@
     {
     case OSPF6_NEIGHBOR_TWOWAY:
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Neighbor state is 2-Way, ignore");
+        zlog_debug ("Neighbor state is 2-Way, ignore");
       return;
 
     case OSPF6_NEIGHBOR_INIT:
@@ -420,7 +420,7 @@
       if (on->state != OSPF6_NEIGHBOR_EXSTART)
         {
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Neighbor state is not ExStart, ignore");
+            zlog_debug ("Neighbor state is not ExStart, ignore");
           return;
         }
       /* else fall through to ExStart */
@@ -441,7 +441,7 @@
       else
         {
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Negotiation failed");
+            zlog_debug ("Negotiation failed");
           return;
         }
       /* fall through to exchange */
@@ -451,14 +451,14 @@
         {
           /* Duplicated DatabaseDescription is dropped by master */
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Duplicated dbdesc discarded by Master, ignore");
+            zlog_debug ("Duplicated dbdesc discarded by Master, ignore");
           return;
         }
 
       if (CHECK_FLAG (dbdesc->bits, OSPF6_DBDESC_MSBIT))
         {
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Master/Slave bit mismatch");
+            zlog_debug ("Master/Slave bit mismatch");
           thread_add_event (master, seqnumber_mismatch, on, 0);
           return;
         }
@@ -466,7 +466,7 @@
       if (CHECK_FLAG (dbdesc->bits, OSPF6_DBDESC_IBIT))
         {
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Initialize bit mismatch");
+            zlog_debug ("Initialize bit mismatch");
           thread_add_event (master, seqnumber_mismatch, on, 0);
           return;
         }
@@ -474,7 +474,7 @@
       if (memcmp (on->options, dbdesc->options, sizeof (on->options)))
         {
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Option field mismatch");
+            zlog_debug ("Option field mismatch");
           thread_add_event (master, seqnumber_mismatch, on, 0);
           return;
         }
@@ -482,7 +482,7 @@
       if (ntohl (dbdesc->seqnum) != on->dbdesc_seqnum)
         {
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Sequence number mismatch (%#lx expected)",
+            zlog_debug ("Sequence number mismatch (%#lx expected)",
                        (u_long) on->dbdesc_seqnum);
           thread_add_event (master, seqnumber_mismatch, on, 0);
           return;
@@ -495,13 +495,13 @@
         {
           /* Duplicated DatabaseDescription is dropped by master */
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Duplicated dbdesc discarded by Master, ignore");
+            zlog_debug ("Duplicated dbdesc discarded by Master, ignore");
           return;
         }
 
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Not duplicate dbdesc in state %s",
-                   ospf6_neighbor_state_str[on->state]);
+        zlog_debug ("Not duplicate dbdesc in state %s",
+		    ospf6_neighbor_state_str[on->state]);
       thread_add_event (master, seqnumber_mismatch, on, 0);
       return;
 
@@ -521,7 +521,7 @@
       his = ospf6_lsa_create_headeronly ((struct ospf6_lsa_header *) p);
 
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("%s", his->name);
+        zlog_debug ("%s", his->name);
 
       switch (OSPF6_LSA_SCOPE (his->header->type))
         {
@@ -536,7 +536,7 @@
           break;
         case OSPF6_SCOPE_RESERVED:
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Ignoring LSA of reserved scope");
+            zlog_debug ("Ignoring LSA of reserved scope");
           ospf6_lsa_delete (his);
           continue;
           break;
@@ -546,7 +546,7 @@
           IS_AREA_STUB (on->ospf6_if->area))
         {
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("SeqNumMismatch (E-bit mismatch), discard");
+            zlog_debug ("SeqNumMismatch (E-bit mismatch), discard");
           ospf6_lsa_delete (his);
           thread_add_event (master, seqnumber_mismatch, on, 0);
           return;
@@ -557,19 +557,19 @@
       if (mine == NULL)
         {
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Add request (No database copy)");
+            zlog_debug ("Add request (No database copy)");
           ospf6_lsdb_add (his, on->request_list);
         }
       else if (ospf6_lsa_compare (his, mine) < 0)
         {
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Add request (Received MoreRecent)");
+            zlog_debug ("Add request (Received MoreRecent)");
           ospf6_lsdb_add (his, on->request_list);
         }
       else
         {
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Discard (Existing MoreRecent)");
+            zlog_debug ("Discard (Existing MoreRecent)");
           ospf6_lsa_delete (his);
         }
     }
@@ -577,7 +577,7 @@
   if (p != OSPF6_MESSAGE_END (oh))
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Trailing garbage ignored");
+        zlog_debug ("Trailing garbage ignored");
     }
 
   /* Increment sequence number */
@@ -615,7 +615,7 @@
   if (on->state < OSPF6_NEIGHBOR_INIT)
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Neighbor state less than Init, ignore");
+        zlog_debug ("Neighbor state less than Init, ignore");
       return;
     }
 
@@ -623,7 +623,7 @@
     {
     case OSPF6_NEIGHBOR_TWOWAY:
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Neighbor state is 2-Way, ignore");
+        zlog_debug ("Neighbor state is 2-Way, ignore");
       return;
 
     case OSPF6_NEIGHBOR_INIT:
@@ -631,7 +631,7 @@
       if (on->state != OSPF6_NEIGHBOR_EXSTART)
         {
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Neighbor state is not ExStart, ignore");
+            zlog_debug ("Neighbor state is not ExStart, ignore");
           return;
         }
       /* else fall through to ExStart */
@@ -660,7 +660,7 @@
       else
         {
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Negotiation failed");
+            zlog_debug ("Negotiation failed");
           return;
         }
       break;
@@ -670,7 +670,7 @@
         {
           /* Duplicated DatabaseDescription causes slave to retransmit */
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Duplicated dbdesc causes retransmit");
+            zlog_debug ("Duplicated dbdesc causes retransmit");
           THREAD_OFF (on->thread_send_dbdesc);
           on->thread_send_dbdesc =
             thread_add_event (master, ospf6_dbdesc_send, on, 0);
@@ -680,7 +680,7 @@
       if (! CHECK_FLAG (dbdesc->bits, OSPF6_DBDESC_MSBIT))
         {
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Master/Slave bit mismatch");
+            zlog_debug ("Master/Slave bit mismatch");
           thread_add_event (master, seqnumber_mismatch, on, 0);
           return;
         }
@@ -688,7 +688,7 @@
       if (CHECK_FLAG (dbdesc->bits, OSPF6_DBDESC_IBIT))
         {
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Initialize bit mismatch");
+            zlog_debug ("Initialize bit mismatch");
           thread_add_event (master, seqnumber_mismatch, on, 0);
           return;
         }
@@ -696,7 +696,7 @@
       if (memcmp (on->options, dbdesc->options, sizeof (on->options)))
         {
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Option field mismatch");
+            zlog_debug ("Option field mismatch");
           thread_add_event (master, seqnumber_mismatch, on, 0);
           return;
         }
@@ -704,8 +704,8 @@
       if (ntohl (dbdesc->seqnum) != on->dbdesc_seqnum + 1)
         {
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Sequence number mismatch (%#lx expected)",
-                       (u_long) on->dbdesc_seqnum + 1);
+            zlog_debug ("Sequence number mismatch (%#lx expected)",
+			(u_long) on->dbdesc_seqnum + 1);
           thread_add_event (master, seqnumber_mismatch, on, 0);
           return;
         }
@@ -717,7 +717,7 @@
         {
           /* Duplicated DatabaseDescription causes slave to retransmit */
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Duplicated dbdesc causes retransmit");
+            zlog_debug ("Duplicated dbdesc causes retransmit");
           THREAD_OFF (on->thread_send_dbdesc);
           on->thread_send_dbdesc =
             thread_add_event (master, ospf6_dbdesc_send, on, 0);
@@ -725,8 +725,8 @@
         }
 
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Not duplicate dbdesc in state %s",
-                   ospf6_neighbor_state_str[on->state]);
+        zlog_debug ("Not duplicate dbdesc in state %s",
+		    ospf6_neighbor_state_str[on->state]);
       thread_add_event (master, seqnumber_mismatch, on, 0);
       return;
 
@@ -758,7 +758,7 @@
           break;
         case OSPF6_SCOPE_RESERVED:
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Ignoring LSA of reserved scope");
+            zlog_debug ("Ignoring LSA of reserved scope");
           ospf6_lsa_delete (his);
           continue;
           break;
@@ -768,7 +768,7 @@
           IS_AREA_STUB (on->ospf6_if->area))
         {
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("E-bit mismatch with LSA Headers");
+            zlog_debug ("E-bit mismatch with LSA Headers");
           ospf6_lsa_delete (his);
           thread_add_event (master, seqnumber_mismatch, on, 0);
           return;
@@ -779,7 +779,7 @@
       if (mine == NULL || ospf6_lsa_compare (his, mine) < 0)
         {
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Add request-list: %s", his->name);
+            zlog_debug ("Add request-list: %s", his->name);
           ospf6_lsdb_add (his, on->request_list);
         }
       else
@@ -789,7 +789,7 @@
   if (p != OSPF6_MESSAGE_END (oh))
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Trailing garbage ignored");
+        zlog_debug ("Trailing garbage ignored");
     }
 
   /* Set sequence number to Master's */
@@ -822,14 +822,14 @@
   if (on == NULL)
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Neighbor not found, ignore");
+        zlog_debug ("Neighbor not found, ignore");
       return;
     }
 
   if (memcmp (src, &on->linklocal_addr, sizeof (struct in6_addr)))
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Seems to be from Secondary I/F of the neighbor, ignore");
+        zlog_debug ("Seems to be from Secondary I/F of the neighbor, ignore");
       return;
     }
 
@@ -840,15 +840,15 @@
   if (ntohs (dbdesc->ifmtu) != oi->ifmtu)
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("I/F MTU mismatch");
+        zlog_debug ("I/F MTU mismatch");
       return;
     }
 
   if (dbdesc->reserved1 || dbdesc->reserved2)
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Non-0 reserved field in %s's DbDesc, correct",
-                   on->name);
+        zlog_debug ("Non-0 reserved field in %s's DbDesc, correct",
+		    on->name);
       dbdesc->reserved1 = 0;
       dbdesc->reserved2 = 0;
     }
@@ -860,7 +860,7 @@
   else
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Can't decide which is master, ignore");
+        zlog_debug ("Can't decide which is master, ignore");
     }
 }
 
@@ -881,14 +881,14 @@
   if (on == NULL)
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Neighbor not found, ignore");
+        zlog_debug ("Neighbor not found, ignore");
       return;
     }
 
   if (memcmp (src, &on->linklocal_addr, sizeof (struct in6_addr)))
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Seems to be from Secondary I/F of the neighbor, ignore");
+        zlog_debug ("Seems to be from Secondary I/F of the neighbor, ignore");
       return;
     }
 
@@ -897,7 +897,7 @@
       on->state != OSPF6_NEIGHBOR_FULL)
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Neighbor state less than Exchange, ignore");
+        zlog_debug ("Neighbor state less than Exchange, ignore");
       return;
     }
 
@@ -921,7 +921,7 @@
           break;
         default:
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Ignoring LSA of reserved scope");
+            zlog_debug ("Ignoring LSA of reserved scope");
           continue;
           break;
         }
@@ -936,8 +936,8 @@
               inet_ntop (AF_INET, &e->id, id, sizeof (id));
               inet_ntop (AF_INET, &e->adv_router, adv_router,
                      sizeof (adv_router));
-              zlog_info ("Can't find requested [%s Id:%s Adv:%s]",
-                         ospf6_lstype_name (e->type), id, adv_router);
+              zlog_debug ("Can't find requested [%s Id:%s Adv:%s]",
+			  ospf6_lstype_name (e->type), id, adv_router);
             }
           thread_add_event (master, bad_lsreq, on, 0);
           return;
@@ -949,7 +949,7 @@
   if (p != OSPF6_MESSAGE_END (oh))
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Trailing garbage ignored");
+        zlog_debug ("Trailing garbage ignored");
     }
 
   /* schedule send lsupdate */
@@ -974,14 +974,14 @@
   if (on == NULL)
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Neighbor not found, ignore");
+        zlog_debug ("Neighbor not found, ignore");
       return;
     }
 
   if (memcmp (src, &on->linklocal_addr, sizeof (struct in6_addr)))
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Seems to be from Secondary I/F of the neighbor, ignore");
+        zlog_debug ("Seems to be from Secondary I/F of the neighbor, ignore");
       return;
     }
 
@@ -990,7 +990,7 @@
       on->state != OSPF6_NEIGHBOR_FULL)
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Neighbor state less than Exchange, ignore");
+        zlog_debug ("Neighbor state less than Exchange, ignore");
       return;
     }
 
@@ -1010,7 +1010,7 @@
       if (OSPF6_LSA_SIZE (p) < sizeof (struct ospf6_lsa_header))
         {
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Malformed LSA length, quit processing");
+            zlog_debug ("Malformed LSA length, quit processing");
           break;
         }
 
@@ -1021,12 +1021,12 @@
   if (num != 0)
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Malformed LSA number or LSA length");
+        zlog_debug ("Malformed LSA number or LSA length");
     }
   if (p != OSPF6_MESSAGE_END (oh))
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Trailing garbage ignored");
+        zlog_debug ("Trailing garbage ignored");
     }
 
   /* RFC2328 Section 10.9: When the neighbor responds to these requests
@@ -1061,14 +1061,14 @@
   if (on == NULL)
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Neighbor not found, ignore");
+        zlog_debug ("Neighbor not found, ignore");
       return;
     }
 
   if (memcmp (src, &on->linklocal_addr, sizeof (struct in6_addr)))
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Seems to be from Secondary I/F of the neighbor, ignore");
+        zlog_debug ("Seems to be from Secondary I/F of the neighbor, ignore");
       return;
     }
 
@@ -1077,7 +1077,7 @@
       on->state != OSPF6_NEIGHBOR_FULL)
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Neighbor state less than Exchange, ignore");
+        zlog_debug ("Neighbor state less than Exchange, ignore");
       return;
     }
 
@@ -1100,14 +1100,14 @@
           break;
         case OSPF6_SCOPE_RESERVED:
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Ignoring LSA of reserved scope");
+            zlog_debug ("Ignoring LSA of reserved scope");
           ospf6_lsa_delete (his);
           continue;
           break;
         }
 
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("%s acknowledged by %s", his->name, on->name);
+        zlog_debug ("%s acknowledged by %s", his->name, on->name);
 
       /* Find database copy */
       mine = ospf6_lsdb_lookup (his->header->type, his->header->id,
@@ -1115,7 +1115,7 @@
       if (mine == NULL)
         {
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("No database copy");
+            zlog_debug ("No database copy");
           ospf6_lsa_delete (his);
           continue;
         }
@@ -1126,7 +1126,7 @@
       if (mine == NULL)
         {
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Not on %s's retrans-list", on->name);
+            zlog_debug ("Not on %s's retrans-list", on->name);
           ospf6_lsa_delete (his);
           continue;
         }
@@ -1136,14 +1136,14 @@
           /* Log this questionable acknowledgement,
              and examine the next one. */
           if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-            zlog_info ("Questionable acknowledgement");
+            zlog_debug ("Questionable acknowledgement");
           ospf6_lsa_delete (his);
           continue;
         }
 
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Acknowledged, remove from %s's retrans-list",
-                   on->name);
+        zlog_debug ("Acknowledged, remove from %s's retrans-list",
+		    on->name);
 
       if (OSPF6_LSA_IS_MAXAGE (mine))
         ospf6_maxage_remove (on->ospf6_if->area->ospf6);
@@ -1156,7 +1156,7 @@
   if (p != OSPF6_MESSAGE_END (oh))
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Trailing garbage ignored");
+        zlog_debug ("Trailing garbage ignored");
     }
 }
 
@@ -1180,7 +1180,7 @@
         XFREE (MTYPE_OSPF6_MESSAGE, recvnew);
       if (sendnew)
         XFREE (MTYPE_OSPF6_MESSAGE, sendnew);
-      zlog_info ("Could not allocate I/O buffer of size %d.", size);
+      zlog_debug ("Could not allocate I/O buffer of size %d.", size);
       return iobuflen;
     }
 
@@ -1234,7 +1234,7 @@
   oi = ospf6_interface_lookup_by_ifindex (ifindex);
   if (oi == NULL || oi->area == NULL)
     {
-      zlog_info ("Message received on disabled interface");
+      zlog_debug ("Message received on disabled interface");
       return 0;
     }
 
@@ -1245,12 +1245,12 @@
     {
       inet_ntop (AF_INET6, &src, srcname, sizeof (srcname));
       inet_ntop (AF_INET6, &dst, dstname, sizeof (dstname));
-      zlog_info ("%s received on %s",
+      zlog_debug ("%s received on %s",
                  OSPF6_MESSAGE_TYPE_NAME (oh->type), oi->interface->name);
-      zlog_info ("    src: %s", srcname);
-      zlog_info ("    dst: %s", dstname);
+      zlog_debug ("    src: %s", srcname);
+      zlog_debug ("    dst: %s", dstname);
       if (len != ntohs (oh->length))
-        zlog_info ("Message length does not match actually received: %d", len);
+        zlog_debug ("Message length does not match actually received: %d", len);
 
       switch (oh->type)
         {
@@ -1270,7 +1270,7 @@
             ospf6_lsack_print (oh);
             break;
           default:
-            zlog_info ("Unknown message");
+            zlog_debug ("Unknown message");
             break;
         }
     }
@@ -1278,7 +1278,7 @@
   if (CHECK_FLAG (oi->flag, OSPF6_INTERFACE_PASSIVE))
     {
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
-        zlog_info ("Ignore message on passive interface %s",
+        zlog_debug ("Ignore message on passive interface %s",
                    oi->interface->name);
       return 0;
     }
@@ -1307,7 +1307,7 @@
 
       default:
         if (IS_OSPF6_DEBUG_MESSAGE (OSPF6_MESSAGE_TYPE_UNKNOWN, RECV))
-          zlog_info ("Unknown message");
+          zlog_debug ("Unknown message");
         break;
     }
 
@@ -1346,10 +1346,10 @@
         inet_ntop (AF_INET6, src, srcname, sizeof (srcname));
       else
         memset (srcname, 0, sizeof (srcname));
-      zlog_info ("%s send on %s",
+      zlog_debug ("%s send on %s",
                  OSPF6_MESSAGE_TYPE_NAME (oh->type), oi->interface->name);
-      zlog_info ("    src: %s", srcname);
-      zlog_info ("    dst: %s", dstname);
+      zlog_debug ("    src: %s", srcname);
+      zlog_debug ("    dst: %s", dstname);
 
       switch (oh->type)
         {
@@ -1369,7 +1369,7 @@
             ospf6_lsack_print (oh);
             break;
           default:
-            zlog_info ("Unknown message");
+            zlog_debug ("Unknown message");
             assert (0);
             break;
         }
@@ -1397,7 +1397,7 @@
   if (oi->state <= OSPF6_INTERFACE_DOWN)
     {
       if (IS_OSPF6_DEBUG_MESSAGE (OSPF6_MESSAGE_TYPE_HELLO, SEND))
-        zlog_info ("Unable to send Hello on down interface %s",
+        zlog_debug ("Unable to send Hello on down interface %s",
                    oi->interface->name);
       return 0;
     }
@@ -1432,7 +1432,7 @@
       if (p - sendbuf + sizeof (u_int32_t) > oi->ifmtu)
         {
           if (IS_OSPF6_DEBUG_MESSAGE (OSPF6_MESSAGE_TYPE_HELLO, SEND))
-            zlog_info ("sending Hello message: exceeds I/F MTU");
+            zlog_debug ("sending Hello message: exceeds I/F MTU");
           break;
         }
 
@@ -1462,8 +1462,8 @@
   if (on->state < OSPF6_NEIGHBOR_EXSTART)
     {
       if (IS_OSPF6_DEBUG_MESSAGE (OSPF6_MESSAGE_TYPE_DBDESC, SEND))
-        zlog_info ("Quit to send DbDesc to neighbor %s state %s",
-                   on->name, ospf6_neighbor_state_str[on->state]);
+        zlog_debug ("Quit to send DbDesc to neighbor %s state %s",
+		    on->name, ospf6_neighbor_state_str[on->state]);
       return 0;
     }
 
@@ -1580,8 +1580,8 @@
       on->state != OSPF6_NEIGHBOR_LOADING)
     {
       if (IS_OSPF6_DEBUG_MESSAGE (OSPF6_MESSAGE_TYPE_LSREQ, SEND))
-        zlog_info ("Quit to send LSReq to neighbor %s state %s",
-                   on->name, ospf6_neighbor_state_str[on->state]);
+        zlog_debug ("Quit to send LSReq to neighbor %s state %s",
+		    on->name, ospf6_neighbor_state_str[on->state]);
       return 0;
     }
 
@@ -1641,13 +1641,13 @@
   on->thread_send_lsupdate = (struct thread *) NULL;
 
   if (IS_OSPF6_DEBUG_MESSAGE (OSPF6_MESSAGE_TYPE_LSUPDATE, SEND))
-    zlog_info ("LSUpdate to neighbor %s", on->name);
+    zlog_debug ("LSUpdate to neighbor %s", on->name);
 
   if (on->state < OSPF6_NEIGHBOR_EXCHANGE)
     {
       if (IS_OSPF6_DEBUG_MESSAGE (OSPF6_MESSAGE_TYPE_LSUPDATE, SEND))
-        zlog_info ("Quit to send (neighbor state %s)",
-                   ospf6_neighbor_state_str[on->state]);
+        zlog_debug ("Quit to send (neighbor state %s)",
+		    ospf6_neighbor_state_str[on->state]);
       return 0;
     }
 
@@ -1656,7 +1656,7 @@
       on->retrans_list->count == 0)
     {
       if (IS_OSPF6_DEBUG_MESSAGE (OSPF6_MESSAGE_TYPE_LSUPDATE, SEND))
-        zlog_info ("Quit to send (nothing to send)");
+        zlog_debug ("Quit to send (nothing to send)");
       return 0;
     }
 
@@ -1746,8 +1746,8 @@
   if (oi->state <= OSPF6_INTERFACE_WAITING)
     {
       if (IS_OSPF6_DEBUG_MESSAGE (OSPF6_MESSAGE_TYPE_LSUPDATE, SEND))
-        zlog_info ("Quit to send LSUpdate to interface %s state %s",
-                   oi->interface->name, ospf6_interface_state_str[oi->state]);
+        zlog_debug ("Quit to send LSUpdate to interface %s state %s",
+		    oi->interface->name, ospf6_interface_state_str[oi->state]);
       return 0;
     }
 
@@ -1817,8 +1817,8 @@
   if (on->state < OSPF6_NEIGHBOR_EXCHANGE)
     {
       if (IS_OSPF6_DEBUG_MESSAGE (OSPF6_MESSAGE_TYPE_LSACK, SEND))
-        zlog_info ("Quit to send LSAck to neighbor %s state %s",
-                   on->name, ospf6_neighbor_state_str[on->state]);
+        zlog_debug ("Quit to send LSAck to neighbor %s state %s",
+		    on->name, ospf6_neighbor_state_str[on->state]);
       return 0;
     }
 
@@ -1877,8 +1877,8 @@
   if (oi->state <= OSPF6_INTERFACE_WAITING)
     {
       if (IS_OSPF6_DEBUG_MESSAGE (OSPF6_MESSAGE_TYPE_LSACK, SEND))
-        zlog_info ("Quit to send LSAck to interface %s state %s",
-                   oi->interface->name, ospf6_interface_state_str[oi->state]);
+        zlog_debug ("Quit to send LSAck to interface %s state %s",
+		    oi->interface->name, ospf6_interface_state_str[oi->state]);
       return 0;
     }
 
diff --git a/ospf6d/ospf6_neighbor.c b/ospf6d/ospf6_neighbor.c
index 7b91c17..5e71c7b 100644
--- a/ospf6d/ospf6_neighbor.c
+++ b/ospf6d/ospf6_neighbor.c
@@ -161,9 +161,9 @@
   /* log */
   if (IS_OSPF6_DEBUG_NEIGHBOR (STATE))
     {
-      zlog_info ("Neighbor state change %s: [%s]->[%s]", on->name,
-                 ospf6_neighbor_state_str[prev_state],
-                 ospf6_neighbor_state_str[next_state]);
+      zlog_debug ("Neighbor state change %s: [%s]->[%s]", on->name,
+		  ospf6_neighbor_state_str[prev_state],
+		  ospf6_neighbor_state_str[next_state]);
     }
 
   if (prev_state == OSPF6_NEIGHBOR_FULL || next_state == OSPF6_NEIGHBOR_FULL)
@@ -218,7 +218,7 @@
   assert (on);
 
   if (IS_OSPF6_DEBUG_NEIGHBOR (EVENT))
-    zlog_info ("Neighbor Event %s: *HelloReceived*", on->name);
+    zlog_debug ("Neighbor Event %s: *HelloReceived*", on->name);
 
   /* reset Inactivity Timer */
   THREAD_OFF (on->inactivity_timer);
@@ -243,7 +243,7 @@
     return 0;
 
   if (IS_OSPF6_DEBUG_NEIGHBOR (EVENT))
-    zlog_info ("Neighbor Event %s: *2Way-Received*", on->name);
+    zlog_debug ("Neighbor Event %s: *2Way-Received*", on->name);
 
   thread_add_event (master, neighbor_change, on->ospf6_if, 0);
 
@@ -278,7 +278,7 @@
     return 0;
 
   if (IS_OSPF6_DEBUG_NEIGHBOR (EVENT))
-    zlog_info ("Neighbor Event %s: *NegotiationDone*", on->name);
+    zlog_debug ("Neighbor Event %s: *NegotiationDone*", on->name);
 
   /* clear ls-list */
   ospf6_lsdb_remove_all (on->summary_list);
@@ -347,7 +347,7 @@
     return 0;
 
   if (IS_OSPF6_DEBUG_NEIGHBOR (EVENT))
-    zlog_info ("Neighbor Event %s: *ExchangeDone*", on->name);
+    zlog_debug ("Neighbor Event %s: *ExchangeDone*", on->name);
 
   THREAD_OFF (on->thread_send_dbdesc);
   ospf6_lsdb_remove_all (on->dbdesc_list);
@@ -377,7 +377,7 @@
     return 0;
 
   if (IS_OSPF6_DEBUG_NEIGHBOR (EVENT))
-    zlog_info ("Neighbor Event %s: *LoadingDone*", on->name);
+    zlog_debug ("Neighbor Event %s: *LoadingDone*", on->name);
 
   assert (on->request_list->count == 0);
 
@@ -396,7 +396,7 @@
   assert (on);
 
   if (IS_OSPF6_DEBUG_NEIGHBOR (EVENT))
-    zlog_info ("Neighbor Event %s: *AdjOK?*", on->name);
+    zlog_debug ("Neighbor Event %s: *AdjOK?*", on->name);
 
   if (on->state == OSPF6_NEIGHBOR_TWOWAY && need_adjacency (on))
     {
@@ -440,7 +440,7 @@
     return 0;
 
   if (IS_OSPF6_DEBUG_NEIGHBOR (EVENT))
-    zlog_info ("Neighbor Event %s: *SeqNumberMismatch*", on->name);
+    zlog_debug ("Neighbor Event %s: *SeqNumberMismatch*", on->name);
 
   ospf6_neighbor_state_change (OSPF6_NEIGHBOR_EXSTART, on);
   SET_FLAG (on->dbdesc_bits, OSPF6_DBDESC_MSBIT);
@@ -476,7 +476,7 @@
     return 0;
 
   if (IS_OSPF6_DEBUG_NEIGHBOR (EVENT))
-    zlog_info ("Neighbor Event %s: *BadLSReq*", on->name);
+    zlog_debug ("Neighbor Event %s: *BadLSReq*", on->name);
 
   ospf6_neighbor_state_change (OSPF6_NEIGHBOR_EXSTART, on);
   SET_FLAG (on->dbdesc_bits, OSPF6_DBDESC_MSBIT);
@@ -512,7 +512,7 @@
     return 0;
 
   if (IS_OSPF6_DEBUG_NEIGHBOR (EVENT))
-    zlog_info ("Neighbor Event %s: *1Way-Received*", on->name);
+    zlog_debug ("Neighbor Event %s: *1Way-Received*", on->name);
 
   ospf6_neighbor_state_change (OSPF6_NEIGHBOR_INIT, on);
   thread_add_event (master, neighbor_change, on->ospf6_if, 0);
@@ -543,7 +543,7 @@
   assert (on);
 
   if (IS_OSPF6_DEBUG_NEIGHBOR (EVENT))
-    zlog_info ("Neighbor Event %s: *InactivityTimer*", on->name);
+    zlog_debug ("Neighbor Event %s: *InactivityTimer*", on->name);
 
   on->inactivity_timer = NULL;
   on->drouter = on->prev_drouter = 0;
diff --git a/ospf6d/ospf6_network.c b/ospf6d/ospf6_network.c
index 382310f..4df7c9d 100644
--- a/ospf6d/ospf6_network.c
+++ b/ospf6d/ospf6_network.c
@@ -130,7 +130,7 @@
               ifindex, safe_strerror (errno));
 #if 0
   else
-    zlog_info ("Network: Join AllSPFRouters on ifindex %d", ifindex);
+    zlog_debug ("Network: Join AllSPFRouters on ifindex %d", ifindex);
 #endif
 }
 
@@ -150,7 +150,7 @@
                ifindex, safe_strerror (errno));
 #if 0
   else
-    zlog_info ("Network: Leave AllSPFRouters on ifindex %d", ifindex);
+    zlog_debug ("Network: Leave AllSPFRouters on ifindex %d", ifindex);
 #endif
 }
 
@@ -170,7 +170,7 @@
                ifindex, safe_strerror (errno));
 #if 0
   else
-    zlog_info ("Network: Join AllDRouters on ifindex %d", ifindex);
+    zlog_debug ("Network: Join AllDRouters on ifindex %d", ifindex);
 #endif
 }
 
@@ -189,7 +189,7 @@
     zlog_warn ("Network: Leave AllDRouters on ifindex %d Failed", ifindex);
 #if 0
   else
-    zlog_info ("Network: Leave AllDRouters on ifindex %d", ifindex);
+    zlog_debug ("Network: Leave AllDRouters on ifindex %d", ifindex);
 #endif
 }
 
diff --git a/ospf6d/ospf6_route.c b/ospf6d/ospf6_route.c
index c1c6d35..f39a1b3 100644
--- a/ospf6d/ospf6_route.c
+++ b/ospf6d/ospf6_route.c
@@ -214,15 +214,15 @@
   if (num == table->count)
     return;
 
-  zlog_info ("PANIC !! table[%p]->count = %d, real = %d",
-             table, table->count, num);
+  zlog_debug ("PANIC !! table[%p]->count = %d, real = %d",
+	      table, table->count, num);
   for (debug = ospf6_route_head (table); debug;
        debug = ospf6_route_next (debug))
     {
       prefix2str (&debug->prefix, buf, sizeof (buf));
-      zlog_info ("%p %p %s", debug->prev, debug->next, buf);
+      zlog_debug ("%p %p %s", debug->prev, debug->next, buf);
     }
-  zlog_info ("DUMP END");
+  zlog_debug ("DUMP END");
 
   assert (num == table->count);
 }
@@ -252,7 +252,7 @@
     prefix2str (&route->prefix, buf, sizeof (buf));
 
   if (IS_OSPF6_DEBUG_ROUTE (TABLE))
-    zlog_info ("route add %s", buf);
+    zlog_debug ("route add %s", buf);
 
   gettimeofday (&now, NULL);
 
@@ -283,7 +283,7 @@
       if (ospf6_route_is_identical (old, route))
         {
           if (IS_OSPF6_DEBUG_ROUTE (TABLE))
-            zlog_info ("  identical route found, ignore");
+            zlog_debug ("  identical route found, ignore");
 
           ospf6_route_delete (route);
           SET_FLAG (old->flag, OSPF6_ROUTE_ADD);
@@ -293,7 +293,7 @@
         }
 
       if (IS_OSPF6_DEBUG_ROUTE (TABLE))
-        zlog_info ("  old route found, replace");
+        zlog_debug ("  old route found, replace");
 
       /* replace old one if exists */
       if (node->info == old)
@@ -328,7 +328,7 @@
   if (prev || next)
     {
       if (IS_OSPF6_DEBUG_ROUTE (TABLE))
-        zlog_info ("  another path found, insert");
+        zlog_debug ("  another path found, insert");
 
       if (prev == NULL)
         prev = next->prev;
@@ -366,7 +366,7 @@
 
   /* Else, this is the brand new route regarding to the prefix */
   if (IS_OSPF6_DEBUG_ROUTE (TABLE))
-    zlog_info ("  brand new route, add");
+    zlog_debug ("  brand new route, add");
 
   assert (node->info == NULL);
   node->info = route;
@@ -439,7 +439,7 @@
     prefix2str (&route->prefix, buf, sizeof (buf));
 
   if (IS_OSPF6_DEBUG_ROUTE (TABLE))
-    zlog_info ("route remove: %s", buf);
+    zlog_debug ("route remove: %s", buf);
 
   node = route_node_lookup (table->table, &route->prefix);
   assert (node);
diff --git a/ospf6d/ospf6_snmp.c b/ospf6d/ospf6_snmp.c
index 3e8770d..3cc4f2d 100644
--- a/ospf6d/ospf6_snmp.c
+++ b/ospf6d/ospf6_snmp.c
@@ -314,9 +314,9 @@
   if (len)
     oid2in_addr (name + v->namelen, len, (struct in_addr *) &area_id);
 
-  zlog_info ("SNMP access by area: %s, exact=%d len=%d length=%d",
-             inet_ntoa (* (struct in_addr *) &area_id),
-             exact, len, *length);
+  zlog_debug ("SNMP access by area: %s, exact=%d len=%d length=%d",
+	      inet_ntoa (* (struct in_addr *) &area_id),
+	      exact, len, *length);
 
   for (node = listhead (ospf6->area_list); node; nextnode (node))
     {
@@ -339,9 +339,9 @@
   oid_copy_addr (name + v->namelen, (struct in_addr *) &area->area_id,
                  sizeof (u_int32_t));
 
-  zlog_info ("SNMP found area: %s, exact=%d len=%d length=%d",
-             inet_ntoa (* (struct in_addr *) &area->area_id),
-             exact, len, *length);
+  zlog_debug ("SNMP found area: %s, exact=%d len=%d length=%d",
+	      inet_ntoa (* (struct in_addr *) &area->area_id),
+	      exact, len, *length);
 
   switch (v->magic)
     {
@@ -424,9 +424,9 @@
   inet_ntop (AF_INET, &area_id, a, sizeof (a));
   inet_ntop (AF_INET, &adv_router, b, sizeof (b));
   inet_ntop (AF_INET, &id, c, sizeof (c));
-  zlog_info ("SNMP access by lsdb: area=%s exact=%d length=%d magic=%d"
-             " type=%#x adv_router=%s id=%s",
-             a, exact, *length, v->magic, ntohs (type), b, c);
+  zlog_debug ("SNMP access by lsdb: area=%s exact=%d length=%d magic=%d"
+	      " type=%#x adv_router=%s id=%s",
+	      a, exact, *length, v->magic, ntohs (type), b, c);
 
   if (exact)
     {
@@ -457,12 +457,12 @@
 
   if (! lsa)
     {
-      zlog_info ("SNMP respond: No LSA to return");
+      zlog_debug ("SNMP respond: No LSA to return");
       return NULL;
     }
   oa = OSPF6_AREA (lsa->lsdb->data);
 
-  zlog_info ("SNMP respond: area: %s lsa: %s", oa->name, lsa->name);
+  zlog_debug ("SNMP respond: area: %s lsa: %s", oa->name, lsa->name);
 
   /* Add Index (AreaId, Type, RouterId, Lsid) */
   *length = v->namelen + OSPFV3_AREA_LSDB_ENTRY_EXACT_OFFSET;
diff --git a/ospf6d/ospf6_spf.c b/ospf6d/ospf6_spf.c
index 4010a5e..d212c43 100644
--- a/ospf6d/ospf6_spf.c
+++ b/ospf6d/ospf6_spf.c
@@ -157,10 +157,10 @@
       inet_ntop (AF_INET, &id, ibuf, sizeof (ibuf));
       inet_ntop (AF_INET, &adv_router, abuf, sizeof (abuf));
       if (lsa)
-        zlog_info ("  Link to: %s", lsa->name);
+        zlog_debug ("  Link to: %s", lsa->name);
       else
-        zlog_info ("  Link to: [%s Id:%s Adv:%s] No LSA",
-                   ospf6_lstype_name (type), ibuf, abuf);
+        zlog_debug ("  Link to: [%s Id:%s Adv:%s] No LSA",
+		    ospf6_lstype_name (type), ibuf, abuf);
     }
 
   return lsa;
@@ -213,7 +213,7 @@
     }
 
   if (IS_OSPF6_DEBUG_SPF (PROCESS))
-    zlog_info ("  Backlink %s", (found ? "OK" : "FAIL"));
+    zlog_debug ("  Backlink %s", (found ? "OK" : "FAIL"));
 
   return found;
 }
@@ -237,7 +237,7 @@
   if (oi == NULL)
     {
       if (IS_OSPF6_DEBUG_SPF (PROCESS))
-        zlog_warn ("Can't find interface in SPF: ifindex %d", ifindex);
+        zlog_debug ("Can't find interface in SPF: ifindex %d", ifindex);
       return;
     }
 
@@ -258,7 +258,7 @@
       if (IS_OSPF6_DEBUG_SPF (PROCESS))
         {
           inet_ntop (AF_INET6, &link_lsa->linklocal_addr, buf, sizeof (buf));
-          zlog_info ("  nexthop %s from %s", buf, lsa->name);
+          zlog_debug ("  nexthop %s from %s", buf, lsa->name);
         }
 
       if (i < OSPF6_MULTI_PATH_LIMIT)
@@ -271,7 +271,7 @@
     }
 
   if (i == 0 && IS_OSPF6_DEBUG_SPF (PROCESS))
-    zlog_info ("No nexthop for %s found", w->name);
+    zlog_debug ("No nexthop for %s found", w->name);
 }
 
 int
@@ -284,22 +284,22 @@
   struct listnode *node;
 
   if (IS_OSPF6_DEBUG_SPF (PROCESS))
-    zlog_info ("SPF install %s hops %d cost %d",
-               v->name, v->hops, v->cost);
+    zlog_debug ("SPF install %s hops %d cost %d",
+		v->name, v->hops, v->cost);
 
   route = ospf6_route_lookup (&v->vertex_id, result_table);
   if (route && route->path.cost < v->cost)
     {
       if (IS_OSPF6_DEBUG_SPF (PROCESS))
-        zlog_info ("  already installed with lower cost (%d), ignore",
-                   route->path.cost);
+        zlog_debug ("  already installed with lower cost (%d), ignore",
+		    route->path.cost);
       ospf6_vertex_delete (v);
       return -1;
     }
   else if (route && route->path.cost == v->cost)
     {
       if (IS_OSPF6_DEBUG_SPF (PROCESS))
-        zlog_info ("  another path found, merge");
+        zlog_debug ("  another path found, merge");
 
       for (i = 0; ospf6_nexthop_is_set (&v->nexthop[i]) &&
            i < OSPF6_MULTI_PATH_LIMIT; i++)
@@ -478,8 +478,8 @@
 
           /* add new candidate to the candidate_list */
           if (IS_OSPF6_DEBUG_SPF (PROCESS))
-            zlog_info ("  New candidate: %s hops %d cost %d",
-                       w->name, w->hops, w->cost);
+            zlog_debug ("  New candidate: %s hops %d cost %d",
+			w->name, w->hops, w->cost);
           pqueue_enqueue (w, candidate_list);
         }
     }
@@ -510,7 +510,7 @@
       p = (buffer + strlen (buffer) < end ? buffer + strlen (buffer) : end);
     }
 
-  zlog_info ("%s", buffer);
+  zlog_debug ("%s", buffer);
 }
 
 int
@@ -523,7 +523,7 @@
   oa->thread_spf_calculation = NULL;
 
   if (IS_OSPF6_DEBUG_SPF (PROCESS))
-    zlog_info ("SPF calculation for Area %s", oa->name);
+    zlog_debug ("SPF calculation for Area %s", oa->name);
   if (IS_OSPF6_DEBUG_SPF (DATABASE))
     ospf6_spf_log_database (oa);
 
@@ -534,8 +534,8 @@
   timersub (&end, &start, &runtime);
 
   if (IS_OSPF6_DEBUG_SPF (PROCESS) || IS_OSPF6_DEBUG_SPF (TIME))
-    zlog_info ("SPF runtime: %ld sec %ld usec",
-               runtime.tv_sec, runtime.tv_usec);
+    zlog_debug ("SPF runtime: %ld sec %ld usec",
+		runtime.tv_sec, runtime.tv_usec);
 
   ospf6_intra_route_calculation (oa);
   ospf6_intra_brouter_calculation (oa);
diff --git a/ospf6d/ospf6_zebra.c b/ospf6d/ospf6_zebra.c
index 2b21567..bdd3bab 100644
--- a/ospf6d/ospf6_zebra.c
+++ b/ospf6d/ospf6_zebra.c
@@ -92,8 +92,8 @@
 
   ifp = zebra_interface_add_read (zclient->ibuf);
   if (IS_OSPF6_DEBUG_ZEBRA (RECV))
-    zlog_info ("Zebra Interface add: %s index %d mtu %d",
-               ifp->name, ifp->ifindex, ifp->mtu6);
+    zlog_debug ("Zebra Interface add: %s index %d mtu %d",
+		ifp->name, ifp->ifindex, ifp->mtu6);
   ospf6_interface_if_add (ifp);
   return 0;
 }
@@ -106,8 +106,8 @@
 
   ifp = zebra_interface_delete_read (zclient->ibuf);
   if (IS_OSPF6_DEBUG_ZEBRA (RECV))
-    zlog_info ("Zebra Interface delete: %s index %d mtu %d",
-               ifp->name, ifp->ifindex, ifp->mtu6);
+    zlog_debug ("Zebra Interface delete: %s index %d mtu %d",
+		ifp->name, ifp->ifindex, ifp->mtu6);
 
   ospf6_interface_if_del (ifp);
 #endif /*0*/
@@ -122,9 +122,9 @@
 
   ifp = zebra_interface_state_read (zclient->ibuf);
   if (IS_OSPF6_DEBUG_ZEBRA (RECV))
-    zlog_info ("Zebra Interface state change: "
-                 "%s index %d flags %ld metric %d mtu %d",
-               ifp->name, ifp->ifindex, ifp->flags, ifp->metric, ifp->mtu6);
+    zlog_debug ("Zebra Interface state change: "
+                "%s index %d flags %ld metric %d mtu %d",
+		ifp->name, ifp->ifindex, ifp->flags, ifp->metric, ifp->mtu6);
 
   ospf6_interface_state_update (ifp);
   return 0;
@@ -142,10 +142,10 @@
     return 0;
 
   if (IS_OSPF6_DEBUG_ZEBRA (RECV))
-    zlog_info ("Zebra Interface address add: %s %5s %s/%d",
-               c->ifp->name, prefix_family_str (c->address),
-               inet_ntop (c->address->family, &c->address->u.prefix,
-                          buf, sizeof (buf)), c->address->prefixlen);
+    zlog_debug ("Zebra Interface address add: %s %5s %s/%d",
+		c->ifp->name, prefix_family_str (c->address),
+		inet_ntop (c->address->family, &c->address->u.prefix,
+			   buf, sizeof (buf)), c->address->prefixlen);
 
   if (c->address->family == AF_INET6)
     ospf6_interface_connected_route_update (c->ifp);
@@ -165,10 +165,10 @@
     return 0;
 
   if (IS_OSPF6_DEBUG_ZEBRA (RECV))
-    zlog_info ("Zebra Interface address delete: %s %5s %s/%d",
-               c->ifp->name, prefix_family_str (c->address),
-               inet_ntop (c->address->family, &c->address->u.prefix,
-                          buf, sizeof (buf)), c->address->prefixlen);
+    zlog_debug ("Zebra Interface address delete: %s %5s %s/%d",
+		c->ifp->name, prefix_family_str (c->address),
+		inet_ntop (c->address->family, &c->address->u.prefix,
+			   buf, sizeof (buf)), c->address->prefixlen);
 
   if (c->address->family == AF_INET6)
     ospf6_interface_connected_route_update (c->ifp);
@@ -242,9 +242,9 @@
       else
         snprintf (nexthopstr, sizeof (nexthopstr), "::");
 
-      zlog_info ("Zebra Receive route %s: %s %s nexthop %s ifindex %ld",
-                 (command == ZEBRA_IPV6_ROUTE_ADD ? "add" : "delete"),
-                 zebra_route_name[api.type], prefixstr, nexthopstr, ifindex);
+      zlog_debug ("Zebra Receive route %s: %s %s nexthop %s ifindex %ld",
+		  (command == ZEBRA_IPV6_ROUTE_ADD ? "add" : "delete"),
+		  zebra_route_name[api.type], prefixstr, nexthopstr, ifindex);
     }
  
   if (command == ZEBRA_IPV6_ROUTE_ADD)
@@ -355,14 +355,14 @@
   if (IS_OSPF6_DEBUG_ZEBRA (SEND))
     {
       prefix2str (&request->prefix, buf, sizeof (buf));
-      zlog_info ("Send %s route: %s",
-                 (type == REM ? "remove" : "add"), buf);
+      zlog_debug ("Send %s route: %s",
+		  (type == REM ? "remove" : "add"), buf);
     }
 
   if (zclient->sock < 0)
     {
       if (IS_OSPF6_DEBUG_ZEBRA (SEND))
-        zlog_info ("  Not connected to Zebra");
+        zlog_debug ("  Not connected to Zebra");
       return;
     }
 
@@ -371,7 +371,7 @@
        request->path.type == OSPF6_PATH_TYPE_EXTERNAL2))
     {
       if (IS_OSPF6_DEBUG_ZEBRA (SEND))
-        zlog_info ("  Ignore self-originated external route");
+        zlog_debug ("  Ignore self-originated external route");
       return;
     }
 
@@ -381,7 +381,7 @@
       request->next && ospf6_route_is_same (request, request->next))
     {
       if (IS_OSPF6_DEBUG_ZEBRA (SEND))
-        zlog_info ("  Best-path removal resulted Sencondary addition");
+        zlog_debug ("  Best-path removal resulted Sencondary addition");
       type = ADD;
       request = request->next;
     }
@@ -391,7 +391,7 @@
     {
       /* this is not preferred best route, ignore */
       if (IS_OSPF6_DEBUG_ZEBRA (SEND))
-        zlog_info ("  Ignore non-best route");
+        zlog_debug ("  Ignore non-best route");
       return;
     }
 
@@ -403,7 +403,7 @@
   if (nhcount == 0)
     {
       if (IS_OSPF6_DEBUG_ZEBRA (SEND))
-        zlog_info ("  No nexthop, ignore");
+        zlog_debug ("  No nexthop, ignore");
       return;
     }
 
@@ -433,8 +433,8 @@
           inet_ntop (AF_INET6, &request->nexthop[i].address,
                      buf, sizeof (buf));
           if_indextoname (request->nexthop[i].ifindex, ifname);
-          zlog_info ("  nexthop: %s%%%s(%d)", buf, ifname,
-                     request->nexthop[i].ifindex);
+          zlog_debug ("  nexthop: %s%%%s(%d)", buf, ifname,
+		      request->nexthop[i].ifindex);
         }
       nexthops[i] = &request->nexthop[i].address;
       ifindexes[i] = request->nexthop[i].ifindex;
