diff --git a/ospf6d/ospf6_abr.c b/ospf6d/ospf6_abr.c
index 180a204..8224b10 100644
--- a/ospf6d/ospf6_abr.c
+++ b/ospf6d/ospf6_abr.c
@@ -472,7 +472,7 @@
   ospf6_lsa_originate_area (lsa, area);
 }
 
-void
+static void
 ospf6_abr_range_update (struct ospf6_route *range)
 {
   u_int32_t cost = 0;
@@ -762,7 +762,7 @@
 
 
 /* Display functions */
-int
+static int
 ospf6_inter_area_prefix_lsa_show (struct vty *vty, struct ospf6_lsa *lsa)
 {
   struct ospf6_inter_prefix_lsa *prefix_lsa;
@@ -787,7 +787,7 @@
   return 0;
 }
 
-int
+static int
 ospf6_inter_area_router_lsa_show (struct vty *vty, struct ospf6_lsa *lsa)
 {
   struct ospf6_inter_router_lsa *router_lsa;
@@ -841,7 +841,7 @@
 }
 
 void
-install_element_ospf6_debug_abr ()
+install_element_ospf6_debug_abr (void)
 {
   install_element (ENABLE_NODE, &debug_ospf6_abr_cmd);
   install_element (ENABLE_NODE, &no_debug_ospf6_abr_cmd);
@@ -864,7 +864,7 @@
 };
 
 void
-ospf6_abr_init ()
+ospf6_abr_init (void)
 {
   ospf6_install_lsa_handler (&inter_prefix_handler);
   ospf6_install_lsa_handler (&inter_router_handler);
diff --git a/ospf6d/ospf6_abr.h b/ospf6d/ospf6_abr.h
index 84c6fa5..5d00c47 100644
--- a/ospf6d/ospf6_abr.h
+++ b/ospf6d/ospf6_abr.h
@@ -52,24 +52,22 @@
   { (E)->metric &= htonl (0x00000000); \
     (E)->metric |= htonl (0x00ffffff) & htonl (C); }
 
-int ospf6_is_router_abr (struct ospf6 *o);
+extern int ospf6_is_router_abr (struct ospf6 *o);
 
-void ospf6_abr_enable_area (struct ospf6_area *oa);
-void ospf6_abr_disable_area (struct ospf6_area *oa);
+extern void ospf6_abr_enable_area (struct ospf6_area *oa);
+extern void ospf6_abr_disable_area (struct ospf6_area *oa);
 
-void ospf6_abr_originate_summary_to_area (struct ospf6_route *route,
-                                          struct ospf6_area *area);
-void ospf6_abr_originate_summary (struct ospf6_route *route);
-void ospf6_abr_examin_summary (struct ospf6_lsa *lsa, struct ospf6_area *oa);
-void ospf6_abr_examin_brouter (u_int32_t router_id);
-void ospf6_abr_reimport (struct ospf6_area *oa);
+extern void ospf6_abr_originate_summary_to_area (struct ospf6_route *route,
+                                                struct ospf6_area *area);
+extern void ospf6_abr_originate_summary (struct ospf6_route *route);
+extern void ospf6_abr_examin_summary (struct ospf6_lsa *lsa, struct ospf6_area *oa);
+extern void ospf6_abr_examin_brouter (u_int32_t router_id);
+extern void ospf6_abr_reimport (struct ospf6_area *oa);
 
-int config_write_ospf6_debug_abr (struct vty *vty);
-void install_element_ospf6_debug_abr ();
-int ospf6_abr_config_write (struct vty *vty);
+extern int config_write_ospf6_debug_abr (struct vty *vty);
+extern void install_element_ospf6_debug_abr (void);
+extern int ospf6_abr_config_write (struct vty *vty);
 
-void ospf6_abr_init ();
+extern void ospf6_abr_init (void);
 
 #endif /*OSPF6_ABR_H*/
-
-
diff --git a/ospf6d/ospf6_area.c b/ospf6d/ospf6_area.c
index 94283db..3bfc0ca 100644
--- a/ospf6d/ospf6_area.c
+++ b/ospf6d/ospf6_area.c
@@ -54,7 +54,7 @@
 }
 
 /* schedule routing table recalculation */
-void
+static void
 ospf6_area_lsdb_hook_add (struct ospf6_lsa *lsa)
 {
   switch (ntohs (lsa->header->type))
@@ -84,7 +84,7 @@
     }
 }
 
-void
+static void
 ospf6_area_lsdb_hook_remove (struct ospf6_lsa *lsa)
 {
   switch (ntohs (lsa->header->type))
@@ -114,14 +114,14 @@
     }
 }
 
-void
+static void
 ospf6_area_route_hook_add (struct ospf6_route *route)
 {
   struct ospf6_route *copy = ospf6_route_copy (route);
   ospf6_route_add (copy, ospf6->route_table);
 }
 
-void
+static void
 ospf6_area_route_hook_remove (struct ospf6_route *route)
 {
   struct ospf6_route *copy;
@@ -230,7 +230,7 @@
   return (struct ospf6_area *) NULL;
 }
 
-struct ospf6_area *
+static struct ospf6_area *
 ospf6_area_get (u_int32_t area_id, struct ospf6 *o)
 {
   struct ospf6_area *oa;
@@ -364,7 +364,7 @@
        OSPF6_AREA_ID_STR
        "Configured address range\n"
        "Specify IPv6 prefix\n"
-       );
+       )
 
 DEFUN (no_area_range,
        no_area_range_cmd,
@@ -746,7 +746,7 @@
 }
 
 void
-ospf6_area_init ()
+ospf6_area_init (void)
 {
   install_element (VIEW_NODE, &show_ipv6_ospf6_spf_tree_cmd);
   install_element (VIEW_NODE, &show_ipv6_ospf6_area_spf_tree_cmd);
diff --git a/ospf6d/ospf6_area.h b/ospf6d/ospf6_area.h
index 6bf7e0b..c7c5ee3 100644
--- a/ospf6d/ospf6_area.h
+++ b/ospf6d/ospf6_area.h
@@ -112,19 +112,18 @@
 #define IS_AREA_STUB(oa) (CHECK_FLAG ((oa)->flag, OSPF6_AREA_STUB))
 
 /* prototypes */
-int ospf6_area_cmp (void *va, void *vb);
+extern int ospf6_area_cmp (void *va, void *vb);
 
-struct ospf6_area *ospf6_area_create (u_int32_t, struct ospf6 *);
-void ospf6_area_delete (struct ospf6_area *);
-struct ospf6_area *ospf6_area_lookup (u_int32_t, struct ospf6 *);
+extern struct ospf6_area *ospf6_area_create (u_int32_t, struct ospf6 *);
+extern void ospf6_area_delete (struct ospf6_area *);
+extern struct ospf6_area *ospf6_area_lookup (u_int32_t, struct ospf6 *);
 
-void ospf6_area_enable (struct ospf6_area *);
-void ospf6_area_disable (struct ospf6_area *);
+extern void ospf6_area_enable (struct ospf6_area *);
+extern void ospf6_area_disable (struct ospf6_area *);
 
-void ospf6_area_show (struct vty *, struct ospf6_area *);
+extern void ospf6_area_show (struct vty *, struct ospf6_area *);
 
-void ospf6_area_config_write (struct vty *vty);
-void ospf6_area_init ();
+extern void ospf6_area_config_write (struct vty *vty);
+extern void ospf6_area_init (void);
 
 #endif /* OSPF_AREA_H */
-
diff --git a/ospf6d/ospf6_asbr.c b/ospf6d/ospf6_asbr.c
index c12eeca..37b912b 100644
--- a/ospf6d/ospf6_asbr.c
+++ b/ospf6d/ospf6_asbr.c
@@ -53,7 +53,7 @@
 #define ZROUTE_NAME(x) zebra_route_string(x)
 
 /* AS External LSA origination */
-void
+static void
 ospf6_as_external_lsa_originate (struct ospf6_route *route)
 {
   char buffer[OSPF6_MAX_LSASIZE];
@@ -336,7 +336,7 @@
 
 /* redistribute function */
 
-void
+static void
 ospf6_asbr_routemap_set (int type, const char *mapname)
 {
   if (ospf6->rmap[type].name)
@@ -345,7 +345,7 @@
   ospf6->rmap[type].map = route_map_lookup_by_name (mapname);
 }
 
-void
+static void
 ospf6_asbr_routemap_unset (int type)
 {
   if (ospf6->rmap[type].name)
@@ -354,7 +354,7 @@
   ospf6->rmap[type].map = NULL;
 }
 
-void
+static void
 ospf6_asbr_routemap_update (const char *mapname)
 {
   int type;
@@ -378,13 +378,13 @@
   return o->external_table->count;
 }
 
-void
+static void
 ospf6_asbr_redistribute_set (int type)
 {
   ospf6_zebra_redistribute (type);
 }
 
-void
+static void
 ospf6_asbr_redistribute_unset (int type)
 {
   struct ospf6_route *route;
@@ -731,7 +731,7 @@
   return 0;
 }
 
-void
+static void
 ospf6_redistribute_show_config (struct vty *vty)
 {
   int type;
@@ -774,7 +774,7 @@
 
 
 /* Routemap Functions */
-route_map_result_t
+static route_map_result_t
 ospf6_routemap_rule_match_address_prefixlist (void *rule,
                                               struct prefix *prefix,
                                               route_map_object_t type,
@@ -793,13 +793,13 @@
           RMAP_NOMATCH : RMAP_MATCH);
 }
 
-void *
+static void *
 ospf6_routemap_rule_match_address_prefixlist_compile (const char *arg)
 {
   return XSTRDUP (MTYPE_ROUTE_MAP_COMPILED, arg);
 }
 
-void
+static void
 ospf6_routemap_rule_match_address_prefixlist_free (void *rule)
 {
   XFREE (MTYPE_ROUTE_MAP_COMPILED, rule);
@@ -814,7 +814,7 @@
   ospf6_routemap_rule_match_address_prefixlist_free,
 };
 
-route_map_result_t
+static route_map_result_t
 ospf6_routemap_rule_set_metric_type (void *rule, struct prefix *prefix,
                                      route_map_object_t type, void *object)
 {
@@ -832,7 +832,7 @@
   return RMAP_OKAY;
 }
 
-void *
+static void *
 ospf6_routemap_rule_set_metric_type_compile (const char *arg)
 {
   if (strcmp (arg, "type-2") && strcmp (arg, "type-1"))
@@ -840,7 +840,7 @@
   return XSTRDUP (MTYPE_ROUTE_MAP_COMPILED, arg);
 }
 
-void
+static void
 ospf6_routemap_rule_set_metric_type_free (void *rule)
 {
   XFREE (MTYPE_ROUTE_MAP_COMPILED, rule);
@@ -855,7 +855,7 @@
   ospf6_routemap_rule_set_metric_type_free,
 };
 
-route_map_result_t
+static route_map_result_t
 ospf6_routemap_rule_set_metric (void *rule, struct prefix *prefix,
                                 route_map_object_t type, void *object)
 {
@@ -869,7 +869,7 @@
   return RMAP_OKAY;
 }
 
-void *
+static void *
 ospf6_routemap_rule_set_metric_compile (const char *arg)
 {
   u_int32_t metric;
@@ -880,7 +880,7 @@
   return XSTRDUP (MTYPE_ROUTE_MAP_COMPILED, arg);
 }
 
-void
+static void
 ospf6_routemap_rule_set_metric_free (void *rule)
 {
   XFREE (MTYPE_ROUTE_MAP_COMPILED, rule);
@@ -895,7 +895,7 @@
   ospf6_routemap_rule_set_metric_free,
 };
 
-route_map_result_t
+static route_map_result_t
 ospf6_routemap_rule_set_forwarding (void *rule, struct prefix *prefix,
                                     route_map_object_t type, void *object)
 {
@@ -915,7 +915,7 @@
   return RMAP_OKAY;
 }
 
-void *
+static void *
 ospf6_routemap_rule_set_forwarding_compile (const char *arg)
 {
   struct in6_addr a;
@@ -924,7 +924,7 @@
   return XSTRDUP (MTYPE_ROUTE_MAP_COMPILED, arg);
 }
 
-void
+static void
 ospf6_routemap_rule_set_forwarding_free (void *rule)
 {
   XFREE (MTYPE_ROUTE_MAP_COMPILED, rule);
@@ -939,7 +939,7 @@
   ospf6_routemap_rule_set_forwarding_free,
 };
 
-int
+static int
 route_map_command_status (struct vty *vty, int ret)
 {
   if (! ret)
@@ -1074,8 +1074,8 @@
   return route_map_command_status (vty, ret);
 }
 
-void
-ospf6_routemap_init ()
+static void
+ospf6_routemap_init (void)
 {
   route_map_init ();
   route_map_init_vty ();
@@ -1106,7 +1106,7 @@
 
 
 /* Display functions */
-int
+static int
 ospf6_as_external_lsa_show (struct vty *vty, struct ospf6_lsa *lsa)
 {
   struct ospf6_as_external_lsa *external;
@@ -1154,7 +1154,7 @@
   return 0;
 }
 
-void
+static void
 ospf6_asbr_external_route_show (struct vty *vty, struct ospf6_route *route)
 {
   struct ospf6_external_info *info = route->route_option;
@@ -1206,7 +1206,7 @@
 };
 
 void
-ospf6_asbr_init ()
+ospf6_asbr_init (void)
 {
   ospf6_routemap_init ();
 
diff --git a/ospf6d/ospf6_asbr.h b/ospf6d/ospf6_asbr.h
index f3aabc8..7166aa3 100644
--- a/ospf6d/ospf6_asbr.h
+++ b/ospf6d/ospf6_asbr.h
@@ -63,24 +63,24 @@
   { (E)->bits_metric &= htonl (0xff000000); \
     (E)->bits_metric |= htonl (0x00ffffff) & htonl (C); }
 
-void ospf6_asbr_lsa_add (struct ospf6_lsa *lsa);
-void ospf6_asbr_lsa_remove (struct ospf6_lsa *lsa);
-void ospf6_asbr_lsentry_add (struct ospf6_route *asbr_entry);
-void ospf6_asbr_lsentry_remove (struct ospf6_route *asbr_entry);
+extern void ospf6_asbr_lsa_add (struct ospf6_lsa *lsa);
+extern void ospf6_asbr_lsa_remove (struct ospf6_lsa *lsa);
+extern void ospf6_asbr_lsentry_add (struct ospf6_route *asbr_entry);
+extern void ospf6_asbr_lsentry_remove (struct ospf6_route *asbr_entry);
 
-int ospf6_asbr_is_asbr (struct ospf6 *o);
-void
-ospf6_asbr_redistribute_add (int type, int ifindex, struct prefix *prefix,
-                             u_int nexthop_num, struct in6_addr *nexthop);
-void
-ospf6_asbr_redistribute_remove (int type, int ifindex, struct prefix *prefix);
+extern int ospf6_asbr_is_asbr (struct ospf6 *o);
+extern void ospf6_asbr_redistribute_add (int type, int ifindex,
+                                         struct prefix *prefix,
+                                         u_int nexthop_num,
+                                         struct in6_addr *nexthop);
+extern void ospf6_asbr_redistribute_remove (int type, int ifindex,
+                                            struct prefix *prefix);
 
-int ospf6_redistribute_config_write (struct vty *vty);
+extern int ospf6_redistribute_config_write (struct vty *vty);
 
-void ospf6_asbr_init ();
+extern void ospf6_asbr_init (void);
 
-int config_write_ospf6_debug_asbr (struct vty *vty);
-void install_element_ospf6_debug_asbr ();
+extern int config_write_ospf6_debug_asbr (struct vty *vty);
+extern void install_element_ospf6_debug_asbr (void);
 
 #endif /* OSPF6_ASBR_H */
-
diff --git a/ospf6d/ospf6_flood.c b/ospf6d/ospf6_flood.c
index 39b7c1f..8c46029 100644
--- a/ospf6d/ospf6_flood.c
+++ b/ospf6d/ospf6_flood.c
@@ -241,7 +241,7 @@
 
 /* RFC2740 section 3.5.2. Sending Link State Update packets */
 /* RFC2328 section 13.3 Next step in the flooding procedure */
-void
+static void
 ospf6_flood_interface (struct ospf6_neighbor *from,
                        struct ospf6_lsa *lsa, struct ospf6_interface *oi)
 {
@@ -387,7 +387,7 @@
     }
 }
 
-void
+static void
 ospf6_flood_area (struct ospf6_neighbor *from,
                   struct ospf6_lsa *lsa, struct ospf6_area *oa)
 {
@@ -410,7 +410,7 @@
     }
 }
 
-void
+static void
 ospf6_flood_process (struct ospf6_neighbor *from,
                      struct ospf6_lsa *lsa, struct ospf6 *process)
 {
@@ -440,7 +440,7 @@
   ospf6_flood_process (from, lsa, ospf6);
 }
 
-void
+static void
 ospf6_flood_clear_interface (struct ospf6_lsa *lsa, struct ospf6_interface *oi)
 {
   struct listnode *node, *nnode;
@@ -463,7 +463,7 @@
     }
 }
 
-void
+static void
 ospf6_flood_clear_area (struct ospf6_lsa *lsa, struct ospf6_area *oa)
 {
   struct listnode *node, *nnode;
@@ -485,7 +485,7 @@
     }
 }
 
