diff --git a/lib/memtypes.c b/lib/memtypes.c
index 6df1448..3b9345d 100644
--- a/lib/memtypes.c
+++ b/lib/memtypes.c
@@ -234,6 +234,7 @@
   { MTYPE_OSPF6_NEXTHOP,      "OSPF6 nexthop"			},
   { MTYPE_OSPF6_EXTERNAL_INFO,"OSPF6 ext. info"			},
   { MTYPE_OSPF6_OTHER,        "OSPF6 other"			},
+  { MTYPE_OSPF6_DISTANCE,     "OSPF6 distance"			},
   { -1, NULL },
 };
 
diff --git a/ospf6d/ospf6_top.c b/ospf6d/ospf6_top.c
index 7fffba8..1288bc7 100644
--- a/ospf6d/ospf6_top.c
+++ b/ospf6d/ospf6_top.c
@@ -150,6 +150,8 @@
 
   o->ref_bandwidth = OSPF6_REFERENCE_BANDWIDTH;
 
+  o->distance_table = route_table_init ();
+
   return o;
 }
 
@@ -176,6 +178,9 @@
   ospf6_route_table_delete (o->external_table);
   route_table_finish (o->external_id_table);
 
+  ospf6_distance_reset (o);
+  route_table_finish (o->distance_table);
+
   XFREE (MTYPE_OSPF6_TOP, o);
 }
 
@@ -401,6 +406,435 @@
   return CMD_SUCCESS;
 }
 