-void
+static void
 ospf6_flood_clear_process (struct ospf6_lsa *lsa, struct ospf6 *process)
 {
   struct listnode *node, *nnode;
@@ -676,7 +676,7 @@
      early of ospf6_receive_lsa () */
 }
 
-void
+static void
 ospf6_acknowledge_lsa (struct ospf6_lsa *lsa, int ismore_recent,
                        struct ospf6_neighbor *from)
 {
@@ -1013,7 +1013,7 @@
 }
 
 void
-install_element_ospf6_debug_flood ()
+install_element_ospf6_debug_flood (void)
 {
   install_element (ENABLE_NODE, &debug_ospf6_flooding_cmd);
   install_element (ENABLE_NODE, &no_debug_ospf6_flooding_cmd);
diff --git a/ospf6d/ospf6_flood.h b/ospf6d/ospf6_flood.h
index 4851c14..3a6f300 100644
--- a/ospf6d/ospf6_flood.h
+++ b/ospf6d/ospf6_flood.h
@@ -32,34 +32,34 @@
   (conf_debug_ospf6_flooding)
 
 /* Function Prototypes */
-struct ospf6_lsdb *ospf6_get_scoped_lsdb (struct ospf6_lsa *lsa);
-struct ospf6_lsdb *ospf6_get_scoped_lsdb_self (struct ospf6_lsa *lsa);
+extern struct ospf6_lsdb *ospf6_get_scoped_lsdb (struct ospf6_lsa *lsa);
+extern struct ospf6_lsdb *ospf6_get_scoped_lsdb_self (struct ospf6_lsa *lsa);
 
 /* origination & purging */
-void ospf6_lsa_originate (struct ospf6_lsa *lsa);
-void ospf6_lsa_originate_process (struct ospf6_lsa *lsa,
-                                  struct ospf6 *process);
-void ospf6_lsa_originate_area (struct ospf6_lsa *lsa,
-                               struct ospf6_area *oa);
-void ospf6_lsa_originate_interface (struct ospf6_lsa *lsa,
-                                    struct ospf6_interface *oi);
-void ospf6_lsa_purge (struct ospf6_lsa *lsa);
+extern void ospf6_lsa_originate (struct ospf6_lsa *lsa);
+extern void ospf6_lsa_originate_process (struct ospf6_lsa *lsa,
+                                         struct ospf6 *process);
+extern void ospf6_lsa_originate_area (struct ospf6_lsa *lsa,
+                                     struct ospf6_area *oa);
+extern void ospf6_lsa_originate_interface (struct ospf6_lsa *lsa,
+                                           struct ospf6_interface *oi);
+extern void ospf6_lsa_purge (struct ospf6_lsa *lsa);
 
 /* access method to retrans_count */
-void ospf6_increment_retrans_count (struct ospf6_lsa *lsa);
-void ospf6_decrement_retrans_count (struct ospf6_lsa *lsa);
+extern void ospf6_increment_retrans_count (struct ospf6_lsa *lsa);
+extern void ospf6_decrement_retrans_count (struct ospf6_lsa *lsa);
 
 /* flooding & clear flooding */
-void ospf6_flood_clear (struct ospf6_lsa *lsa);
-void ospf6_flood (struct ospf6_neighbor *from, struct ospf6_lsa *lsa);
+extern void ospf6_flood_clear (struct ospf6_lsa *lsa);
+extern void ospf6_flood (struct ospf6_neighbor *from, struct ospf6_lsa *lsa);
 
 /* receive & install */
-void ospf6_receive_lsa (struct ospf6_neighbor *from,
-                        struct ospf6_lsa_header *header);
-void ospf6_install_lsa (struct ospf6_lsa *lsa);
+extern void ospf6_receive_lsa (struct ospf6_neighbor *from,
+                               struct ospf6_lsa_header *header);
+extern void ospf6_install_lsa (struct ospf6_lsa *lsa);
 
-int config_write_ospf6_debug_flood (struct vty *vty);
-void install_element_ospf6_debug_flood ();
+extern int config_write_ospf6_debug_flood (struct vty *vty);
+extern void install_element_ospf6_debug_flood (void);
 
 #endif /* OSPF6_FLOOD_H */
 
diff --git a/ospf6d/ospf6_interface.c b/ospf6d/ospf6_interface.c
index 95464b6..8d9a7f0 100644
--- a/ospf6d/ospf6_interface.c
+++ b/ospf6d/ospf6_interface.c
@@ -72,7 +72,7 @@
 }
 
 /* schedule routing table recalculation */
-void
+static void
 ospf6_interface_lsdb_hook (struct ospf6_lsa *lsa)
 {
   switch (ntohs (lsa->header->type))
@@ -692,7 +692,7 @@
   return 0;
 }
 
-int
+static int
 loopind (struct thread *thread)
 {
   struct ospf6_interface *oi;
@@ -739,7 +739,7 @@
 
 
 /* show specified interface structure */
-int
+static int
 ospf6_interface_show (struct vty *vty, struct interface *ifp)
 {
   struct ospf6_interface *oi;
@@ -897,7 +897,7 @@
        IP6_STR
        OSPF6_STR
        INTERFACE_STR
-       );
+       )
 
 DEFUN (show_ipv6_ospf6_interface_ifname_prefix,
        show_ipv6_ospf6_interface_ifname_prefix_cmd,
@@ -946,7 +946,7 @@
        OSPF6_ROUTE_ADDRESS_STR
        OSPF6_ROUTE_PREFIX_STR
        "Dispaly details of the prefixes\n"
-       );
+       )
 
 ALIAS (show_ipv6_ospf6_interface_ifname_prefix,
        show_ipv6_ospf6_interface_ifname_prefix_match_cmd,
@@ -960,7 +960,7 @@
        OSPF6_ROUTE_PREFIX_STR
        OSPF6_ROUTE_MATCH_STR
        "Dispaly details of the prefixes\n"
-       );
+       )
 
 DEFUN (show_ipv6_ospf6_interface_prefix,
        show_ipv6_ospf6_interface_prefix_cmd,
@@ -999,7 +999,7 @@
        OSPF6_ROUTE_ADDRESS_STR
        OSPF6_ROUTE_PREFIX_STR
        "Dispaly details of the prefixes\n"
-       );
+       )
 
 ALIAS (show_ipv6_ospf6_interface_prefix,
        show_ipv6_ospf6_interface_prefix_match_cmd,
@@ -1012,7 +1012,7 @@
        OSPF6_ROUTE_PREFIX_STR
        OSPF6_ROUTE_MATCH_STR
        "Dispaly details of the prefixes\n"
-       );
+       )
 
 
 /* interface variable set command */
@@ -1463,7 +1463,7 @@
   return CMD_SUCCESS;
 }
 
-int
+static int
 config_write_ospf6_interface (struct vty *vty)
 {
   struct listnode *i;
@@ -1519,7 +1519,7 @@
 };
 
 void
-ospf6_interface_init ()
+ospf6_interface_init (void)
 {
   /* Install interface node. */
   install_node (&interface_node, config_write_ospf6_interface);
@@ -1596,7 +1596,7 @@
 }
 
 void