+DEFUN (ospf6_distance,
+       ospf6_distance_cmd,
+       "distance <1-255>",
+       NO_STR
+       "Define an administrative distance\n"
+       "OSPF6 Administrative distance\n")
+{
+  struct ospf6 *o;
+
+  o = (struct ospf6 *) vty->index;
+
+  o->distance_all = atoi (argv[0]);
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_ospf6_distance,
+       no_ospf6_distance_cmd,
+       "no distance <1-255>",
+       NO_STR
+       "Define an administrative distance\n"
+       "OSPF6 Administrative distance\n")
+{
+  struct ospf6 *o;
+
+  o = (struct ospf6 *) vty->index;
+
+  o->distance_all = 0;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_ospf6_distance_ospf6,
+       no_ospf6_distance_ospf6_cmd,
+       "no distance ospf6",
+       NO_STR
+       "Define an administrative distance\n"
+       "OSPF6 Administrative distance\n"
+       "OSPF6 Distance\n")
+{
+  struct ospf6 *o;
+
+  o = (struct ospf6 *) vty->index;
+
+  o->distance_intra = 0;
+  o->distance_inter = 0;
+  o->distance_external = 0;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (ospf6_distance_ospf6_intra,
+       ospf6_distance_ospf6_intra_cmd,
+       "distance ospf6 intra-area <1-255>",
+       "Define an administrative distance\n"
+       "OSPF6 Administrative distance\n"
+       "Intra-area routes\n"
+       "Distance for intra-area routes\n")
+{
+  struct ospf6 *o;
+
+  o = (struct ospf6 *) vty->index;
+
+  o->distance_intra = atoi (argv[0]);
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (ospf6_distance_ospf6_intra_inter,
+       ospf6_distance_ospf6_intra_inter_cmd,
+       "distance ospf6 intra-area <1-255> inter-area <1-255>",
+       "Define an administrative distance\n"
+       "OSPF6 Administrative distance\n"
+       "Intra-area routes\n"
+       "Distance for intra-area routes\n"
+       "Inter-area routes\n"
+       "Distance for inter-area routes\n")
+{
+  struct ospf6 *o;
+
+  o = (struct ospf6 *) vty->index;
+
+  o->distance_intra = atoi (argv[0]);
+  o->distance_inter = atoi (argv[1]);
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (ospf6_distance_ospf6_intra_external,
+       ospf6_distance_ospf6_intra_external_cmd,
+       "distance ospf6 intra-area <1-255> external <1-255>",
+       "Define an administrative distance\n"
+       "OSPF6 Administrative distance\n"
+       "Intra-area routes\n"
+       "Distance for intra-area routes\n"
+       "External routes\n"
+       "Distance for external routes\n")
+{
+  struct ospf6 *o;
+
+  o = (struct ospf6 *) vty->index;
+
+  o->distance_intra = atoi (argv[0]);
+  o->distance_external = atoi (argv[1]);
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (ospf6_distance_ospf6_intra_inter_external,
+       ospf6_distance_ospf6_intra_inter_external_cmd,
+       "distance ospf6 intra-area <1-255> inter-area <1-255> external <1-255>",
+       "Define an administrative distance\n"
+       "OSPF6 Administrative distance\n"
+       "Intra-area routes\n"
+       "Distance for intra-area routes\n"
+       "Inter-area routes\n"
+       "Distance for inter-area routes\n"
+       "External routes\n"
+       "Distance for external routes\n")
+{
+  struct ospf6 *o;
+
+  o = (struct ospf6 *) vty->index;
+
+  o->distance_intra = atoi (argv[0]);
+  o->distance_inter = atoi (argv[1]);
+  o->distance_external = atoi (argv[2]);
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (ospf6_distance_ospf6_intra_external_inter,
+       ospf6_distance_ospf6_intra_external_inter_cmd,
+       "distance ospf6 intra-area <1-255> external <1-255> inter-area <1-255>",
+       "Define an administrative distance\n"
+       "OSPF6 Administrative distance\n"
+       "Intra-area routes\n"
+       "Distance for intra-area routes\n"
+       "External routes\n"
+       "Distance for external routes\n"
+       "Inter-area routes\n"
+       "Distance for inter-area routes\n")
+{
+  struct ospf6 *o;
+
+  o = (struct ospf6 *) vty->index;
+
+  o->distance_intra = atoi (argv[0]);
+  o->distance_external = atoi (argv[1]);
+  o->distance_inter = atoi (argv[2]);
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (ospf6_distance_ospf6_inter,
+       ospf6_distance_ospf6_inter_cmd,
+       "distance ospf6 inter-area <1-255>",
+       "Define an administrative distance\n"
+       "OSPF6 Administrative distance\n"
+       "Inter-area routes\n"
+       "Distance for inter-area routes\n")
+{
+  struct ospf6 *o;
+
+  o = (struct ospf6 *) vty->index;
+
+  o->distance_inter = atoi (argv[0]);
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (ospf6_distance_ospf6_inter_intra,
+       ospf6_distance_ospf6_inter_intra_cmd,
+       "distance ospf6 inter-area <1-255> intra-area <1-255>",
+       "Define an administrative distance\n"
+       "OSPF6 Administrative distance\n"
+       "Inter-area routes\n"
+       "Distance for inter-area routes\n"
+       "Intra-area routes\n"
+       "Distance for intra-area routes\n")
+{
+  struct ospf6 *o;
+
+  o = (struct ospf6 *) vty->index;
+
+  o->distance_inter = atoi (argv[0]);
+  o->distance_intra = atoi (argv[1]);
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (ospf6_distance_ospf6_inter_external,
+       ospf6_distance_ospf6_inter_external_cmd,
+       "distance ospf6 inter-area <1-255> external <1-255>",
+       "Define an administrative distance\n"
+       "OSPF6 Administrative distance\n"
+       "Inter-area routes\n"
+       "Distance for inter-area routes\n"
+       "External routes\n"
+       "Distance for external routes\n")
+{
+  struct ospf6 *o;
+
+  o = (struct ospf6 *) vty->index;
+
+  o->distance_inter = atoi (argv[0]);
+  o->distance_external = atoi (argv[1]);
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (ospf6_distance_ospf6_inter_intra_external,
+       ospf6_distance_ospf6_inter_intra_external_cmd,
+       "distance ospf6 inter-area <1-255> intra-area <1-255> external <1-255>",
+       "Define an administrative distance\n"
+       "OSPF6 Administrative distance\n"
+       "Inter-area routes\n"
+       "Distance for inter-area routes\n"
+       "Intra-area routes\n"
+       "Distance for intra-area routes\n"
+       "External routes\n"
+       "Distance for external routes\n")
+{
+  struct ospf6 *o;
+
+  o = (struct ospf6 *) vty->index;
+
+  o->distance_inter = atoi (argv[0]);
+  o->distance_intra = atoi (argv[1]);
+  o->distance_external = atoi (argv[2]);
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (ospf6_distance_ospf6_inter_external_intra,
+       ospf6_distance_ospf6_inter_external_intra_cmd,
+       "distance ospf6 inter-area <1-255> external <1-255> intra-area <1-255>",
+       "Define an administrative distance\n"
+       "OSPF6 Administrative distance\n"
+       "Inter-area routes\n"
+       "Distance for inter-area routes\n"
+       "External routes\n"
+       "Distance for external routes\n"
+       "Intra-area routes\n"
+       "Distance for intra-area routes\n")
+{
+  struct ospf6 *o;
+
+  o = (struct ospf6 *) vty->index;
+
+  o->distance_inter = atoi (argv[0]);
+  o->distance_external = atoi (argv[1]);
+  o->distance_intra = atoi (argv[2]);
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (ospf6_distance_ospf6_external,
+       ospf6_distance_ospf6_external_cmd,
+       "distance ospf6 external <1-255>",
+       "Define an administrative distance\n"
+       "OSPF6 Administrative distance\n"
+       "External routes\n"
+       "Distance for external routes\n")
+{
+  struct ospf6 *o;
+
+  o = (struct ospf6 *) vty->index;
+
+  o->distance_external = atoi (argv[0]);
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (ospf6_distance_ospf6_external_intra,
+       ospf6_distance_ospf6_external_intra_cmd,
+       "distance ospf6 external <1-255> intra-area <1-255>",
+       "Define an administrative distance\n"
+       "OSPF6 Administrative distance\n"
+       "External routes\n"
+       "Distance for external routes\n"
+       "Intra-area routes\n"
+       "Distance for intra-area routes\n")
+{
+  struct ospf6 *o;
+
+  o = (struct ospf6 *) vty->index;
+
+  o->distance_external = atoi (argv[0]);
+  o->distance_intra = atoi (argv[1]);
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (ospf6_distance_ospf6_external_inter,
+       ospf6_distance_ospf6_external_inter_cmd,
+       "distance ospf6 external <1-255> inter-area <1-255>",
+       "Define an administrative distance\n"
+       "OSPF6 Administrative distance\n"
+       "External routes\n"
+       "Distance for external routes\n"
+       "Inter-area routes\n"
+       "Distance for inter-area routes\n")
+{
+  struct ospf6 *o;
+
+  o = (struct ospf6 *) vty->index;
+
+  o->distance_external = atoi (argv[0]);
+  o->distance_inter = atoi (argv[1]);
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (ospf6_distance_ospf6_external_intra_inter,
+       ospf6_distance_ospf6_external_intra_inter_cmd,
+       "distance ospf6 external <1-255> intra-area <1-255> inter-area <1-255>",
+       "Define an administrative distance\n"
+       "OSPF6 Administrative distance\n"
+       "External routes\n"
+       "Distance for external routes\n"
+       "Intra-area routes\n"
+       "Distance for intra-area routes\n"
+       "Inter-area routes\n"
+       "Distance for inter-area routes\n")
+{
+  struct ospf6 *o;
+
+  o = (struct ospf6 *) vty->index;
+
+  o->distance_external = atoi (argv[0]);
+  o->distance_intra = atoi (argv[1]);
+  o->distance_inter = atoi (argv[2]);
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (ospf6_distance_ospf6_external_inter_intra,
+       ospf6_distance_ospf6_external_inter_intra_cmd,
+       "distance ospf6 external <1-255> inter-area <1-255> intra-area <1-255>",
+       "Define an administrative distance\n"
+       "OSPF6 Administrative distance\n"
+       "External routes\n"
+       "Distance for external routes\n"
+       "Inter-area routes\n"
+       "Distance for inter-area routes\n"
+       "Intra-area routes\n"
+       "Distance for intra-area routes\n")
+{
+  struct ospf6 *o;
+
+  o = (struct ospf6 *) vty->index;
+
+  o->distance_external = atoi (argv[0]);
+  o->distance_inter = atoi (argv[1]);
+  o->distance_intra = atoi (argv[2]);
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (ospf6_distance_source,
+       ospf6_distance_source_cmd,
+       "distance <1-255> X:X::X:X/M",
+       "Administrative distance\n"
+       "Distance value\n"
+       "IP source prefix\n")
+{
+  struct ospf6 *o;
+
+  o = (struct ospf6 *) vty->index;
+
+  ospf6_distance_set (vty, o, argv[0], argv[1], NULL);
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_ospf6_distance_source,
+       no_ospf6_distance_source_cmd,
+       "no distance <1-255> X:X::X:X/M",
+       NO_STR
+       "Administrative distance\n"
+       "Distance value\n"
+       "IP source prefix\n")
+{
+  struct ospf6 *o;
+
+  o = (struct ospf6 *) vty->index;
+  
+  /* XXX: distance arg seems to be irrelevant */
+  ospf6_distance_unset (vty, o, argv[1], NULL);
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (ospf6_distance_source_access_list,
+       ospf6_distance_source_access_list_cmd,
+       "distance <1-255> X:X::X:X/M WORD",
+       "Administrative distance\n"
+       "Distance value\n"
+       "IP source prefix\n"
+       "Access list name\n")
+{
+  struct ospf6 *o;
+
+  o = (struct ospf6 *) vty->index;
+
+  ospf6_distance_set (vty, o, argv[0], argv[1], argv[2]);
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_ospf6_distance_source_access_list,
+       no_ospf6_distance_source_access_list_cmd,
+       "no distance <1-255> X:X::X:X/M WORD",
+       NO_STR
+       "Administrative distance\n"
+       "Distance value\n"
+       "IP source prefix\n"
+       "Access list name\n")
+{
+  struct ospf6 *o;
+
+  o = (struct ospf6 *) vty->index;
+
+  ospf6_distance_unset (vty, o, argv[1], argv[2]);
+
+  return CMD_SUCCESS;
+}
+
 DEFUN (ospf6_interface_area,
        ospf6_interface_area_cmd,
        "interface IFNAME area A.B.C.D",
@@ -864,6 +1298,43 @@
     return;
 }
 
+static int
+ospf6_distance_config_write (struct vty *vty)
+{
+  struct route_node *rn;
+  struct ospf6_distance *odistance;
+
+  if (ospf6->distance_all)
+    vty_out (vty, " distance %d%s", ospf6->distance_all, VTY_NEWLINE);
+
+  if (ospf6->distance_intra
+      || ospf6->distance_inter
+      || ospf6->distance_external)
+    {
+      vty_out (vty, " distance ospf6");
+
+      if (ospf6->distance_intra)
+        vty_out (vty, " intra-area %d", ospf6->distance_intra);
+      if (ospf6->distance_inter)
+        vty_out (vty, " inter-area %d", ospf6->distance_inter);
+      if (ospf6->distance_external)
+        vty_out (vty, " external %d", ospf6->distance_external);
+
+      vty_out (vty, "%s", VTY_NEWLINE);
+    }
+
+  for (rn = route_top (ospf6->distance_table); rn; rn = route_next (rn))
+    if ((odistance = rn->info) != NULL)
+      {
+        char pstr[128];
+        vty_out (vty, " distance %d %s %s%s", odistance->distance,
+                 prefix2str (&rn->p, pstr, sizeof(pstr)),
+                 odistance->access_list ? odistance->access_list : "",
+                 VTY_NEWLINE);
+      }
+  return 0;
+}
+
 /* OSPF configuration write function. */
 static int
 config_write_ospf6 (struct vty *vty)
@@ -899,6 +1370,7 @@
   ospf6_redistribute_config_write (vty);
   ospf6_area_config_write (vty);
   ospf6_spf_config_write (vty);
+  ospf6_distance_config_write (vty);
 
   for (ALL_LIST_ELEMENTS_RO (ospf6->area_list, j, oa))
     {
@@ -963,6 +1435,30 @@
   install_element (OSPF6_NODE, &ospf6_stub_router_shutdown_cmd);
   install_element (OSPF6_NODE, &no_ospf6_stub_router_shutdown_cmd);
   */
+
+  install_element (OSPF6_NODE, &ospf6_distance_cmd);
+  install_element (OSPF6_NODE, &no_ospf6_distance_cmd);
+  install_element (OSPF6_NODE, &no_ospf6_distance_ospf6_cmd);
+  install_element (OSPF6_NODE, &ospf6_distance_ospf6_intra_cmd);
+  install_element (OSPF6_NODE, &ospf6_distance_ospf6_intra_inter_cmd);
+  install_element (OSPF6_NODE, &ospf6_distance_ospf6_intra_external_cmd);
+  install_element (OSPF6_NODE, &ospf6_distance_ospf6_intra_inter_external_cmd);
+  install_element (OSPF6_NODE, &ospf6_distance_ospf6_intra_external_inter_cmd);
+  install_element (OSPF6_NODE, &ospf6_distance_ospf6_inter_cmd);
+  install_element (OSPF6_NODE, &ospf6_distance_ospf6_inter_intra_cmd);
+  install_element (OSPF6_NODE, &ospf6_distance_ospf6_inter_external_cmd);
+  install_element (OSPF6_NODE, &ospf6_distance_ospf6_inter_intra_external_cmd);
+  install_element (OSPF6_NODE, &ospf6_distance_ospf6_inter_external_intra_cmd);
+  install_element (OSPF6_NODE, &ospf6_distance_ospf6_external_cmd);
+  install_element (OSPF6_NODE, &ospf6_distance_ospf6_external_intra_cmd);
+  install_element (OSPF6_NODE, &ospf6_distance_ospf6_external_inter_cmd);
+  install_element (OSPF6_NODE, &ospf6_distance_ospf6_external_intra_inter_cmd);
+  install_element (OSPF6_NODE, &ospf6_distance_ospf6_external_inter_intra_cmd);
+
+  install_element (OSPF6_NODE, &ospf6_distance_source_cmd);
+  install_element (OSPF6_NODE, &no_ospf6_distance_source_cmd);
+  install_element (OSPF6_NODE, &ospf6_distance_source_access_list_cmd);
+  install_element (OSPF6_NODE, &no_ospf6_distance_source_access_list_cmd);
 }
 
 
diff --git a/ospf6d/ospf6_top.h b/ospf6d/ospf6_top.h
index d6f4bf0..97fac0d 100644
--- a/ospf6d/ospf6_top.h
+++ b/ospf6d/ospf6_top.h
@@ -82,6 +82,14 @@
   struct thread *maxage_remover;
 
   u_int32_t ref_bandwidth;
+
+  /* Distance parameters */
+  u_char distance_all;
+  u_char distance_intra;
+  u_char distance_inter;
+  u_char distance_external;
+
+  struct route_table *distance_table;
 };
 
 #define OSPF6_DISABLED    0x01
@@ -97,5 +105,3 @@
 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 c8f20d8..1f0daa1 100644
--- a/ospf6d/ospf6_zebra.c
+++ b/ospf6d/ospf6_zebra.c
@@ -477,6 +477,8 @@
   SET_FLAG (api.message, ZAPI_MESSAGE_METRIC);
   api.metric = (request->path.metric_type == 2 ?
                 request->path.cost_e2 : request->path.cost);
+  SET_FLAG (api.message, ZAPI_MESSAGE_DISTANCE);
+  api.distance = ospf6_distance_apply (request, ospf6);
 
   dest = (struct prefix_ipv6 *) &request->prefix;
   if (type == REM)
@@ -579,6 +581,147 @@
   zclient_send_requests (zclient, VRF_DEFAULT);
 }
 
+static struct ospf6_distance *
+ospf6_distance_new (void)
+{
+  return XCALLOC (MTYPE_OSPF6_DISTANCE, sizeof (struct ospf6_distance));
+}
+
+static void
+ospf6_distance_free (struct ospf6_distance *odistance)
+{
+  XFREE (MTYPE_OSPF6_DISTANCE, odistance);
+}
+
+int
+ospf6_distance_set (struct vty *vty, struct ospf6 *o,
+                    const char *distance_str,
+                    const char *ip_str,
+                    const char *access_list_str)
+{
+  int ret;
+  struct prefix_ipv6 p;
+  u_char distance;
+  struct route_node *rn;
+  struct ospf6_distance *odistance;
+
+  ret = str2prefix_ipv6 (ip_str, &p);
+  if (ret == 0)
+    {
+      vty_out (vty, "Malformed prefix%s", VTY_NEWLINE);
+      return CMD_WARNING;
+    }
+
+  distance = atoi (distance_str);
+
+  /* Get OSPF6 distance node. */
+  rn = route_node_get (o->distance_table, (struct prefix *) &p);
+  if (rn->info)
+    {
+      odistance = rn->info;
+      route_unlock_node (rn);
+    }
+  else
+    {
+      odistance = ospf6_distance_new ();
+      rn->info = odistance;
+    }
+
+  /* Set distance value. */
+  odistance->distance = distance;
+
+  /*Reset access-list configuration. */
+  if (odistance->access_list)
+    {
+      free (odistance->access_list);
+      odistance->access_list = NULL;
+    }
+  if (access_list_str)
+    odistance->access_list = strdup (access_list_str);
+
+  return CMD_SUCCESS;
+}
+
+int
+ospf6_distance_unset (struct vty *vty, struct ospf6 *o,
+                      const char *ip_str,
+                      const char *access_list_str)
+{
+  int ret;
+  struct prefix_ipv6 p;
+  struct route_node *rn;
+  struct ospf6_distance *odistance;
+
+  ret = str2prefix_ipv6 (ip_str, &p);
+  if (ret == 0)
+    {
+      vty_out (vty, "Malformed prefix%s", VTY_NEWLINE);
+      return CMD_WARNING;
+    }
+
+  rn = route_node_lookup (o->distance_table, (struct prefix *) &p);
+  if (!rn)
+    {
+      vty_out (vty, "Cant't find specified prefix%s", VTY_NEWLINE);
+      return CMD_WARNING;
+    }
+
+  odistance = rn->info;
+
+  if (odistance->access_list)
+    free (odistance->access_list);
+  ospf6_distance_free (odistance);
+
+  rn->info = NULL;
+  route_unlock_node (rn);
+  route_unlock_node (rn);
+
+  return CMD_SUCCESS;
+}
+
+void
+ospf6_distance_reset (struct ospf6 *o)
+{
+  struct route_node *rn;
+  struct ospf6_distance *odistance;
+
+  for (rn = route_top (o->distance_table); rn; rn = route_next (rn))
+    if ((odistance = rn->info) != NULL)
+      {
+        if (odistance->access_list)
+          free (odistance->access_list);
+        ospf6_distance_free (odistance);
+        rn->info = NULL;
+        route_unlock_node (rn);
+      }
+}
+
+u_char
+ospf6_distance_apply (struct ospf6_route *or, struct ospf6 *o)
+{
+
+  if (o == NULL)
+    return 0;
+
+  if (o->distance_intra)
+    if (or->path.type == OSPF6_PATH_TYPE_INTRA)
+      return o->distance_intra;
+
+  if (o->distance_inter)
+    if (or->path.type == OSPF6_PATH_TYPE_INTER)
+      return o->distance_inter;
+
+  if (o->distance_external)
+    if(or->path.type == OSPF6_PATH_TYPE_EXTERNAL1
+       || or->path.type == OSPF6_PATH_TYPE_EXTERNAL2)
+      return o->distance_external;
+
+  if (o->distance_all)
+    return o->distance_all;
+
+  return 0;
+}
+
 void
 ospf6_zebra_init (struct thread_master *master)
 {
diff --git a/ospf6d/ospf6_zebra.h b/ospf6d/ospf6_zebra.h
index 05694d3..51eb9d7 100644
--- a/ospf6d/ospf6_zebra.h
+++ b/ospf6d/ospf6_zebra.h
@@ -23,6 +23,7 @@
 #define OSPF6_ZEBRA_H
 
 #include "zclient.h"
+#include "ospf6_top.h"
 
 /* Debug option */
 extern unsigned char conf_debug_ospf6_zebra;
@@ -35,6 +36,16 @@
 #define IS_OSPF6_DEBUG_ZEBRA(e) \
   (conf_debug_ospf6_zebra & OSPF6_DEBUG_ZEBRA_ ## e)
 
+/* OSPF6 distance */
+struct ospf6_distance
+{
+  /* Distance value for the IP source prefix */
+  u_char distance;
+
+  /* Name of the access-list to be matched */
+  char *access_list;
+};
+
 extern struct zclient *zclient;
 
 extern void ospf6_zebra_route_update_add (struct ospf6_route *request);
@@ -44,6 +55,15 @@
 extern void ospf6_zebra_no_redistribute (int);
 #define ospf6_zebra_is_redistribute(type) \
     vrf_bitmap_check (zclient->redist[type], VRF_DEFAULT)
+
+extern void ospf6_distance_reset (struct ospf6 *);
+extern u_char ospf6_distance_apply (struct ospf6_route *,
+                                    struct ospf6 *);
+extern int ospf6_distance_set (struct vty *, struct ospf6 *, const char *,
+                               const char *, const char *);
+extern int ospf6_distance_unset (struct vty *, struct ospf6 *, const char *,
+                                 const char *);
+
 extern void ospf6_zebra_init(struct thread_master *);
 
 extern int config_write_ospf6_debug_zebra (struct vty *vty);