-install_element_ospf6_debug_interface ()
+install_element_ospf6_debug_interface (void)
 {
   install_element (ENABLE_NODE, &debug_ospf6_interface_cmd);
   install_element (ENABLE_NODE, &no_debug_ospf6_interface_cmd);
diff --git a/ospf6d/ospf6_interface.h b/ospf6d/ospf6_interface.h
index fb93ced..878c29e 100644
--- a/ospf6d/ospf6_interface.h
+++ b/ospf6d/ospf6_interface.h
@@ -124,29 +124,28 @@
 
 /* Function Prototypes */
 
-struct ospf6_interface *ospf6_interface_lookup_by_ifindex (int);
-struct ospf6_interface *ospf6_interface_create (struct interface *);
-void ospf6_interface_delete (struct ospf6_interface *);
+extern struct ospf6_interface *ospf6_interface_lookup_by_ifindex (int);
+extern struct ospf6_interface *ospf6_interface_create (struct interface *);
+extern void ospf6_interface_delete (struct ospf6_interface *);
 
-void ospf6_interface_enable (struct ospf6_interface *);
-void ospf6_interface_disable (struct ospf6_interface *);
+extern void ospf6_interface_enable (struct ospf6_interface *);
+extern void ospf6_interface_disable (struct ospf6_interface *);
 
-void ospf6_interface_if_add (struct interface *);
-void ospf6_interface_if_del (struct interface *);
-void ospf6_interface_state_update (struct interface *);
-void ospf6_interface_connected_route_update (struct interface *);
+extern void ospf6_interface_if_add (struct interface *);
+extern void ospf6_interface_if_del (struct interface *);
+extern void ospf6_interface_state_update (struct interface *);
+extern void ospf6_interface_connected_route_update (struct interface *);
 
 /* interface event */
-int interface_up (struct thread *);
-int interface_down (struct thread *);
-int wait_timer (struct thread *);
-int backup_seen (struct thread *);
-int neighbor_change (struct thread *);
+extern int interface_up (struct thread *);
+extern int interface_down (struct thread *);
+extern int wait_timer (struct thread *);
+extern int backup_seen (struct thread *);
+extern int neighbor_change (struct thread *);
 
-void ospf6_interface_init ();
+extern void ospf6_interface_init (void);
 
-int config_write_ospf6_debug_interface (struct vty *vty);
-void install_element_ospf6_debug_interface ();
+extern int config_write_ospf6_debug_interface (struct vty *vty);
+extern void install_element_ospf6_debug_interface (void);
 
 #endif /* OSPF6_INTERFACE_H */
-
diff --git a/ospf6d/ospf6_intra.c b/ospf6d/ospf6_intra.c
index ffd9c72..103e8fc 100644
--- a/ospf6d/ospf6_intra.c
+++ b/ospf6d/ospf6_intra.c
@@ -56,7 +56,7 @@
 /* RFC2740 3.4.3.1 Router-LSA */
 /******************************/
 
-int
+static int
 ospf6_router_lsa_show (struct vty *vty, struct ospf6_lsa *lsa)
 {
   char *start, *end, *current;
@@ -316,7 +316,7 @@
 /* RFC2740 3.4.3.2 Network-LSA */
 /*******************************/
 
-int
+static int
 ospf6_network_lsa_show (struct vty *vty, struct ospf6_lsa *lsa)
 {
   char *start, *end, *current;
@@ -462,7 +462,7 @@
 /* RFC2740 3.4.3.6 Link-LSA */
 /****************************/
 
-int
+static int
 ospf6_link_lsa_show (struct vty *vty, struct ospf6_lsa *lsa)
 {
   char *start, *end, *current;
@@ -615,7 +615,7 @@
 /* RFC2740 3.4.3.7 Intra-Area-Prefix-LSA */
 /*****************************************/
 
-int
+static int
 ospf6_intra_prefix_lsa_show (struct vty *vty, struct ospf6_lsa *lsa)
 {
   char *start, *end, *current;
@@ -1238,7 +1238,7 @@
     zlog_debug ("Re-examin intra-routes for area %s: Done", oa->name);
 }
 
-void
+static void
 ospf6_brouter_debug_print (struct ospf6_route *brouter)
 {
   u_int32_t brouter_id;
diff --git a/ospf6d/ospf6_intra.h b/ospf6d/ospf6_intra.h
index 8a9474a..31643fd 100644
--- a/ospf6d/ospf6_intra.h
+++ b/ospf6d/ospf6_intra.h
@@ -187,28 +187,28 @@
 
 
 /* Function Prototypes */
-char *ospf6_router_lsdesc_lookup (u_char type, u_int32_t interface_id,
-                            u_int32_t neighbor_interface_id,
-                            u_int32_t neighbor_router_id,
-                            struct ospf6_lsa *lsa);
-char *ospf6_network_lsdesc_lookup (u_int32_t router_id,
-                                   struct ospf6_lsa *lsa);
+extern char *ospf6_router_lsdesc_lookup (u_char type, u_int32_t interface_id,
+                                         u_int32_t neighbor_interface_id,
+                                         u_int32_t neighbor_router_id,
+                                         struct ospf6_lsa *lsa);
+extern char *ospf6_network_lsdesc_lookup (u_int32_t router_id,
+                                          struct ospf6_lsa *lsa);
 
-int ospf6_router_lsa_originate (struct thread *);
-int ospf6_network_lsa_originate (struct thread *);
-int ospf6_link_lsa_originate (struct thread *);
-int ospf6_intra_prefix_lsa_originate_transit (struct thread *);
-int ospf6_intra_prefix_lsa_originate_stub (struct thread *);
-void ospf6_intra_prefix_lsa_add (struct ospf6_lsa *lsa);
-void ospf6_intra_prefix_lsa_remove (struct ospf6_lsa *lsa);
+extern int ospf6_router_lsa_originate (struct thread *);
+extern int ospf6_network_lsa_originate (struct thread *);
+extern int ospf6_link_lsa_originate (struct thread *);
+extern int ospf6_intra_prefix_lsa_originate_transit (struct thread *);
+extern int ospf6_intra_prefix_lsa_originate_stub (struct thread *);
+extern void ospf6_intra_prefix_lsa_add (struct ospf6_lsa *lsa);
+extern void ospf6_intra_prefix_lsa_remove (struct ospf6_lsa *lsa);
 
-void ospf6_intra_route_calculation (struct ospf6_area *oa);
-void ospf6_intra_brouter_calculation (struct ospf6_area *oa);
+extern void ospf6_intra_route_calculation (struct ospf6_area *oa);
+extern void ospf6_intra_brouter_calculation (struct ospf6_area *oa);
 
-void ospf6_intra_init ();
+extern void ospf6_intra_init (void);
 
-int config_write_ospf6_debug_brouter (struct vty *vty);
-void install_element_ospf6_debug_brouter ();
+extern int config_write_ospf6_debug_brouter (struct vty *vty);
+extern void install_element_ospf6_debug_brouter (void);
 
 #endif /* OSPF6_LSA_H */
 
diff --git a/ospf6d/ospf6_lsa.c b/ospf6d/ospf6_lsa.c
index e57384b..87df741 100644
--- a/ospf6d/ospf6_lsa.c
+++ b/ospf6d/ospf6_lsa.c
@@ -45,7 +45,7 @@
 
 vector ospf6_lsa_handler_vector;
 
-int
+static int
 ospf6_unknown_lsa_show (struct vty *vty, struct ospf6_lsa *lsa)
 {
   u_char *start, *end, *current;
@@ -703,14 +703,14 @@
 }
 
 void
-ospf6_lsa_init ()
+ospf6_lsa_init (void)
 {
   ospf6_lsa_handler_vector = vector_init (0);
   ospf6_install_lsa_handler (&unknown_handler);
 }
 
 
-char *
+static char *
 ospf6_lsa_handler_name (struct ospf6_lsa_handler *h)
 {
   static char buf[64];
@@ -870,7 +870,7 @@
 struct cmd_element no_debug_ospf6_lsa_type_detail_cmd;
 
 void
-install_element_ospf6_debug_lsa ()
+install_element_ospf6_debug_lsa (void)
 {
   u_int i;
   struct ospf6_lsa_handler *handler;
diff --git a/ospf6d/ospf6_lsa.h b/ospf6d/ospf6_lsa.h
index 0e1b911..fb0f27c 100644
--- a/ospf6d/ospf6_lsa.h
+++ b/ospf6d/ospf6_lsa.h
@@ -206,47 +206,47 @@
 
 
 /* Function Prototypes */
-const char *ospf6_lstype_name (u_int16_t type);
-u_char ospf6_lstype_debug (u_int16_t type);
-int ospf6_lsa_is_differ (struct ospf6_lsa *lsa1, struct ospf6_lsa *lsa2);
-int ospf6_lsa_is_changed (struct ospf6_lsa *lsa1, struct ospf6_lsa *lsa2);
-u_int16_t ospf6_lsa_age_current (struct ospf6_lsa *);
-void ospf6_lsa_age_update_to_send (struct ospf6_lsa *, u_int32_t);
-void ospf6_lsa_premature_aging (struct ospf6_lsa *);
-int ospf6_lsa_compare (struct ospf6_lsa *, struct ospf6_lsa *);
+extern const char *ospf6_lstype_name (u_int16_t type);
+extern u_char ospf6_lstype_debug (u_int16_t type);
+extern int ospf6_lsa_is_differ (struct ospf6_lsa *lsa1, struct ospf6_lsa *lsa2);
+extern int ospf6_lsa_is_changed (struct ospf6_lsa *lsa1, struct ospf6_lsa *lsa2);
+extern u_int16_t ospf6_lsa_age_current (struct ospf6_lsa *);
+extern void ospf6_lsa_age_update_to_send (struct ospf6_lsa *, u_int32_t);
+extern void ospf6_lsa_premature_aging (struct ospf6_lsa *);
+extern int ospf6_lsa_compare (struct ospf6_lsa *, struct ospf6_lsa *);
 
-char *ospf6_lsa_printbuf (struct ospf6_lsa *lsa, char *buf, int size);
-void ospf6_lsa_header_print_raw (struct ospf6_lsa_header *header);
-void ospf6_lsa_header_print (struct ospf6_lsa *lsa);
-void ospf6_lsa_show_summary_header (struct vty *vty);
-void ospf6_lsa_show_summary (struct vty *vty, struct ospf6_lsa *lsa);
-void ospf6_lsa_show_dump (struct vty *vty, struct ospf6_lsa *lsa);
-void ospf6_lsa_show_internal (struct vty *vty, struct ospf6_lsa *lsa);
-void ospf6_lsa_show (struct vty *vty, struct ospf6_lsa *lsa);
+extern char *ospf6_lsa_printbuf (struct ospf6_lsa *lsa, char *buf, int size);
+extern void ospf6_lsa_header_print_raw (struct ospf6_lsa_header *header);
+extern void ospf6_lsa_header_print (struct ospf6_lsa *lsa);
+extern void ospf6_lsa_show_summary_header (struct vty *vty);
+extern void ospf6_lsa_show_summary (struct vty *vty, struct ospf6_lsa *lsa);
+extern void ospf6_lsa_show_dump (struct vty *vty, struct ospf6_lsa *lsa);
+extern void ospf6_lsa_show_internal (struct vty *vty, struct ospf6_lsa *lsa);
+extern void ospf6_lsa_show (struct vty *vty, struct ospf6_lsa *lsa);
 
-struct ospf6_lsa *ospf6_lsa_create (struct ospf6_lsa_header *header);
-struct ospf6_lsa *ospf6_lsa_create_headeronly (struct ospf6_lsa_header *header);
-void ospf6_lsa_delete (struct ospf6_lsa *lsa);
-struct ospf6_lsa *ospf6_lsa_copy (struct ospf6_lsa *);
+extern struct ospf6_lsa *ospf6_lsa_create (struct ospf6_lsa_header *header);
+extern struct ospf6_lsa *ospf6_lsa_create_headeronly (struct ospf6_lsa_header *header);
+extern void ospf6_lsa_delete (struct ospf6_lsa *lsa);
+extern struct ospf6_lsa *ospf6_lsa_copy (struct ospf6_lsa *);
 
-void ospf6_lsa_lock (struct ospf6_lsa *);
-void ospf6_lsa_unlock (struct ospf6_lsa *);
+extern void ospf6_lsa_lock (struct ospf6_lsa *);
+extern void ospf6_lsa_unlock (struct ospf6_lsa *);
 
-int ospf6_lsa_expire (struct thread *);
-int ospf6_lsa_refresh (struct thread *);
+extern int ospf6_lsa_expire (struct thread *);
+extern int ospf6_lsa_refresh (struct thread *);
 
-unsigned short ospf6_lsa_checksum (struct ospf6_lsa_header *);
-int ospf6_lsa_prohibited_duration (u_int16_t type, u_int32_t id,
-                                   u_int32_t adv_router, void *scope);
+extern unsigned short ospf6_lsa_checksum (struct ospf6_lsa_header *);
+extern int ospf6_lsa_prohibited_duration (u_int16_t type, u_int32_t id,
+                                          u_int32_t adv_router, void *scope);
 
-void ospf6_install_lsa_handler (struct ospf6_lsa_handler *handler);
-struct ospf6_lsa_handler *ospf6_get_lsa_handler (u_int16_t type);
+extern void ospf6_install_lsa_handler (struct ospf6_lsa_handler *handler);
+extern struct ospf6_lsa_handler *ospf6_get_lsa_handler (u_int16_t type);
 
-void ospf6_lsa_init ();
-void ospf6_lsa_cmd_init ();
+extern void ospf6_lsa_init (void);
+extern void ospf6_lsa_cmd_init (void);
 
-int config_write_ospf6_debug_lsa (struct vty *vty);
-void install_element_ospf6_debug_lsa ();
+extern int config_write_ospf6_debug_lsa (struct vty *vty);
+extern void install_element_ospf6_debug_lsa (void);
 
 #endif /* OSPF6_LSA_H */
 
diff --git a/ospf6d/ospf6_lsdb.h b/ospf6d/ospf6_lsdb.h
index a9eba69..71297da 100644
--- a/ospf6d/ospf6_lsdb.h
+++ b/ospf6d/ospf6_lsdb.h
@@ -50,51 +50,49 @@
   } while (0)
 
 /* Function Prototypes */
-struct ospf6_lsdb *ospf6_lsdb_create (void *data);
-void ospf6_lsdb_delete (struct ospf6_lsdb *lsdb);
+extern struct ospf6_lsdb *ospf6_lsdb_create (void *data);
+extern void ospf6_lsdb_delete (struct ospf6_lsdb *lsdb);
 
-struct ospf6_lsa *
-ospf6_lsdb_lookup (u_int16_t type, u_int32_t id, u_int32_t adv_router,
-                   struct ospf6_lsdb *lsdb);
-struct ospf6_lsa *
-ospf6_lsdb_lookup_next (u_int16_t type, u_int32_t id,
-                        u_int32_t adv_router, struct ospf6_lsdb *lsdb);
+extern struct ospf6_lsa *ospf6_lsdb_lookup (u_int16_t type, u_int32_t id,
+                                            u_int32_t adv_router,
+                                            struct ospf6_lsdb *lsdb);
+extern struct ospf6_lsa *ospf6_lsdb_lookup_next (u_int16_t type, u_int32_t id,
+                                                 u_int32_t adv_router,
+                                                 struct ospf6_lsdb *lsdb);
 
-void ospf6_lsdb_add (struct ospf6_lsa *lsa, struct ospf6_lsdb *lsdb);
-void ospf6_lsdb_remove (struct ospf6_lsa *lsa, struct ospf6_lsdb *lsdb);
+extern void ospf6_lsdb_add (struct ospf6_lsa *lsa, struct ospf6_lsdb *lsdb);
+extern void ospf6_lsdb_remove (struct ospf6_lsa *lsa, struct ospf6_lsdb *lsdb);
 
-struct ospf6_lsa *ospf6_lsdb_head (struct ospf6_lsdb *lsdb);
-struct ospf6_lsa *ospf6_lsdb_next (struct ospf6_lsa *lsa);
+extern struct ospf6_lsa *ospf6_lsdb_head (struct ospf6_lsdb *lsdb);
+extern struct ospf6_lsa *ospf6_lsdb_next (struct ospf6_lsa *lsa);
 
-struct ospf6_lsa *ospf6_lsdb_type_router_head (u_int16_t type,
+extern struct ospf6_lsa *ospf6_lsdb_type_router_head (u_int16_t type,
                                                u_int32_t adv_router,
                                                struct ospf6_lsdb *lsdb);
-struct ospf6_lsa *ospf6_lsdb_type_router_next (u_int16_t type,
+extern struct ospf6_lsa *ospf6_lsdb_type_router_next (u_int16_t type,
                                                u_int32_t adv_router,
                                                struct ospf6_lsa *lsa);
 
-struct ospf6_lsa *ospf6_lsdb_type_head (u_int16_t type,
-                                        struct ospf6_lsdb *lsdb);
-struct ospf6_lsa *ospf6_lsdb_type_next (u_int16_t type,
-                                        struct ospf6_lsa *lsa);
+extern struct ospf6_lsa *ospf6_lsdb_type_head (u_int16_t type,
+                                               struct ospf6_lsdb *lsdb);
+extern struct ospf6_lsa *ospf6_lsdb_type_next (u_int16_t type,
+                                               struct ospf6_lsa *lsa);
 
-void ospf6_lsdb_remove_all (struct ospf6_lsdb *lsdb);
+extern void ospf6_lsdb_remove_all (struct ospf6_lsdb *lsdb);
 
 #define OSPF6_LSDB_SHOW_LEVEL_NORMAL   0
 #define OSPF6_LSDB_SHOW_LEVEL_DETAIL   1
 #define OSPF6_LSDB_SHOW_LEVEL_INTERNAL 2
 #define OSPF6_LSDB_SHOW_LEVEL_DUMP     3
 
-void ospf6_lsdb_show
-  (struct vty *vty, int level,
-   u_int16_t *type, u_int32_t *id, u_int32_t *adv_router,
-   struct ospf6_lsdb *lsdb);
+extern void ospf6_lsdb_show (struct vty *vty, int level, u_int16_t *type,
+                             u_int32_t *id, u_int32_t *adv_router,
+                             struct ospf6_lsdb *lsdb);
 
-u_int32_t ospf6_new_ls_id
-  (u_int16_t type, u_int32_t adv_router, struct ospf6_lsdb *lsdb);
-u_int32_t ospf6_new_ls_seqnum
-  (u_int16_t type, u_int32_t id, u_int32_t adv_router, struct ospf6_lsdb *lsdb);
+extern u_int32_t ospf6_new_ls_id (u_int16_t type, u_int32_t adv_router,
+                                  struct ospf6_lsdb *lsdb);
+extern u_int32_t ospf6_new_ls_seqnum (u_int16_t type, u_int32_t id,
+                                      u_int32_t adv_router,
+                                      struct ospf6_lsdb *lsdb);
 
 #endif /* OSPF6_LSDB_H */
-
-
diff --git a/ospf6d/ospf6_main.c b/ospf6d/ospf6_main.c
index 680f4b7..73d9150 100644
--- a/ospf6d/ospf6_main.c
+++ b/ospf6d/ospf6_main.c
@@ -125,14 +125,14 @@
 }
 
 /* SIGHUP handler. */
-void 
+static void 
 sighup (void)
 {
   zlog_info ("SIGHUP received");
 }
 
 /* SIGINT handler. */
-void
+static void
 sigint (void)
 {
   zlog_notice ("Terminating on signal SIGINT");
@@ -140,7 +140,7 @@
 }
 
 /* SIGTERM handler. */
-void
+static void
 sigterm (void)
 {
   zlog_notice ("Terminating on signal SIGTERM");
@@ -148,7 +148,7 @@
 }
 
 /* SIGUSR1 handler. */
-void
+static void
 sigusr1 (void)
 {
   zlog_info ("SIGUSR1 received");
diff --git a/ospf6d/ospf6_message.c b/ospf6d/ospf6_message.c
index 6ece88b..c257092 100644
--- a/ospf6d/ospf6_message.c
+++ b/ospf6d/ospf6_message.c
@@ -272,7 +272,7 @@
   return MSG_OK;
 }
 
-void
+static void
 ospf6_hello_recv (struct in6_addr *src, struct in6_addr *dst,
                   struct ospf6_interface *oi, struct ospf6_header *oh)
 {
@@ -810,7 +810,7 @@
   memcpy (&on->dbdesc_last, dbdesc, sizeof (struct ospf6_dbdesc));
 }
 
-void
+static void
 ospf6_dbdesc_recv (struct in6_addr *src, struct in6_addr *dst,
                    struct ospf6_interface *oi, struct ospf6_header *oh)
 {
@@ -859,7 +859,7 @@
     }
 }
 
-void
+static void
 ospf6_lsreq_recv (struct in6_addr *src, struct in6_addr *dst,
                   struct ospf6_interface *oi, struct ospf6_header *oh)
 {
@@ -946,7 +946,7 @@
     thread_add_event (master, ospf6_lsupdate_send_neighbor, on, 0);
 }
 
-void
+static void
 ospf6_lsupdate_recv (struct in6_addr *src, struct in6_addr *dst,
                      struct ospf6_interface *oi, struct ospf6_header *oh)
 {
@@ -1025,7 +1025,7 @@
     }
 }
 
-void
+static void
 ospf6_lsack_recv (struct in6_addr *src, struct in6_addr *dst,
                   struct ospf6_interface *oi, struct ospf6_header *oh)
 {
@@ -1133,14 +1133,14 @@
     }
 }
 
-u_char *recvbuf = NULL;
-u_char *sendbuf = NULL;
-unsigned int iobuflen = 0;
+static u_char *recvbuf = NULL;
+static u_char *sendbuf = NULL;
+static unsigned int iobuflen = 0;
 
 int
 ospf6_iobuf_size (unsigned int size)
 {
-  char *recvnew, *sendnew;
+  u_char *recvnew, *sendnew;
 
   if (size <= iobuflen)
     return iobuflen;
@@ -1290,7 +1290,7 @@
   return 0;
 }
 
-void
+static void
 ospf6_send (struct in6_addr *src, struct in6_addr *dst,
             struct ospf6_interface *oi, struct ospf6_header *oh)
 {
@@ -1396,7 +1396,7 @@
   hello->drouter = oi->drouter;
   hello->bdrouter = oi->bdrouter;
 
-  p = (char *)((caddr_t) hello + sizeof (struct ospf6_hello));
+  p = (u_char *)((caddr_t) hello + sizeof (struct ospf6_hello));
 
   for (ALL_LIST_ELEMENTS (oi->neighbor_list, node, nnode, on))
     {
@@ -1469,7 +1469,7 @@
   dbdesc->seqnum = htonl (on->dbdesc_seqnum);
 
   /* if this is not initial one, set LSA headers in dbdesc */
-  p = (char *)((caddr_t) dbdesc + sizeof (struct ospf6_dbdesc));
+  p = (u_char *)((caddr_t) dbdesc + sizeof (struct ospf6_dbdesc));
   if (! CHECK_FLAG (on->dbdesc_bits, OSPF6_DBDESC_IBIT))
     {
       for (lsa = ospf6_lsdb_head (on->dbdesc_list); lsa;
@@ -1575,7 +1575,7 @@
   oh = (struct ospf6_header *) sendbuf;
 
   /* set Request entries in lsreq */
-  p = (char *)((caddr_t) oh + sizeof (struct ospf6_header));
+  p = (u_char *)((caddr_t) oh + sizeof (struct ospf6_header));
   for (lsa = ospf6_lsdb_head (on->request_list); lsa;
        lsa = ospf6_lsdb_next (lsa))
     {
@@ -1639,7 +1639,7 @@
   lsupdate = (struct ospf6_lsupdate *)
     ((caddr_t) oh + sizeof (struct ospf6_header));
 
-  p = (char *)((caddr_t) lsupdate + sizeof (struct ospf6_lsupdate));
+  p = (u_char *)((caddr_t) lsupdate + sizeof (struct ospf6_lsupdate));
   num = 0;
 
   /* lsupdate_list lists those LSA which doesn't need to be
@@ -1734,7 +1734,7 @@
   lsupdate = (struct ospf6_lsupdate *)((caddr_t) oh +
                                        sizeof (struct ospf6_header));
 
-  p = (char *)((caddr_t) lsupdate + sizeof (struct ospf6_lsupdate));
+  p = (u_char *)((caddr_t) lsupdate + sizeof (struct ospf6_lsupdate));
   num = 0;
 
   for (lsa = ospf6_lsdb_head (oi->lsupdate_list); lsa;
@@ -1803,7 +1803,7 @@
   memset (sendbuf, 0, iobuflen);
   oh = (struct ospf6_header *) sendbuf;
 
-  p = (char *)((caddr_t) oh + sizeof (struct ospf6_header));
+  p = (u_char *)((caddr_t) oh + sizeof (struct ospf6_header));
 
   for (lsa = ospf6_lsdb_head (on->lsack_list); lsa;
        lsa = ospf6_lsdb_next (lsa))
@@ -1863,7 +1863,7 @@
   memset (sendbuf, 0, iobuflen);
   oh = (struct ospf6_header *) sendbuf;
 
-  p = (char *)((caddr_t) oh + sizeof (struct ospf6_header));
+  p = (u_char *)((caddr_t) oh + sizeof (struct ospf6_header));
 
   for (lsa = ospf6_lsdb_head (oi->lsack_list); lsa;
        lsa = ospf6_lsdb_next (lsa))
@@ -1979,7 +1979,7 @@
        "Debug All message\n"
        "Debug only sending message\n"
        "Debug only receiving message\n"
-       );
+       )
 
 
 DEFUN (no_debug_ospf6_message,
@@ -2055,7 +2055,7 @@
        "Debug All message\n"
        "Debug only sending message\n"
        "Debug only receiving message\n"
-       );
+       )
 
 int
 config_write_ospf6_debug_message (struct vty *vty)
@@ -2116,7 +2116,7 @@
 }
 
 void
-install_element_ospf6_debug_message ()
+install_element_ospf6_debug_message (void)
 {
   install_element (ENABLE_NODE, &debug_ospf6_message_cmd);
   install_element (ENABLE_NODE, &no_debug_ospf6_message_cmd);
diff --git a/ospf6d/ospf6_message.h b/ospf6d/ospf6_message.h
index 95b07ce..ebb6308 100644
--- a/ospf6d/ospf6_message.h
+++ b/ospf6d/ospf6_message.h
@@ -116,26 +116,26 @@
 /* It is just a sequence of LSA Headers */
 
 /* Function definition */
-void ospf6_hello_print (struct ospf6_header *);
-void ospf6_dbdesc_print (struct ospf6_header *);
-void ospf6_lsreq_print (struct ospf6_header *);
-void ospf6_lsupdate_print (struct ospf6_header *);
-void ospf6_lsack_print (struct ospf6_header *);
+extern void ospf6_hello_print (struct ospf6_header *);
+extern void ospf6_dbdesc_print (struct ospf6_header *);
+extern void ospf6_lsreq_print (struct ospf6_header *);
+extern void ospf6_lsupdate_print (struct ospf6_header *);
+extern void ospf6_lsack_print (struct ospf6_header *);
 
-int ospf6_iobuf_size (unsigned int size);
-int ospf6_receive (struct thread *thread);
+extern int ospf6_iobuf_size (unsigned int size);
+extern int ospf6_receive (struct thread *thread);
 
-int ospf6_hello_send (struct thread *thread);
-int ospf6_dbdesc_send (struct thread *thread);
-int ospf6_dbdesc_send_newone (struct thread *thread);
-int ospf6_lsreq_send (struct thread *thread);
-int ospf6_lsupdate_send_interface (struct thread *thread);
-int ospf6_lsupdate_send_neighbor (struct thread *thread);
-int ospf6_lsack_send_interface (struct thread *thread);
-int ospf6_lsack_send_neighbor (struct thread *thread);
+extern int ospf6_hello_send (struct thread *thread);
+extern int ospf6_dbdesc_send (struct thread *thread);
+extern int ospf6_dbdesc_send_newone (struct thread *thread);
+extern int ospf6_lsreq_send (struct thread *thread);
+extern int ospf6_lsupdate_send_interface (struct thread *thread);
+extern int ospf6_lsupdate_send_neighbor (struct thread *thread);
+extern int ospf6_lsack_send_interface (struct thread *thread);
+extern int ospf6_lsack_send_neighbor (struct thread *thread);
 
-int config_write_ospf6_debug_message (struct vty *);
-void install_element_ospf6_debug_message ();
+extern int config_write_ospf6_debug_message (struct vty *);
+extern void install_element_ospf6_debug_message (void);
 
 #endif /* OSPF6_MESSAGE_H */
 
diff --git a/ospf6d/ospf6_neighbor.c b/ospf6d/ospf6_neighbor.c
index 9c1cf23..8a5d698 100644
--- a/ospf6d/ospf6_neighbor.c
+++ b/ospf6d/ospf6_neighbor.c
@@ -183,7 +183,7 @@
 }
 
 /* RFC2328 section 10.4 */
-int
+static int
 need_adjacency (struct ospf6_neighbor *on)
 {
   if (on->ospf6_if->state == OSPF6_INTERFACE_POINTTOPOINT ||
@@ -551,7 +551,7 @@
 
 /* vty functions */
 /* show neighbor structure */
-void
+static void
 ospf6_neighbor_show (struct vty *vty, struct ospf6_neighbor *on)
 {
   char router_id[16];
@@ -612,7 +612,7 @@
            ospf6_interface_state_str[on->ospf6_if->state], VNL);
 }
 
-void
+static void
 ospf6_neighbor_show_drchoice (struct vty *vty, struct ospf6_neighbor *on)
 {
   char router_id[16];
@@ -641,7 +641,7 @@
            VNL);
 }
 
-void
+static void
 ospf6_neighbor_show_detail (struct vty *vty, struct ospf6_neighbor *on)
 {
   char drouter[16], bdrouter[16];
@@ -801,7 +801,7 @@
        "Neighbor list\n"
        "Display details\n"
        "Display DR choices\n"
-      );
+      )
 
 DEFUN (show_ipv6_ospf6_neighbor_one,
        show_ipv6_ospf6_neighbor_one_cmd,
@@ -839,7 +839,7 @@
 }
 
 void
-ospf6_neighbor_init ()
+ospf6_neighbor_init (void)
 {
   install_element (VIEW_NODE, &show_ipv6_ospf6_neighbor_cmd);
   install_element (VIEW_NODE, &show_ipv6_ospf6_neighbor_detail_cmd);
@@ -878,7 +878,7 @@
        "Debug OSPFv3 Neighbor\n"
        "Debug OSPFv3 Neighbor State Change\n"
        "Debug OSPFv3 Neighbor Event\n"
-      );
+      )
 
 DEFUN (no_debug_ospf6_neighbor,
        no_debug_ospf6_neighbor_cmd,
@@ -913,7 +913,7 @@
        "Debug OSPFv3 Neighbor\n"
        "Debug OSPFv3 Neighbor State Change\n"
        "Debug OSPFv3 Neighbor Event\n"
-      );
+      )
 
 int
 config_write_ospf6_debug_neighbor (struct vty *vty)
@@ -929,7 +929,7 @@
 }
 
 void
-install_element_ospf6_debug_neighbor ()
+install_element_ospf6_debug_neighbor (void)
 {
   install_element (ENABLE_NODE, &debug_ospf6_neighbor_cmd);
   install_element (ENABLE_NODE, &debug_ospf6_neighbor_detail_cmd);
diff --git a/ospf6d/ospf6_neighbor.h b/ospf6d/ospf6_neighbor.h
index 8f94790..b3bd173 100644
--- a/ospf6d/ospf6_neighbor.h
+++ b/ospf6d/ospf6_neighbor.h
@@ -105,7 +105,7 @@
 #define OSPF6_NEIGHBOR_LOADING  7
 #define OSPF6_NEIGHBOR_FULL     8
 
-const extern char *ospf6_neighbor_state_str[];
+extern const char *ospf6_neighbor_state_str[];
 
 
 /* Function Prototypes */
@@ -119,20 +119,19 @@
 void ospf6_neighbor_delete (struct ospf6_neighbor *);
 
 /* Neighbor event */
-int hello_received (struct thread *);
-int twoway_received (struct thread *);
-int negotiation_done (struct thread *);
-int exchange_done (struct thread *);
-int loading_done (struct thread *);
-int adj_ok (struct thread *);
-int seqnumber_mismatch (struct thread *);
-int bad_lsreq (struct thread *);
-int oneway_received (struct thread *);
-int inactivity_timer (struct thread *);
+extern int hello_received (struct thread *);
+extern int twoway_received (struct thread *);
+extern int negotiation_done (struct thread *);
+extern int exchange_done (struct thread *);
+extern int loading_done (struct thread *);
+extern int adj_ok (struct thread *);
+extern int seqnumber_mismatch (struct thread *);
+extern int bad_lsreq (struct thread *);
+extern int oneway_received (struct thread *);
+extern int inactivity_timer (struct thread *);
 
-void ospf6_neighbor_init ();
-int config_write_ospf6_debug_neighbor (struct vty *vty);
-void install_element_ospf6_debug_neighbor ();
+extern void ospf6_neighbor_init (void);
+extern int config_write_ospf6_debug_neighbor (struct vty *vty);
+extern void install_element_ospf6_debug_neighbor (void);
 
 #endif /* OSPF6_NEIGHBOR_H */
-
diff --git a/ospf6d/ospf6_network.c b/ospf6d/ospf6_network.c
index 8c0cbf5..96b82af 100644
--- a/ospf6d/ospf6_network.c
+++ b/ospf6d/ospf6_network.c
@@ -38,7 +38,7 @@
 
 /* setsockopt ReUseAddr to on */
 void
-ospf6_set_reuseaddr ()
+ospf6_set_reuseaddr (void)
 {
   u_int on = 0;
   if (setsockopt (ospf6_sock, SOL_SOCKET, SO_REUSEADDR, &on,
@@ -48,7 +48,7 @@
 
 /* setsockopt MulticastLoop to off */
 void
-ospf6_reset_mcastloop ()
+ospf6_reset_mcastloop (void)
 {
   u_int off = 0;
   if (setsockopt (ospf6_sock, IPPROTO_IPV6, IPV6_MULTICAST_LOOP,
@@ -58,13 +58,13 @@
 }
 
 void
-ospf6_set_pktinfo ()
+ospf6_set_pktinfo (void)
 {
   setsockopt_ipv6_pktinfo (ospf6_sock, 1);
 }
 
 void
-ospf6_set_checksum ()
+ospf6_set_checksum (void)
 {
   int offset = 12;
 #ifndef DISABLE_IPV6_CHECKSUM
@@ -78,7 +78,7 @@
 
 /* Make ospf6d's server socket. */
 int
-ospf6_serv_sock ()
+ospf6_serv_sock (void)
 {
   if (ospf6d_privs.change (ZPRIVS_RAISE))
     zlog_err ("ospf6_serv_sock: could not raise privs");
@@ -193,7 +193,7 @@
 #endif
 }
 
-int
+static int
 iov_count (struct iovec *iov)
 {
   int i;
@@ -202,7 +202,7 @@
   return i;
 }
 
-int
+static int
 iov_totallen (struct iovec *iov)
 {
   int i;
diff --git a/ospf6d/ospf6_network.h b/ospf6d/ospf6_network.h
index 9a4d795..fd8758e 100644
--- a/ospf6d/ospf6_network.h
+++ b/ospf6d/ospf6_network.h
@@ -29,22 +29,22 @@
 extern struct in6_addr alldrouters6;
 
 /* Function Prototypes */
-void ospf6_set_reuseaddr ();
-void ospf6_reset_mcastloop ();
-void ospf6_set_pktinfo ();
-void ospf6_set_checksum ();
+extern void ospf6_set_reuseaddr (void);
+extern void ospf6_reset_mcastloop (void);
+extern void ospf6_set_pktinfo (void);
+extern void ospf6_set_checksum (void);
 
-int ospf6_serv_sock ();
+extern int ospf6_serv_sock (void);
 
-void ospf6_join_allspfrouters (u_int);
-void ospf6_leave_allspfrouters (u_int);
-void ospf6_join_alldrouters (u_int);
-void ospf6_leave_alldrouters (u_int);
+extern void ospf6_join_allspfrouters (u_int);
+extern void ospf6_leave_allspfrouters (u_int);
+extern void ospf6_join_alldrouters (u_int);
+extern void ospf6_leave_alldrouters (u_int);
 
-int ospf6_sendmsg (struct in6_addr *, struct in6_addr *,
-                   unsigned int *, struct iovec *);
-int ospf6_recvmsg (struct in6_addr *, struct in6_addr *,
-                   unsigned int *, struct iovec *);
+extern int ospf6_sendmsg (struct in6_addr *, struct in6_addr *,
+                          unsigned int *, struct iovec *);
+extern int ospf6_recvmsg (struct in6_addr *, struct in6_addr *,
+                          unsigned int *, struct iovec *);
 
 #endif /* OSPF6_NETWORK_H */
 
diff --git a/ospf6d/ospf6_proto.h b/ospf6d/ospf6_proto.h
index 9fe821d..a8c1b1a 100644
--- a/ospf6d/ospf6_proto.h
+++ b/ospf6d/ospf6_proto.h
@@ -112,11 +112,10 @@
           OSPF6_PREFIX_SPACE ((op)->prefix_length));           \
 } while (0)
 
-void ospf6_prefix_apply_mask (struct ospf6_prefix *op);
-void ospf6_prefix_options_printbuf (u_int8_t prefix_options,
-                                    char *buf, int size);
-void ospf6_capability_printbuf (char capability, char *buf, int size);
-void ospf6_options_printbuf (u_char *options, char *buf, int size);
+extern void ospf6_prefix_apply_mask (struct ospf6_prefix *op);
+extern void ospf6_prefix_options_printbuf (u_int8_t prefix_options,
+                                           char *buf, int size);
+extern void ospf6_capability_printbuf (char capability, char *buf, int size);
+extern void ospf6_options_printbuf (u_char *options, char *buf, int size);
 
 #endif /* OSPF6_PROTO_H */
-
diff --git a/ospf6d/ospf6_route.c b/ospf6d/ospf6_route.c
index 38fdd51..a89ed7e 100644
--- a/ospf6d/ospf6_route.c
+++ b/ospf6d/ospf6_route.c
@@ -174,7 +174,7 @@
 
 
 struct ospf6_route *
-ospf6_route_create ()
+ospf6_route_create (void)
 {
   struct ospf6_route *route;
   route = XCALLOC (MTYPE_OSPF6_ROUTE, sizeof (struct ospf6_route));
@@ -928,7 +928,7 @@
   vty_out (vty, "%s", VNL);
 }
 
-void
+static void
 ospf6_route_show_table_summary (struct vty *vty,
                                 struct ospf6_route_table *table)
 {
@@ -971,7 +971,7 @@
     }
 }
 
-void
+static void
 ospf6_route_show_table_prefix (struct vty *vty,
                                struct prefix *prefix,
                                struct ospf6_route_table *table)
@@ -993,7 +993,7 @@
     ospf6_route_unlock (route);
 }
 
-void
+static void
 ospf6_route_show_table_address (struct vty *vty,
                                 struct prefix *prefix,
                                 struct ospf6_route_table *table)
@@ -1016,7 +1016,7 @@
     ospf6_route_unlock (route);
 }
 
-void
+static void
 ospf6_route_show_table_match (struct vty *vty, int detail,
                               struct prefix *prefix,
                               struct ospf6_route_table *table)
@@ -1035,7 +1035,7 @@
     }
 }
 
-void
+static void
 ospf6_route_show_table_type (struct vty *vty, int detail, u_char type,
                              struct ospf6_route_table *table)
 {
@@ -1055,7 +1055,7 @@
     }
 }
 
-void
+static void
 ospf6_route_show_table (struct vty *vty, int detail,
                         struct ospf6_route_table *table)
 {
@@ -1173,14 +1173,14 @@
   return CMD_SUCCESS;
 }
 
-void
+static void
 ospf6_linkstate_show_header (struct vty *vty)
 {
   vty_out (vty, "%-7s %-15s %-15s %-8s %-14s %s%s",
            "Type", "Router-ID", "Net-ID", "Rtr-Bits", "Options", "Cost", VNL);
 }
 
-void
+static void
 ospf6_linkstate_show (struct vty *vty, struct ospf6_route *route)
 {
   u_int32_t router, id;
@@ -1205,7 +1205,7 @@
 }
 
 
-void
+static void
 ospf6_linkstate_show_table_exact (struct vty *vty,
                                   struct prefix *prefix,
                                   struct ospf6_route_table *table)
@@ -1227,7 +1227,7 @@
     ospf6_route_unlock (route);
 }
 
-void
+static void
 ospf6_linkstate_show_table (struct vty *vty, int detail,
                             struct ospf6_route_table *table)
 {
@@ -1393,7 +1393,7 @@
 }
 
 void
-install_element_ospf6_debug_route ()
+install_element_ospf6_debug_route (void)
 {
   install_element (ENABLE_NODE, &debug_ospf6_route_cmd);
   install_element (ENABLE_NODE, &no_debug_ospf6_route_cmd);
diff --git a/ospf6d/ospf6_route.h b/ospf6d/ospf6_route.h
index 722fa15..8dcc877 100644
--- a/ospf6d/ospf6_route.h
+++ b/ospf6d/ospf6_route.h
@@ -246,61 +246,60 @@
   (*(u_int32_t *)(&(x)->u.prefix6.s6_addr[4]))
 
 /* Function prototype */
-void ospf6_linkstate_prefix (u_int32_t adv_router, u_int32_t id,
-                             struct prefix *prefix);
-void ospf6_linkstate_prefix2str (struct prefix *prefix, char *buf, int size);
+extern void ospf6_linkstate_prefix (u_int32_t adv_router, u_int32_t id,
+                                    struct prefix *prefix);
+extern void ospf6_linkstate_prefix2str (struct prefix *prefix, char *buf,
+                                        int size);
 
-struct ospf6_route *ospf6_route_create ();
-void ospf6_route_delete (struct ospf6_route *);
-struct ospf6_route *ospf6_route_copy (struct ospf6_route *route);
+extern struct ospf6_route *ospf6_route_create (void);
+extern void ospf6_route_delete (struct ospf6_route *);
+extern struct ospf6_route *ospf6_route_copy (struct ospf6_route *route);
 
-void ospf6_route_lock (struct ospf6_route *route);
-void ospf6_route_unlock (struct ospf6_route *route);
+extern void ospf6_route_lock (struct ospf6_route *route);
+extern void ospf6_route_unlock (struct ospf6_route *route);
 
-struct ospf6_route *
-ospf6_route_lookup (struct prefix *prefix,
-                    struct ospf6_route_table *table);
-struct ospf6_route *
-ospf6_route_lookup_identical (struct ospf6_route *route,
-                              struct ospf6_route_table *table);
-struct ospf6_route *
-ospf6_route_lookup_bestmatch (struct prefix *prefix,
-                              struct ospf6_route_table *table);
-
-struct ospf6_route *
-ospf6_route_add (struct ospf6_route *route, struct ospf6_route_table *table);
-void
-ospf6_route_remove (struct ospf6_route *route, struct ospf6_route_table *table);
-
-struct ospf6_route *ospf6_route_head (struct ospf6_route_table *table);
-struct ospf6_route *ospf6_route_next (struct ospf6_route *route);
-struct ospf6_route *ospf6_route_best_next (struct ospf6_route *route);
-
-struct ospf6_route *ospf6_route_match_head (struct prefix *prefix,
+extern struct ospf6_route *ospf6_route_lookup (struct prefix *prefix,
+                                               struct ospf6_route_table *table);
+extern struct ospf6_route *ospf6_route_lookup_identical (struct ospf6_route *route,
                                             struct ospf6_route_table *table);
-struct ospf6_route *ospf6_route_match_next (struct prefix *prefix,
+extern struct ospf6_route *ospf6_route_lookup_bestmatch (struct prefix *prefix,
+                                              struct ospf6_route_table *table);
+
+extern struct ospf6_route *ospf6_route_add (struct ospf6_route *route,
+                                            struct ospf6_route_table *table);
+extern void ospf6_route_remove (struct ospf6_route *route,
+                                struct ospf6_route_table *table);
+
+extern struct ospf6_route *ospf6_route_head (struct ospf6_route_table *table);
+extern struct ospf6_route *ospf6_route_next (struct ospf6_route *route);
+extern struct ospf6_route *ospf6_route_best_next (struct ospf6_route *route);
+
+extern struct ospf6_route *ospf6_route_match_head (struct prefix *prefix,
+                                            struct ospf6_route_table *table);
+extern struct ospf6_route *ospf6_route_match_next (struct prefix *prefix,
                                             struct ospf6_route *route);
 
-void ospf6_route_remove_all (struct ospf6_route_table *);
-struct ospf6_route_table *ospf6_route_table_create (int s, int t);
-void ospf6_route_table_delete (struct ospf6_route_table *);
-void ospf6_route_dump (struct ospf6_route_table *table);
+extern void ospf6_route_remove_all (struct ospf6_route_table *);
+extern struct ospf6_route_table *ospf6_route_table_create (int s, int t);
+extern void ospf6_route_table_delete (struct ospf6_route_table *);
+extern void ospf6_route_dump (struct ospf6_route_table *table);
 
 
-void ospf6_route_show (struct vty *vty, struct ospf6_route *route);
-void ospf6_route_show_detail (struct vty *vty, struct ospf6_route *route);
+extern void ospf6_route_show (struct vty *vty, struct ospf6_route *route);
+extern void ospf6_route_show_detail (struct vty *vty, struct ospf6_route *route);
 
-int ospf6_route_table_show (struct vty *, int, const char *[],
-                            struct ospf6_route_table *);
-int ospf6_linkstate_table_show (struct vty *vty, int argc, const char *argv[],
-                            struct ospf6_route_table *table);
+extern int ospf6_route_table_show (struct vty *, int, const char *[],
+                                   struct ospf6_route_table *);
+extern int ospf6_linkstate_table_show (struct vty *vty, int argc,
+                                       const char *argv[],
+                                       struct ospf6_route_table *table);
 
-void ospf6_brouter_show_header (struct vty *vty);
-void ospf6_brouter_show (struct vty *vty, struct ospf6_route *route);
+extern void ospf6_brouter_show_header (struct vty *vty);
+extern void ospf6_brouter_show (struct vty *vty, struct ospf6_route *route);
 
-int config_write_ospf6_debug_route (struct vty *vty);
-void install_element_ospf6_debug_route ();
-void ospf6_route_init ();
+extern int config_write_ospf6_debug_route (struct vty *vty);
+extern void install_element_ospf6_debug_route (void);
+extern void ospf6_route_init (void);
 
 #endif /* OSPF6_ROUTE_H */
 
diff --git a/ospf6d/ospf6_snmp.h b/ospf6d/ospf6_snmp.h
index 7ef784c..5c67893 100644
--- a/ospf6d/ospf6_snmp.h
+++ b/ospf6d/ospf6_snmp.h
@@ -22,7 +22,7 @@
 #ifndef OSPF6_SNMP_H
 #define OSPF6_SNMP_H
 
-void ospf6_snmp_init (struct thread_master *);
+extern void ospf6_snmp_init (struct thread_master *);
 
 #endif /*OSPF6_SNMP_H*/
 
diff --git a/ospf6d/ospf6_spf.c b/ospf6d/ospf6_spf.c
index 08c1eb7..44e11f9 100644
--- a/ospf6d/ospf6_spf.c
+++ b/ospf6d/ospf6_spf.c
@@ -43,7 +43,7 @@
 
 unsigned char conf_debug_ospf6_spf = 0;
 
-int
+static int
 ospf6_vertex_cmp (void *a, void *b)
 {
   struct ospf6_vertex *va = (struct ospf6_vertex *) a;
@@ -53,7 +53,7 @@
   return (va->cost - vb->cost);
 }
 
-int
+static int
 ospf6_vertex_id_cmp (void *a, void *b)
 {
   struct ospf6_vertex *va = (struct ospf6_vertex *) a;
@@ -70,7 +70,7 @@
   return ret;
 }
 
-struct ospf6_vertex *
+static struct ospf6_vertex *
 ospf6_vertex_create (struct ospf6_lsa *lsa)
 {
   struct ospf6_vertex *v;
@@ -113,14 +113,14 @@
   return v;
 }
 
-void
+static void
 ospf6_vertex_delete (struct ospf6_vertex *v)
 {
   list_delete (v->child_list);
   XFREE (MTYPE_OSPF6_VERTEX, v);
 }
 
-struct ospf6_lsa *
+static struct ospf6_lsa *
 ospf6_lsdesc_lsa (caddr_t lsdesc, struct ospf6_vertex *v)
 {
   struct ospf6_lsa *lsa;
@@ -166,7 +166,7 @@
   return lsa;
 }
 
-char *
+static char *
 ospf6_lsdesc_backlink (struct ospf6_lsa *lsa,
                        caddr_t lsdesc, struct ospf6_vertex *v)
 {
@@ -218,7 +218,7 @@
   return found;
 }
 
-void
+static void
 ospf6_nexthop_calc (struct ospf6_vertex *w, struct ospf6_vertex *v,
                     caddr_t lsdesc)
 {
@@ -274,7 +274,7 @@
     zlog_debug ("No nexthop for %s found", w->name);
 }
 
-int
+static int
 ospf6_spf_install (struct ospf6_vertex *v,
                    struct ospf6_route_table *result_table)
 {
@@ -487,7 +487,7 @@
   pqueue_delete (candidate_list);
 }
 
-void
+static void
 ospf6_spf_log_database (struct ospf6_area *oa)
 {
   char *p, *end, buffer[256];
@@ -512,7 +512,7 @@
   zlog_debug ("%s", buffer);
 }
 
-int
+static int
 ospf6_spf_calculation_thread (struct thread *t)
 {
   struct ospf6_area *oa;
@@ -689,7 +689,7 @@
 }
 
 void
-install_element_ospf6_debug_spf ()
+install_element_ospf6_debug_spf (void)
 {
   install_element (ENABLE_NODE, &debug_ospf6_spf_process_cmd);
   install_element (ENABLE_NODE, &debug_ospf6_spf_time_cmd);
@@ -706,7 +706,7 @@
 }
 
 void
-ospf6_spf_init ()
+ospf6_spf_init (void)
 {
 }
 
diff --git a/ospf6d/ospf6_spf.h b/ospf6d/ospf6_spf.h
index 728eec5..c7069c2 100644
--- a/ospf6d/ospf6_spf.h
+++ b/ospf6d/ospf6_spf.h
@@ -77,18 +77,18 @@
 #define VERTEX_IS_TYPE(t, v) \
   ((v)->type == OSPF6_VERTEX_TYPE_ ## t ? 1 : 0)
 
-void ospf6_spf_table_finish (struct ospf6_route_table *result_table);
-void ospf6_spf_calculation (u_int32_t router_id,
-                            struct ospf6_route_table *result_table,
-                            struct ospf6_area *oa);
-void ospf6_spf_schedule (struct ospf6_area *oa);
+extern void ospf6_spf_table_finish (struct ospf6_route_table *result_table);
+extern void ospf6_spf_calculation (u_int32_t router_id,
+                                   struct ospf6_route_table *result_table,
+                                   struct ospf6_area *oa);
+extern void ospf6_spf_schedule (struct ospf6_area *oa);
 
-void ospf6_spf_display_subtree (struct vty *vty, const char *prefix,
-                                int rest, struct ospf6_vertex *v);
+extern void ospf6_spf_display_subtree (struct vty *vty, const char *prefix,
+                                       int rest, struct ospf6_vertex *v);
 
-int config_write_ospf6_debug_spf (struct vty *vty);
-void install_element_ospf6_debug_spf ();
-void ospf6_spf_init ();
+extern int config_write_ospf6_debug_spf (struct vty *vty);
+extern void install_element_ospf6_debug_spf (void);
+extern void ospf6_spf_init (void);
 
 #endif /* OSPF6_SPF_H */
 
diff --git a/ospf6d/ospf6_top.c b/ospf6d/ospf6_top.c
index a5efcb8..f59b6f9 100644
--- a/ospf6d/ospf6_top.c
+++ b/ospf6d/ospf6_top.c
@@ -51,7 +51,7 @@
 /* global ospf6d variable */
 struct ospf6 *ospf6;
 
-void
+static void
 ospf6_top_lsdb_hook_add (struct ospf6_lsa *lsa)
 {
   switch (ntohs (lsa->header->type))
@@ -65,7 +65,7 @@
     }
 }
 
-void
+static void
 ospf6_top_lsdb_hook_remove (struct ospf6_lsa *lsa)
 {
   switch (ntohs (lsa->header->type))
@@ -79,21 +79,21 @@
     }
 }
 
-void
+static void
 ospf6_top_route_hook_add (struct ospf6_route *route)
 {
   ospf6_abr_originate_summary (route);
   ospf6_zebra_route_update_add (route);
 }
 
-void
+static void
 ospf6_top_route_hook_remove (struct ospf6_route *route)
 {
   ospf6_abr_originate_summary (route);
   ospf6_zebra_route_update_remove (route);
 }
 
-void
+static void
 ospf6_top_brouter_hook_add (struct ospf6_route *route)
 {
   ospf6_abr_examin_brouter (ADV_ROUTER_IN_PREFIX (&route->prefix));
@@ -101,7 +101,7 @@
   ospf6_abr_originate_summary (route);
 }
 
-void
+static void
 ospf6_top_brouter_hook_remove (struct ospf6_route *route)
 {
   ospf6_abr_examin_brouter (ADV_ROUTER_IN_PREFIX (&route->prefix));
@@ -109,8 +109,8 @@
   ospf6_abr_originate_summary (route);
 }
 
-struct ospf6 *
-ospf6_create ()
+static struct ospf6 *
+ospf6_create (void)
 {
   struct ospf6 *o;
 
@@ -144,7 +144,7 @@
   return o;
 }
 
-void
+static void
 ospf6_delete (struct ospf6 *o)
 {
   struct listnode *node, *nnode;
@@ -165,7 +165,7 @@
   XFREE (MTYPE_OSPF6_TOP, o);
 }
 
-void
+static void
 ospf6_enable (struct ospf6 *o)
 {
   struct listnode *node, *nnode;
@@ -179,7 +179,7 @@
     }
 }
 
-void
+static void
 ospf6_disable (struct ospf6 *o)
 {
   struct listnode *node, *nnode;
@@ -198,7 +198,7 @@
     }
 }
 
-int
+static int
 ospf6_maxage_remover (struct thread *thread)
 {
   struct ospf6 *o = (struct ospf6 *) THREAD_ARG (thread);
@@ -427,7 +427,7 @@
   return CMD_SUCCESS;
 }
 
-void
+static void
 ospf6_show (struct vty *vty, struct ospf6 *o)
 {
   struct listnode *n;
@@ -499,7 +499,7 @@
        "Specify IPv6 prefix\n"
        "Detailed information\n"
        "Summary of route table\n"
-       );
+       )
 
 DEFUN (show_ipv6_ospf6_route_match,
        show_ipv6_ospf6_route_match_cmd,
@@ -562,7 +562,7 @@
        ROUTE_STR
        "Specify IPv6 prefix\n"
        "Display routes longer than the specified route\n"
-       );
+       )
 
 DEFUN (show_ipv6_ospf6_route_match_detail,
        show_ipv6_ospf6_route_longer_detail_cmd,
@@ -587,7 +587,7 @@
        "Dispaly Inter-Area routes\n"
        "Dispaly Type-1 External routes\n"
        "Dispaly Type-2 External routes\n"
-       );
+       )
 
 DEFUN (show_ipv6_ospf6_route_type_detail,
        show_ipv6_ospf6_route_type_detail_cmd,
@@ -618,7 +618,7 @@
 }
 
 /* OSPF configuration write function. */
-int
+static int
 config_write_ospf6 (struct vty *vty)
 {
   char router_id[16];
@@ -660,7 +660,7 @@
 
 /* Install ospf related commands. */
 void
-ospf6_top_init ()
+ospf6_top_init (void)
 {
   /* Install ospf6 top node. */
   install_node (&ospf6_node, config_write_ospf6);
diff --git a/ospf6d/ospf6_top.h b/ospf6d/ospf6_top.h
index eae20e6..ba485f9 100644
--- a/ospf6d/ospf6_top.h
+++ b/ospf6d/ospf6_top.h
@@ -68,9 +68,9 @@
 extern struct ospf6 *ospf6;
 
 /* prototypes */
-void ospf6_top_init ();
+extern void ospf6_top_init (void);
 
-void ospf6_maxage_remove (struct ospf6 *o);
+extern void ospf6_maxage_remove (struct ospf6 *o);
 
 #endif /* OSPF6_TOP_H */
 
diff --git a/ospf6d/ospf6_zebra.c b/ospf6d/ospf6_zebra.c
index c974005..b5ffc0a 100644
--- a/ospf6d/ospf6_zebra.c
+++ b/ospf6d/ospf6_zebra.c
@@ -47,7 +47,7 @@
 struct in_addr router_id_zebra;
 
 /* Router-id update message from zebra. */
-int
+static int
 ospf6_router_id_update_zebra (int command, struct zclient *zclient,
 			      zebra_size_t length)
 {
@@ -88,7 +88,7 @@
 }
 
 /* Inteface addition message from zebra. */
-int
+static int
 ospf6_zebra_if_add (int command, struct zclient *zclient, zebra_size_t length)
 {
   struct interface *ifp;
@@ -101,7 +101,7 @@
   return 0;
 }
 
-int
+static int
 ospf6_zebra_if_del (int command, struct zclient *zclient, zebra_size_t length)
 {
   struct interface *ifp;
@@ -125,7 +125,7 @@
   return 0;
 }
 
-int
+static int
 ospf6_zebra_if_state_update (int command, struct zclient *zclient,
                              zebra_size_t length)
 {
@@ -141,7 +141,7 @@
   return 0;
 }
 
-int
+static int
 ospf6_zebra_if_address_update_add (int command, struct zclient *zclient,
                                    zebra_size_t length)
 {
@@ -164,7 +164,7 @@
   return 0;
 }
 
-int
+static int
 ospf6_zebra_if_address_update_delete (int command, struct zclient *zclient,
                                zebra_size_t length)
 {
@@ -187,7 +187,7 @@
   return 0;
 }
 
-int
+static int
 ospf6_zebra_read_ipv6 (int command, struct zclient *zclient,
                        zebra_size_t length)
 {
@@ -317,7 +317,7 @@
 }
 
 /* Zebra configuration write function. */
-int
+static int
 config_write_ospf6_zebra (struct vty *vty)
 {
   if (! zclient->enable)
@@ -553,7 +553,7 @@
 }
 
 void
-ospf6_zebra_init ()
+ospf6_zebra_init (void)
 {
   /* Allocate zebra structure. */
   zclient = zclient_new ();
@@ -623,7 +623,7 @@
        DEBUG_STR
        OSPF6_STR
        "Debug connection between zebra\n"
-      );
+      )
 
 
 DEFUN (no_debug_ospf6_zebra_sendrecv,
@@ -660,7 +660,7 @@
        DEBUG_STR
        OSPF6_STR
        "Debug connection between zebra\n"
-      );
+      )
 
 int
 config_write_ospf6_debug_zebra (struct vty *vty)
@@ -678,7 +678,7 @@
 }
 
 void
-install_element_ospf6_debug_zebra ()
+install_element_ospf6_debug_zebra (void)
 {
   install_element (ENABLE_NODE, &debug_ospf6_zebra_cmd);
   install_element (ENABLE_NODE, &no_debug_ospf6_zebra_cmd);
diff --git a/ospf6d/ospf6_zebra.h b/ospf6d/ospf6_zebra.h
index fb9877b..24a4ae6 100644
--- a/ospf6d/ospf6_zebra.h
+++ b/ospf6d/ospf6_zebra.h
@@ -37,17 +37,15 @@
 
 extern struct zclient *zclient;
 
-void ospf6_zebra_route_update_add (struct ospf6_route *request);
-void ospf6_zebra_route_update_remove (struct ospf6_route *request);
+extern void ospf6_zebra_route_update_add (struct ospf6_route *request);
+extern void ospf6_zebra_route_update_remove (struct ospf6_route *request);
 
-void ospf6_zebra_redistribute (int);
-void ospf6_zebra_no_redistribute (int);
-#define ospf6_zebra_is_redistribute(type) \
-  (zclient->redist[type])
-void ospf6_zebra_init ();
+extern void ospf6_zebra_redistribute (int);
+extern void ospf6_zebra_no_redistribute (int);
+#define ospf6_zebra_is_redistribute(type) (zclient->redist[type])
+extern void ospf6_zebra_init (void);
 
-int config_write_ospf6_debug_zebra (struct vty *vty);
-void install_element_ospf6_debug_zebra ();
+extern int config_write_ospf6_debug_zebra (struct vty *vty);
+extern void install_element_ospf6_debug_zebra (void);
 
 #endif /*OSPF6_ZEBRA_H*/
-
diff --git a/ospf6d/ospf6d.c b/ospf6d/ospf6d.c
index 3c84fe6..1a615ff 100644
--- a/ospf6d/ospf6d.c
+++ b/ospf6d/ospf6d.c
@@ -50,11 +50,6 @@
 
 char ospf6_daemon_version[] = OSPF6_DAEMON_VERSION;
 
-void
-ospf6_debug ()
-{
-}
-
 struct route_node *
 route_prev (struct route_node *node)
 {
@@ -104,7 +99,7 @@
   1 /* VTYSH */
 };
 
-int
+static int
 config_write_ospf6_debug (struct vty *vty)
 {
   config_write_ospf6_debug_message (vty);
@@ -221,7 +216,7 @@
        "Display details of LSAs\n"
        "Dump LSAs\n"
        "Display LSA's internal information\n"
-      );
+      )
 
 DEFUN (show_ipv6_ospf6_database_type,
        show_ipv6_ospf6_database_type_cmd,
@@ -315,7 +310,7 @@
        "Display details of LSAs\n"
        "Dump LSAs\n"
        "Display LSA's internal information\n"
-      );
+      )
 
 DEFUN (show_ipv6_ospf6_database_id,
        show_ipv6_ospf6_database_id_cmd,
@@ -384,7 +379,7 @@
        "Display details of LSAs\n"
        "Dump LSAs\n"
        "Display LSA's internal information\n"
-      );
+      )
 
 ALIAS (show_ipv6_ospf6_database_id,
        show_ipv6_ospf6_database_linkstate_id_cmd,
@@ -395,7 +390,7 @@
        "Display Link state database\n"
        "Search by Link state ID\n"
        "Specify Link state ID as IPv4 address notation\n"
-      );
+      )
 
 ALIAS (show_ipv6_ospf6_database_id,
        show_ipv6_ospf6_database_linkstate_id_detail_cmd,
@@ -410,7 +405,7 @@
        "Display details of LSAs\n"
        "Dump LSAs\n"
        "Display LSA's internal information\n"
-      );
+      )
 
 DEFUN (show_ipv6_ospf6_database_router,
        show_ipv6_ospf6_database_router_cmd,
@@ -481,7 +476,7 @@
        "Display details of LSAs\n"
        "Dump LSAs\n"
        "Display LSA's internal information\n"
-      );
+      )
 
 ALIAS (show_ipv6_ospf6_database_router,
        show_ipv6_ospf6_database_adv_router_cmd,
@@ -492,7 +487,7 @@
        "Display Link state database\n"
        "Search by Advertising Router\n"
        "Specify Advertising Router as IPv4 address notation\n"
-      );
+      )
 
 ALIAS (show_ipv6_ospf6_database_router,
        show_ipv6_ospf6_database_adv_router_detail_cmd,
@@ -507,7 +502,7 @@
        "Display details of LSAs\n"
        "Dump LSAs\n"
        "Display LSA's internal information\n"
-      );
+      )
 
 DEFUN (show_ipv6_ospf6_database_type_id,
        show_ipv6_ospf6_database_type_id_cmd,
@@ -614,7 +609,7 @@
        "Display details of LSAs\n"
        "Dump LSAs\n"
        "Display LSA's internal information\n"
-      );
+      )
 
 ALIAS (show_ipv6_ospf6_database_type_id,
        show_ipv6_ospf6_database_type_linkstate_id_cmd,
@@ -636,7 +631,7 @@
        "Display Intra-Area-Prefix LSAs\n"
        "Search by Link state ID\n"
        "Specify Link state ID as IPv4 address notation\n"
-      );
+      )
 
 ALIAS (show_ipv6_ospf6_database_type_id,
        show_ipv6_ospf6_database_type_linkstate_id_detail_cmd,
@@ -662,7 +657,7 @@
        "Display details of LSAs\n"
        "Dump LSAs\n"
        "Display LSA's internal information\n"
-      );
+      )
 
 DEFUN (show_ipv6_ospf6_database_type_router,
        show_ipv6_ospf6_database_type_router_cmd,
@@ -771,7 +766,7 @@
        "Display details of LSAs\n"
        "Dump LSAs\n"
        "Display LSA's internal information\n"
-      );
+      )
 
 ALIAS (show_ipv6_ospf6_database_type_router,
        show_ipv6_ospf6_database_type_adv_router_cmd,
@@ -793,7 +788,7 @@
        "Display Intra-Area-Prefix LSAs\n"
        "Search by Advertising Router\n"
        "Specify Advertising Router as IPv4 address notation\n"
-      );
+      )
 
 ALIAS (show_ipv6_ospf6_database_type_router,
        show_ipv6_ospf6_database_type_adv_router_detail_cmd,
@@ -819,7 +814,7 @@
        "Display details of LSAs\n"
        "Dump LSAs\n"
        "Display LSA's internal information\n"
-      );
+      )
 
 DEFUN (show_ipv6_ospf6_database_id_router,
        show_ipv6_ospf6_database_id_router_cmd,
@@ -901,7 +896,7 @@
        "Display details of LSAs\n"
        "Dump LSAs\n"
        "Display LSA's internal information\n"
-      );
+      )
 
 DEFUN (show_ipv6_ospf6_database_adv_router_linkstate_id,
        show_ipv6_ospf6_database_adv_router_linkstate_id_cmd,
@@ -985,7 +980,7 @@
        "Display details of LSAs\n"
        "Dump LSAs\n"
        "Display LSA's internal information\n"
-      );
+      )
 
 DEFUN (show_ipv6_ospf6_database_type_id_router,
        show_ipv6_ospf6_database_type_id_router_cmd,
@@ -1104,7 +1099,7 @@
        "Specify Advertising Router as IPv4 address notation\n"
        "Dump LSAs\n"
        "Display LSA's internal information\n"
-      );
+      )
 
 DEFUN (show_ipv6_ospf6_database_type_adv_router_linkstate_id,
        show_ipv6_ospf6_database_type_adv_router_linkstate_id_cmd,
@@ -1229,7 +1224,7 @@
        "Specify Link state ID as IPv4 address notation\n"
        "Dump LSAs\n"
        "Display LSA's internal information\n"
-      );
+      )
 
 DEFUN (show_ipv6_ospf6_database_self_originated,
        show_ipv6_ospf6_database_self_originated_cmd,
@@ -1386,7 +1381,7 @@
        "Display details of LSAs\n"
        "Dump LSAs\n"
        "Display LSA's internal information\n"
-      );
+      )
 
 DEFUN (show_ipv6_ospf6_database_type_self_originated_linkstate_id,
        show_ipv6_ospf6_database_type_self_originated_linkstate_id_cmd,
@@ -1501,7 +1496,7 @@
        "Display details of LSAs\n"
        "Dump LSAs\n"
        "Display LSA's internal information\n"
-      );
+      )
 
 DEFUN (show_ipv6_ospf6_database_type_id_self_originated,
        show_ipv6_ospf6_database_type_id_self_originated_cmd,
@@ -1614,7 +1609,7 @@
        "Display details of LSAs\n"
        "Dump LSAs\n"
        "Display LSA's internal information\n"
-      );
+      )
 
 
 DEFUN (show_ipv6_ospf6_border_routers,
@@ -1675,7 +1670,7 @@
        "Display routing table for ABR and ASBR\n"
        "Specify Router-ID\n"
        "Display Detail\n"
-      );
+      )
 
 DEFUN (show_ipv6_ospf6_linkstate,
        show_ipv6_ospf6_linkstate_cmd,
@@ -1709,7 +1704,7 @@
        "Display linkstate routing table\n"
        "Display Router Entry\n"
        "Specify Router ID as IPv4 address notation\n"
-      );
+      )
 
 ALIAS (show_ipv6_ospf6_linkstate,
        show_ipv6_ospf6_linkstate_network_cmd,
@@ -1721,7 +1716,7 @@
        "Display Network Entry\n"
        "Specify Router ID as IPv4 address notation\n"
        "Specify Link state ID as IPv4 address notation\n"
-      );
+      )
 
 DEFUN (show_ipv6_ospf6_linkstate_detail,
        show_ipv6_ospf6_linkstate_detail_cmd,
@@ -1757,7 +1752,7 @@
 
 /* Install ospf related commands. */
 void
-ospf6_init ()
+ospf6_init (void)
 {
   ospf6_top_init ();
   ospf6_area_init ();
diff --git a/ospf6d/ospf6d.h b/ospf6d/ospf6d.h
index 2d1f725..b6f1b73 100644
--- a/ospf6d/ospf6d.h
+++ b/ospf6d/ospf6d.h
@@ -112,10 +112,10 @@
 
 
 /* Function Prototypes */
-struct route_node *route_prev (struct route_node *node);
+extern struct route_node *route_prev (struct route_node *node);
 
-void ospf6_debug ();
-void ospf6_init ();
+extern void ospf6_debug (void);
+extern void ospf6_init (void);
 
 #endif /* OSPF6D_H */
 
diff --git a/ripngd/ripng_debug.c b/ripngd/ripng_debug.c
index 7841fe2..4ed4fa3 100644
--- a/ripngd/ripng_debug.c
+++ b/ripngd/ripng_debug.c
@@ -211,7 +211,7 @@
   1 /* VTYSH */
 };
 
-int
+static int
 config_write_debug (struct vty *vty)
 {
   int write = 0;
diff --git a/ripngd/ripng_debug.h b/ripngd/ripng_debug.h
index 617a07d..f5ed6ea 100644
--- a/ripngd/ripng_debug.h
+++ b/ripngd/ripng_debug.h
@@ -47,7 +47,7 @@
 extern unsigned long ripng_debug_packet;
 extern unsigned long ripng_debug_zebra;
 
-void ripng_debug_init ();
-void ripng_debug_reset ();
+extern void ripng_debug_init (void);
+extern void ripng_debug_reset (void);
 
 #endif /* _ZEBRA_RIPNG_DEBUG_H */
diff --git a/ripngd/ripng_interface.c b/ripngd/ripng_interface.c
index 140e3be..d76e3a1 100644
--- a/ripngd/ripng_interface.c
+++ b/ripngd/ripng_interface.c
@@ -52,12 +52,12 @@
 /* Static utility function. */
 static void ripng_enable_apply (struct interface *);
 static void ripng_passive_interface_apply (struct interface *);
-int ripng_enable_if_lookup (const char *ifname);
-int ripng_enable_network_lookup2 (struct connected *connected);
-void ripng_enable_apply_all ();
+static int ripng_enable_if_lookup (const char *);
+static int ripng_enable_network_lookup2 (struct connected *);
+static void ripng_enable_apply_all (void);
 
 /* Join to the all rip routers multicast group. */
-int
+static int
 ripng_multicast_join (struct interface *ifp)
 {
   int ret;
@@ -109,7 +109,7 @@
 }
 
 /* Leave from the all rip routers multicast group. */
-int
+static int
 ripng_multicast_leave (struct interface *ifp)
 {
   int ret;
@@ -137,7 +137,7 @@
 }
 
 /* How many link local IPv6 address could be used on the interface ? */
-int
+static int
 ripng_if_ipv6_lladdress_check (struct interface *ifp)
 {
   struct listnode *nn;
@@ -158,8 +158,8 @@
 }
 
 /* Check max mtu size. */
-unsigned int
-ripng_check_max_mtu ()
+static unsigned int
+ripng_check_max_mtu (void)
 {
   struct listnode *node;
   struct interface *ifp;
@@ -173,7 +173,7 @@
   return mtu;
 }
 
-int
+static int
 ripng_if_down (struct interface *ifp)
 {
   struct route_node *rp;
@@ -335,7 +335,7 @@
 }
 
 void
-ripng_interface_clean ()
+ripng_interface_clean (void)
 {
   struct listnode *node, *nnode;
   struct interface *ifp;
@@ -358,7 +358,8 @@
 }
 
 void
-ripng_interface_reset () {
+ripng_interface_reset (void)
+{
   struct listnode *node;
   struct interface *ifp;
   struct ripng_interface *ri;
@@ -526,7 +527,7 @@
 /* Lookup RIPng enable network. */
 /* Check wether the interface has at least a connected prefix that
  * is within the ripng_enable_network table. */
-int
+static int
 ripng_enable_network_lookup_if (struct interface *ifp)
 {
   struct listnode *node;
@@ -559,7 +560,7 @@
 }
 
 /* Check wether connected is within the ripng_enable_network table. */
-int
+static int
 ripng_enable_network_lookup2 (struct connected *connected)
 {
   struct prefix_ipv6 address;
@@ -588,7 +589,7 @@
 }
 
 /* Add RIPng enable network. */
-int
+static int
 ripng_enable_network_add (struct prefix *p)
 {
   struct route_node *node;
@@ -610,7 +611,7 @@
 }
 
 /* Delete RIPng enable network. */
-int
+static int
 ripng_enable_network_delete (struct prefix *p)
 {
   struct route_node *node;
@@ -632,7 +633,7 @@
 }
 
 /* Lookup function. */
-int
+static int
 ripng_enable_if_lookup (const char *ifname)
 {
   unsigned int i;
@@ -646,7 +647,7 @@
 }
 
 /* Add interface to ripng_enable_if. */
-int
+static int
 ripng_enable_if_add (const char *ifname)
 {
   int ret;
@@ -663,7 +664,7 @@
 }
 
 /* Delete interface from ripng_enable_if. */
-int
+static int
 ripng_enable_if_delete (const char *ifname)
 {
   int index;
@@ -683,7 +684,7 @@
 }
 
 /* Wake up interface. */
-int
+static int
 ripng_interface_wakeup (struct thread *t)
 {
   struct interface *ifp;
@@ -710,9 +711,7 @@
   return 0;
 }
 
-int ripng_redistribute_check (int);
-
-void
+static void
 ripng_connect_set (struct interface *ifp, int set)
 {
   struct listnode *node, *nnode;
@@ -816,8 +815,8 @@
 }
 
 /* Set distribute list to all interfaces. */
-void
-ripng_enable_apply_all ()
+static void
+ripng_enable_apply_all (void)
 {
   struct interface *ifp;
   struct listnode *node;
@@ -853,7 +852,7 @@
 vector Vripng_passive_interface;
 
 /* Utility function for looking up passive interface settings. */
-int
+static int
 ripng_passive_interface_lookup (const char *ifname)
 {
   unsigned int i;
@@ -881,7 +880,7 @@
     ri->passive = 1;
 }
 
-void
+static void
 ripng_passive_interface_apply_all (void)
 {
   struct interface *ifp;
@@ -892,7 +891,7 @@
 }
 
 /* Passive interface. */
-int
+static int
 ripng_passive_interface_set (struct vty *vty, const char *ifname)
 {
   if (ripng_passive_interface_lookup (ifname) >= 0)
@@ -905,7 +904,7 @@
   return CMD_SUCCESS;
 }
 
-int
+static int
 ripng_passive_interface_unset (struct vty *vty, const char *ifname)
 {
   int i;
@@ -1117,8 +1116,8 @@
   return ripng_passive_interface_unset (vty, argv[0]);
 }
 
-struct ripng_interface *
-ri_new ()
+static struct ripng_interface *
+ri_new (void)
 {
   struct ripng_interface *ri;
   ri = XCALLOC (MTYPE_IF, sizeof (struct ripng_interface));
@@ -1133,7 +1132,7 @@
   return ri;
 }
 
-int
+static int
 ripng_if_new_hook (struct interface *ifp)
 {
   ifp->info = ri_new ();
@@ -1141,7 +1140,7 @@
 }
 
 /* Called when interface structure deleted. */
-int
+static int
 ripng_if_delete_hook (struct interface *ifp)
 {
   XFREE (MTYPE_IF, ifp->info);
@@ -1150,7 +1149,7 @@
 }
 
 /* Configuration write function for ripngd. */
-int
+static int
 interface_config_write (struct vty *vty)
 {
   struct listnode *node;
diff --git a/ripngd/ripng_main.c b/ripngd/ripng_main.c
index a18ce9d..4877485 100644
--- a/ripngd/ripng_main.c
+++ b/ripngd/ripng_main.c
@@ -129,7 +129,7 @@
 }
 
 /* SIGHUP handler. */
-void 
+static void 
 sighup (void)
 {
   zlog_info ("SIGHUP received");
@@ -145,7 +145,7 @@
 }
 
 /* SIGINT handler. */
-void
+static void
 sigint (void)
 {
   zlog_notice ("Terminating on signal");
@@ -157,7 +157,7 @@
 }
 
 /* SIGUSR1 handler. */
-void
+static void
 sigusr1 (void)
 {
   zlog_rotate (NULL);
diff --git a/ripngd/ripng_nexthop.h b/ripngd/ripng_nexthop.h
index 50a86ad..7c04105 100644
--- a/ripngd/ripng_nexthop.h
+++ b/ripngd/ripng_nexthop.h
@@ -27,12 +27,13 @@
 #include "ripngd/ripng_route.h"
 #include "ripngd/ripngd.h"
 
-struct list * ripng_rte_new(void);
-void ripng_rte_free(struct list *ripng_rte_list);
-void ripng_rte_add(struct list *ripng_rte_list, struct prefix_ipv6 *p,
-                   struct ripng_info *rinfo, struct ripng_aggregate *aggregate);
-void ripng_rte_send(struct list *ripng_rte_list, struct interface *ifp,
-                    struct sockaddr_in6 *to);
+extern struct list * ripng_rte_new(void);
+extern void ripng_rte_free(struct list *ripng_rte_list);
+extern void ripng_rte_add(struct list *ripng_rte_list, struct prefix_ipv6 *p,
+                          struct ripng_info *rinfo,
+                          struct ripng_aggregate *aggregate);
+extern void ripng_rte_send(struct list *ripng_rte_list, struct interface *ifp,
+                           struct sockaddr_in6 *to);
 
 /***
  * 1 if A > B
diff --git a/ripngd/ripng_offset.c b/ripngd/ripng_offset.c
index 31d78ba..5bc2568 100644
--- a/ripngd/ripng_offset.c
+++ b/ripngd/ripng_offset.c
@@ -32,6 +32,8 @@
 #include "linklist.h"
 #include "memory.h"
 
+#include "ripngd/ripngd.h"
+
 #define RIPNG_OFFSET_LIST_IN  0
 #define RIPNG_OFFSET_LIST_OUT 1
 #define RIPNG_OFFSET_LIST_MAX 2
@@ -50,7 +52,7 @@
 
 static struct list *ripng_offset_list_master;
 
-int
+static int
 strcmp_safe (const char *s1, const char *s2)
 {
   if (s1 == NULL && s2 == NULL)
@@ -62,7 +64,7 @@
   return strcmp (s1, s2);
 }
 
-struct ripng_offset_list *
+static struct ripng_offset_list *
 ripng_offset_list_new ()
 {
   struct ripng_offset_list *new;
@@ -71,13 +73,13 @@
   return new;
 }
 
-void
+static void
 ripng_offset_list_free (struct ripng_offset_list *offset)
 {
   XFREE (MTYPE_RIPNG_OFFSET_LIST, offset);
 }
 
-struct ripng_offset_list *
+static struct ripng_offset_list *
 ripng_offset_list_lookup (const char *ifname)
 {
   struct ripng_offset_list *offset;
@@ -91,7 +93,7 @@
   return NULL;
 }
 
-struct ripng_offset_list *
+static struct ripng_offset_list *
 ripng_offset_list_get (const char *ifname)
 {
   struct ripng_offset_list *offset;
@@ -108,7 +110,7 @@
   return offset;
 }
 
-int
+static int
 ripng_offset_list_set (struct vty *vty, const char *alist,
 		       const char *direct_str, const char *metric_str,
 		       const char *ifname)
@@ -147,7 +149,7 @@
   return CMD_SUCCESS;
 }
 
-int
+static int
 ripng_offset_list_unset (struct vty *vty, const char *alist,
 			 const char *direct_str, const char *metric_str,
 			 const char *ifname)
@@ -338,13 +340,13 @@
   return ripng_offset_list_unset (vty, argv[0], argv[1], argv[2], argv[3]);
 }
 
-int
+static int
 offset_list_cmp (struct ripng_offset_list *o1, struct ripng_offset_list *o2)
 {
   return strcmp_safe (o1->ifname, o2->ifname);
 }
 
-void
+static void
 offset_list_del (struct ripng_offset_list *offset)
 {
   if (OFFSET_LIST_IN_NAME (offset))
@@ -357,7 +359,7 @@
 }
 
 void
-ripng_offset_init ()
+ripng_offset_init (void)
 {
   ripng_offset_list_master = list_new ();
   ripng_offset_list_master->cmp = (int (*)(void *, void *)) offset_list_cmp;
@@ -370,7 +372,7 @@
 }
 
 void
-ripng_offset_clean ()
+ripng_offset_clean (void)
 {
   list_delete (ripng_offset_list_master);
 
diff --git a/ripngd/ripng_peer.c b/ripngd/ripng_peer.c
index 34f5ac6..1e58bb8 100644
--- a/ripngd/ripng_peer.c
+++ b/ripngd/ripng_peer.c
@@ -39,8 +39,8 @@
 /* Linked list of RIPng peer. */
 struct list *peer_list;
 
-struct ripng_peer *
-ripng_peer_new ()
+static struct ripng_peer *
+ripng_peer_new (void)
 {
   struct ripng_peer *new;
 
@@ -49,7 +49,7 @@
   return new;
 }
 
-void
+static void
 ripng_peer_free (struct ripng_peer *peer)
 {
   XFREE (MTYPE_RIPNG_PEER, peer);
@@ -86,7 +86,7 @@
 /* RIPng peer is timeout.
  * Garbage collector.
  **/
-int
+static int
 ripng_peer_timeout (struct thread *t)
 {
   struct ripng_peer *peer;
@@ -99,7 +99,7 @@
 }
 
 /* Get RIPng peer.  At the same time update timeout thread. */
-struct ripng_peer *
+static struct ripng_peer *
 ripng_peer_get (struct in6_addr *addr)
 {
   struct ripng_peer *peer;
@@ -153,7 +153,7 @@
 }
 
 /* Display peer uptime. */
-char *
+static char *
 ripng_peer_uptime (struct ripng_peer *peer, char *buf, size_t len)
 {
   time_t uptime;
@@ -206,7 +206,7 @@
     }
 }
 
-int
+static int
 ripng_peer_list_cmp (struct ripng_peer *p1, struct ripng_peer *p2)
 {
   return addr6_cmp(&p1->addr, &p2->addr) > 0;
diff --git a/ripngd/ripng_route.c b/ripngd/ripng_route.c
index 9c3c4f9..d4bf026 100644
--- a/ripngd/ripng_route.c
+++ b/ripngd/ripng_route.c
@@ -31,7 +31,7 @@
 #include "ripngd/ripngd.h"
 #include "ripngd/ripng_route.h"
 
-struct ripng_aggregate *
+static struct ripng_aggregate *
 ripng_aggregate_new ()
 {
   struct ripng_aggregate *new;
@@ -40,7 +40,7 @@
   return new;
 }
 
-void
+static void
 ripng_aggregate_free (struct ripng_aggregate *aggregate)
 {
   XFREE (MTYPE_RIPNG_AGGREGATE, aggregate);
diff --git a/ripngd/ripng_route.h b/ripngd/ripng_route.h
index db53f14..2f5b757 100644
--- a/ripngd/ripng_route.h
+++ b/ripngd/ripng_route.h
@@ -44,16 +44,11 @@
   u_short tag_out;
 };
 
-void
-ripng_aggregate_increment (struct route_node *rp, struct ripng_info *rinfo);
-
-void
-ripng_aggregate_decrement (struct route_node *rp, struct ripng_info *rinfo);
-
-int
-ripng_aggregate_add (struct prefix *p);
-
-int
-ripng_aggregate_delete (struct prefix *p);
+extern void ripng_aggregate_increment (struct route_node *rp,
+                                       struct ripng_info *rinfo);
+extern void ripng_aggregate_decrement (struct route_node *rp,
+                                       struct ripng_info *rinfo);
+extern int ripng_aggregate_add (struct prefix *p);
+extern int ripng_aggregate_delete (struct prefix *p);
 
 #endif /* _ZEBRA_RIPNG_ROUTE_H */
diff --git a/ripngd/ripng_routemap.c b/ripngd/ripng_routemap.c
index 1570c78..0f5cca3 100644
--- a/ripngd/ripng_routemap.c
+++ b/ripngd/ripng_routemap.c
@@ -43,7 +43,7 @@
 };
 
 
-int
+static int
 ripng_route_match_add (struct vty *vty, struct route_map_index *index,
 		       const char *command, const char *arg)
 {
@@ -65,7 +65,7 @@
   return CMD_SUCCESS;
 }
 
-int
+static int
 ripng_route_match_delete (struct vty *vty, struct route_map_index *index,
 			  const char *command, const char *arg)
 {
@@ -87,7 +87,7 @@
   return CMD_SUCCESS;
 }
 
-int
+static int
 ripng_route_set_add (struct vty *vty, struct route_map_index *index,
 		     const char *command, const char *arg)
 {
@@ -109,7 +109,7 @@
   return CMD_SUCCESS;
 }
 
-int
+static int
 ripng_route_set_delete (struct vty *vty, struct route_map_index *index,
 			const char *command, const char *arg)
 {
@@ -133,7 +133,7 @@
 
 /* `match metric METRIC' */
 /* Match function return 1 if match is success else return zero. */
-route_map_result_t
+static route_map_result_t
 route_match_metric (void *rule, struct prefix *prefix, 
 		    route_map_object_t type, void *object)
 {
@@ -154,7 +154,7 @@
 }
 
 /* Route map `match metric' match statement. `arg' is METRIC value */
-void *
+static void *
 route_match_metric_compile (const char *arg)
 {
   u_int32_t *metric;
@@ -170,14 +170,14 @@
 }
 
 /* Free route map's compiled `match metric' value. */
-void
+static void
 route_match_metric_free (void *rule)
 {
   XFREE (MTYPE_ROUTE_MAP_COMPILED, rule);
 }
 
 /* Route map commands for metric matching. */
-struct route_map_rule_cmd route_match_metric_cmd =
+static struct route_map_rule_cmd route_match_metric_cmd =
 {
   "metric",
   route_match_metric,
@@ -187,7 +187,7 @@
 
 /* `match interface IFNAME' */
 /* Match function return 1 if match is success else return zero. */
-route_map_result_t
+static route_map_result_t
 route_match_interface (void *rule, struct prefix *prefix,
 		       route_map_object_t type, void *object)
 {
@@ -214,19 +214,19 @@
 }
 
 /* Route map `match interface' match statement. `arg' is IFNAME value */
-void *
+static void *
 route_match_interface_compile (const char *arg)
 {
   return XSTRDUP (MTYPE_ROUTE_MAP_COMPILED, arg);
 }
 
-void
+static void
 route_match_interface_free (void *rule)
 {
   XFREE (MTYPE_ROUTE_MAP_COMPILED, rule);
 }
 
-struct route_map_rule_cmd route_match_interface_cmd =
+static struct route_map_rule_cmd route_match_interface_cmd =
 {
   "interface",
   route_match_interface,
@@ -236,7 +236,7 @@
 
 /* `match tag TAG' */
 /* Match function return 1 if match is success else return zero. */
-route_map_result_t
+static route_map_result_t
 route_match_tag (void *rule, struct prefix *prefix, 
 		    route_map_object_t type, void *object)
 {
@@ -258,7 +258,7 @@
 }
 
 /* Route map `match tag' match statement. `arg' is TAG value */
-void *
+static void *
 route_match_tag_compile (const char *arg)
 {
   u_short *tag;
@@ -270,14 +270,14 @@
 }
 
 /* Free route map's compiled `match tag' value. */
-void
+static void
 route_match_tag_free (void *rule)
 {
   XFREE (MTYPE_ROUTE_MAP_COMPILED, rule);
 }
 
 /* Route map commands for tag matching. */
-struct route_map_rule_cmd route_match_tag_cmd =
+static struct route_map_rule_cmd route_match_tag_cmd =
 {
   "tag",
   route_match_tag,
@@ -288,7 +288,7 @@
 /* `set metric METRIC' */
 
 /* Set metric to attribute. */
-route_map_result_t
+static route_map_result_t
 route_set_metric (void *rule, struct prefix *prefix, 
 		  route_map_object_t type, void *object)
 {
@@ -318,7 +318,7 @@
 }
 
 /* set metric compilation. */
-void *
+static void *
 route_set_metric_compile (const char *arg)
 {
   int len;
@@ -371,13 +371,13 @@
 }
 
 /* Free route map's compiled `set metric' value. */
-void
+static void
 route_set_metric_free (void *rule)
 {
   XFREE (MTYPE_ROUTE_MAP_COMPILED, rule);
 }
 
-struct route_map_rule_cmd route_set_metric_cmd = 
+static struct route_map_rule_cmd route_set_metric_cmd = 
 {
   "metric",
   route_set_metric,
@@ -388,7 +388,7 @@
 /* `set ipv6 next-hop local IP_ADDRESS' */
 
 /* Set nexthop to object.  ojbect must be pointer to struct attr. */
-route_map_result_t
+static route_map_result_t
 route_set_ipv6_nexthop_local (void *rule, struct prefix *prefix, 
 		      route_map_object_t type, void *object)
 {
@@ -410,7 +410,7 @@
 
 /* Route map `ipv6 nexthop local' compile function.  Given string is converted
    to struct in6_addr structure. */
-void *
+static void *
 route_set_ipv6_nexthop_local_compile (const char *arg)
 {
   int ret;
@@ -430,14 +430,14 @@
 }
 
 /* Free route map's compiled `ipv6 nexthop local' value. */
-void
+static void
 route_set_ipv6_nexthop_local_free (void *rule)
 {
   XFREE (MTYPE_ROUTE_MAP_COMPILED, rule);
 }
 
 /* Route map commands for ipv6 nexthop local set. */
-struct route_map_rule_cmd route_set_ipv6_nexthop_local_cmd =
+static struct route_map_rule_cmd route_set_ipv6_nexthop_local_cmd =
 {
   "ipv6 next-hop local",
   route_set_ipv6_nexthop_local,
@@ -448,7 +448,7 @@
 /* `set tag TAG' */
 
 /* Set tag to object.  ojbect must be pointer to struct attr. */
-route_map_result_t
+static route_map_result_t
 route_set_tag (void *rule, struct prefix *prefix, 
 		      route_map_object_t type, void *object)
 {
@@ -470,7 +470,7 @@
 
 /* Route map `tag' compile function.  Given string is converted
    to u_short. */
-void *
+static void *
 route_set_tag_compile (const char *arg)
 {
   u_short *tag;
@@ -482,14 +482,14 @@
 }
 
 /* Free route map's compiled `ip nexthop' value. */
-void
+static void
 route_set_tag_free (void *rule)
 {
   XFREE (MTYPE_ROUTE_MAP_COMPILED, rule);
 }
 
 /* Route map commands for tag set. */
-struct route_map_rule_cmd route_set_tag_cmd =
+static struct route_map_rule_cmd route_set_tag_cmd =
 {
   "tag",
   route_set_tag,
diff --git a/ripngd/ripng_zebra.c b/ripngd/ripng_zebra.c
index 1f9bee0..62185c0 100644
--- a/ripngd/ripng_zebra.c
+++ b/ripngd/ripng_zebra.c
@@ -89,7 +89,7 @@
 }
 
 /* Zebra route add and delete treatment. */
-int
+static int
 ripng_zebra_read_ipv6 (int command, struct zclient *zclient,
 		       zebra_size_t length)
 {
@@ -143,12 +143,12 @@
 }
 
 void
-ripng_zclient_reset ()
+ripng_zclient_reset (void)
 {
   zclient_reset (zclient);
 }
 
-int
+static int
 ripng_redistribute_unset (int type)
 {
   if (! zclient->redist[type])
@@ -170,14 +170,14 @@
   return (zclient->redist[type]);
 }
 
-void
+static void
 ripng_redistribute_metric_set (int type, int metric)
 {
   ripng->route_map[type].metric_config = 1;
   ripng->route_map[type].metric = metric;
 }
 
-int
+static int
 ripng_redistribute_metric_unset (int type)
 {
   ripng->route_map[type].metric_config = 0;
@@ -185,7 +185,7 @@
   return 0;
 }
 
-void
+static void
 ripng_redistribute_routemap_set (int type, const char *name)
 {
   if (ripng->route_map[type].name)
@@ -195,7 +195,7 @@
   ripng->route_map[type].map = route_map_lookup_by_name (name);
 }
 
-void
+static void
 ripng_redistribute_routemap_unset (int type)
 {
   if (ripng->route_map[type].name)
@@ -520,7 +520,7 @@
 }
 
 /* RIPng configuration write function. */
-int
+static int
 zebra_config_write (struct vty *vty)
 {
   if (! zclient->enable)
diff --git a/ripngd/ripngd.c b/ripngd/ripngd.c
index a8277fe..5e9bfc5 100644
--- a/ripngd/ripngd.c
+++ b/ripngd/ripngd.c
@@ -73,7 +73,7 @@
   struct in6_addr address;
 };
 
-int
+static int
 ripng_route_rte (struct ripng_info *rinfo)
 {
   return (rinfo->type == ZEBRA_ROUTE_RIPNG && rinfo->sub_type == RIPNG_ROUTE_RTE);
@@ -97,7 +97,7 @@
 }
 
 /* Create ripng socket. */
-int 
+static int 
 ripng_make_socket (void)
 {
   int ret;
@@ -222,7 +222,7 @@
 }
 
 /* Receive UDP RIPng packet from socket. */
-int
+static int
 ripng_recv_packet (int sock, u_char *buf, int bufsize,
 		   struct sockaddr_in6 *from, unsigned int *ifindex, 
 		   int *hoplimit)
@@ -318,7 +318,7 @@
 }
 
 /* RIPng next hop address RTE (Route Table Entry). */
-void
+static void
 ripng_nexthop_rte (struct rte *rte,
 		   struct sockaddr_in6 *from,
 		   struct ripng_nexthop *nexthop)
@@ -377,7 +377,7 @@
 }
 
 /* If ifp has same link-local address then return 1. */
-int
+static int
 ripng_lladdr_check (struct interface *ifp, struct in6_addr *addr)
 {
   struct listnode *node;
@@ -397,7 +397,7 @@
 }
 
 /* RIPng route garbage collect timer. */
-int
+static int
 ripng_garbage_collect (struct thread *t)
 {
   struct ripng_info *rinfo;
@@ -423,7 +423,7 @@
 }
 
 /* Timeout RIPng routes. */
-int
+static int
 ripng_timeout (struct thread *t)
 {
   struct ripng_info *rinfo;
@@ -460,7 +460,7 @@
   return 0;
 }
 
-void
+static void
 ripng_timeout_update (struct ripng_info *rinfo)
 {
   if (rinfo->metric != RIPNG_METRIC_INFINITY)
@@ -470,7 +470,7 @@
     }
 }
 
-int
+static int
 ripng_incoming_filter (struct prefix_ipv6 *p, struct ripng_interface *ri)
 {
   struct distribute *dist;
@@ -541,7 +541,7 @@
   return 0;
 }
 
-int
+static int
 ripng_outgoing_filter (struct prefix_ipv6 *p, struct ripng_interface *ri)
 {
   struct distribute *dist;
@@ -612,7 +612,7 @@
 }
 
 /* Process RIPng route according to RFC2080. */
-void
+static void
 ripng_route_process (struct rte *rte, struct sockaddr_in6 *from,
 		     struct ripng_nexthop *ripng_nexthop,
 		     struct interface *ifp)
@@ -1100,7 +1100,7 @@
 }
 
 /* RIP routing information. */
-void
+static void
 ripng_response_process (struct ripng_packet *packet, int size, 
 			struct sockaddr_in6 *from, struct interface *ifp,
 			int hoplimit)
@@ -1233,7 +1233,7 @@
 }
 
 /* Response to request message. */
-void
+static void
 ripng_request_process (struct ripng_packet *packet,int size, 
 		       struct sockaddr_in6 *from, struct interface *ifp)
 {
@@ -1320,7 +1320,7 @@
 }
 
 /* First entry point of reading RIPng packet. */
-int
+static int
 ripng_read (struct thread *thread)
 {
   int len;
@@ -1410,8 +1410,8 @@
 }
 
 /* Walk down the RIPng routing table then clear changed flag. */
-void
-ripng_clear_changed_flag ()
+static void
+ripng_clear_changed_flag (void)
 {
   struct route_node *rp;
   struct ripng_info *rinfo;
@@ -1424,7 +1424,7 @@
 
 /* Regular update of RIPng route.  Send all routing formation to RIPng
    enabled interface. */
-int
+static int
 ripng_update (struct thread *t)
 {
   struct listnode *node;
@@ -1484,7 +1484,7 @@
 }
 
 /* Triggered update interval timer. */
-int
+static int
 ripng_triggered_interval (struct thread *t)
 {
   ripng->t_triggered_interval = NULL;
@@ -1813,8 +1813,8 @@
 }
 
 /* Create new RIPng instance and set it to global variable. */
-int
-ripng_create ()
+static int
+ripng_create (void)
 {
   /* ripng should be NULL. */
   assert (ripng == NULL);
@@ -1880,7 +1880,7 @@
 }
 
 
-int
+static int
 ripng_update_jitter (int time)
 {
   return ((rand () % (time + 1)) - (time / 2));
@@ -1949,7 +1949,7 @@
     }
 }
 
-char *
+static char *
 ripng_route_subtype_print (struct ripng_info *rinfo)
 {
   static char str[3];
@@ -2102,8 +2102,6 @@
 {
   struct listnode *node;
   struct interface *ifp;
-  int ripng_network_write (struct vty *, int);
-  void ripng_redistribute_write (struct vty *, int);
 
   if (! ripng)
     return CMD_SUCCESS;
@@ -2607,7 +2605,7 @@
 }
 
 /* RIPng configuration write function. */
-int
+static int
 ripng_config_write (struct vty *vty)
 {
   int ripng_network_write (struct vty *, int);
@@ -2692,7 +2690,7 @@
   1,
 };
 
-void
+static void
 ripng_distribute_update (struct distribute *dist)
 {
   struct interface *ifp;
@@ -2765,7 +2763,7 @@
 }
 
 /* Update all interface's distribute list. */
-void
+static void
 ripng_distribute_update_all (struct prefix_list *notused)
 {
   struct interface *ifp;
@@ -2775,7 +2773,7 @@
     ripng_distribute_update_interface (ifp);
 }
 
-void
+static void
 ripng_distribute_update_all_wrapper (struct access_list *notused)
 {
   ripng_distribute_update_all(NULL);
@@ -2878,7 +2876,7 @@
   ripng_zclient_reset ();
 }
 
-void
+static void
 ripng_if_rmap_update (struct if_rmap *if_rmap)
 {
   struct interface *ifp;
@@ -2924,7 +2922,7 @@
     ripng_if_rmap_update (if_rmap);
 }
 
-void
+static void
 ripng_routemap_update_redistribute (void)
 {
   int i;
@@ -2940,7 +2938,7 @@
     }
 }
 
-void
+static void
 ripng_routemap_update (const char *unused)
 {
   struct interface *ifp;
diff --git a/ripngd/ripngd.h b/ripngd/ripngd.h
index b478e9b..ab06d81 100644
--- a/ripngd/ripngd.h
+++ b/ripngd/ripngd.h
@@ -23,6 +23,9 @@
 #ifndef _ZEBRA_RIPNG_RIPNGD_H
 #define _ZEBRA_RIPNG_RIPNGD_H
 
+#include <zclient.h>
+#include <vty.h>
+
 /* RIPng version and port number. */
 #define RIPNG_V1                         1
 #define RIPNG_PORT_DEFAULT             521
@@ -340,60 +343,79 @@
 extern struct thread_master *master;
 
 /* Prototypes. */
-void ripng_init ();
-void ripng_reset ();
-void ripng_clean ();
-void ripng_clean_network ();
-void ripng_interface_clean ();
-void ripng_interface_reset ();
-void ripng_passive_interface_clean ();
-void ripng_if_init ();
-void ripng_route_map_init ();
-void ripng_route_map_reset ();
-void ripng_terminate ();
+extern void ripng_init (void);
+extern void ripng_reset (void);
+extern void ripng_clean (void);
+extern void ripng_clean_network (void);
+extern void ripng_interface_clean (void);
+extern void ripng_interface_reset (void);
+extern void ripng_passive_interface_clean (void);
+extern void ripng_if_init (void);
+extern void ripng_route_map_init (void);
+extern void ripng_route_map_reset (void);
+extern void ripng_terminate (void);
  /* zclient_init() is done by ripng_zebra.c:zebra_init() */
-void zebra_init ();
-void ripng_zclient_start ();
-void ripng_zclient_reset ();
-void ripng_offset_init ();
+extern void zebra_init (void);
+extern void ripng_zclient_start (void);
+extern void ripng_zclient_reset (void);
+extern void ripng_offset_init (void);
 
-int config_write_ripng_offset_list (struct vty *);
+extern int config_write_ripng_offset_list (struct vty *);
 
-void ripng_peer_init ();
-void ripng_peer_update (struct sockaddr_in6 *, u_char);
-void ripng_peer_bad_route (struct sockaddr_in6 *);
-void ripng_peer_bad_packet (struct sockaddr_in6 *);
-void ripng_peer_display (struct vty *);
-struct ripng_peer *ripng_peer_lookup (struct in6_addr *);
-struct ripng_peer *ripng_peer_lookup_next (struct in6_addr *);
+extern void ripng_peer_init (void);
+extern void ripng_peer_update (struct sockaddr_in6 *, u_char);
+extern void ripng_peer_bad_route (struct sockaddr_in6 *);
+extern void ripng_peer_bad_packet (struct sockaddr_in6 *);
+extern void ripng_peer_display (struct vty *);
+extern struct ripng_peer *ripng_peer_lookup (struct in6_addr *);
+extern struct ripng_peer *ripng_peer_lookup_next (struct in6_addr *);
 
-int ripng_offset_list_apply_in (struct prefix_ipv6 *, struct interface *, u_char *);
-int ripng_offset_list_apply_out (struct prefix_ipv6 *, struct interface *, u_char *);
-void ripng_offset_clean ();
+extern int ripng_offset_list_apply_in (struct prefix_ipv6 *,
+                                       struct interface *, u_char *);
+extern int ripng_offset_list_apply_out (struct prefix_ipv6 *,
+                                        struct interface *, u_char *);
+extern void ripng_offset_clean (void);
 
-struct ripng_info * ripng_info_new ();
-void ripng_info_free (struct ripng_info *rinfo);
-void ripng_event (enum ripng_event, int);
-int ripng_request (struct interface *ifp);
-void ripng_redistribute_add (int, int, struct prefix_ipv6 *, unsigned int,
-			     struct in6_addr *);
-void ripng_redistribute_delete (int, int, struct prefix_ipv6 *, unsigned int);
-void ripng_redistribute_withdraw (int type);
+extern struct ripng_info * ripng_info_new (void);
+extern void ripng_info_free (struct ripng_info *rinfo);
+extern void ripng_event (enum ripng_event, int);
+extern int ripng_request (struct interface *ifp);
+extern void ripng_redistribute_add (int, int, struct prefix_ipv6 *,
+                                    unsigned int, struct in6_addr *);
+extern void ripng_redistribute_delete (int, int, struct prefix_ipv6 *,
+                                       unsigned int);
+extern void ripng_redistribute_withdraw (int type);
 
-void ripng_distribute_update_interface (struct interface *);
-void ripng_if_rmap_update_interface (struct interface *);
+extern void ripng_distribute_update_interface (struct interface *);
+extern void ripng_if_rmap_update_interface (struct interface *);
 
-void ripng_zebra_ipv6_add (struct prefix_ipv6 *p, struct in6_addr *nexthop, unsigned int ifindex, u_char metric);
-void ripng_zebra_ipv6_delete (struct prefix_ipv6 *p, struct in6_addr *nexthop, unsigned int ifindex);
+extern void ripng_zebra_ipv6_add (struct prefix_ipv6 *p,
+                                  struct in6_addr *nexthop,
+                                  unsigned int ifindex, u_char metric);
+extern void ripng_zebra_ipv6_delete (struct prefix_ipv6 *p,
+                                     struct in6_addr *nexthop,
+                                     unsigned int ifindex);
 
-void ripng_redistribute_clean ();
+extern void ripng_redistribute_clean (void);
+extern int ripng_redistribute_check (int);
+extern void ripng_redistribute_write (struct vty *, int);
 
-int ripng_write_rte (int num, struct stream *s, struct prefix_ipv6 *p,
-		     struct in6_addr *nexthop, u_int16_t tag, u_char metric);
-int ripng_send_packet (caddr_t buf, int bufsize, struct sockaddr_in6 *to, 
-		       struct interface *ifp);
+extern int ripng_write_rte (int num, struct stream *s, struct prefix_ipv6 *p,
+                            struct in6_addr *nexthop,
+                            u_int16_t tag, u_char metric);
+extern int ripng_send_packet (caddr_t buf, int bufsize,
+                              struct sockaddr_in6 *to, struct interface *ifp);
 
-void ripng_packet_dump (struct ripng_packet *packet, int size, const char *sndrcv);
+extern void ripng_packet_dump (struct ripng_packet *packet, int size,
+                               const char *sndrcv);
 
+extern int ripng_interface_up (int command, struct zclient *, zebra_size_t);
+extern int ripng_interface_down (int command, struct zclient *, zebra_size_t);
+extern int ripng_interface_add (int command, struct zclient *, zebra_size_t);
+extern int ripng_interface_delete (int command, struct zclient *, zebra_size_t);
+extern int ripng_interface_address_add (int command, struct zclient *, zebra_size_t);
+extern int ripng_interface_address_delete (int command, struct zclient *, zebra_size_t);
+
+extern int ripng_network_write (struct vty *, int);
 
 #endif /* _ZEBRA_RIPNG_RIPNGD_H */
