summaryrefslogtreecommitdiff
path: root/ospf6d/ospf6d.c
diff options
context:
space:
mode:
authorhasso <hasso>2004-05-18 18:57:06 +0000
committerhasso <hasso>2004-05-18 18:57:06 +0000
commit508e53e2eef3eefba4c1aa771529027fd4486ea8 (patch)
tree0e25e1b344a7b8e2c4551cfcb74d5a011dd0865d /ospf6d/ospf6d.c
parent6708fa3c3e6aef369be13f3915698f407107cae2 (diff)
Ospf6d merge from Zebra repository with added privs stuff and merged
zclient changes.
Diffstat (limited to 'ospf6d/ospf6d.c')
-rw-r--r--ospf6d/ospf6d.c1671
1 files changed, 1056 insertions, 615 deletions
diff --git a/ospf6d/ospf6d.c b/ospf6d/ospf6d.c
index e83e1eab..362d6794 100644
--- a/ospf6d/ospf6d.c
+++ b/ospf6d/ospf6d.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 1999 Yasuhiro Ohara
+ * Copyright (C) 2003 Yasuhiro Ohara
*
* This file is part of GNU Zebra.
*
@@ -19,173 +19,132 @@
* Boston, MA 02111-1307, USA.
*/
-#include "ospf6d.h"
+#include <zebra.h>
-#include "ospf6_damp.h"
+#include "thread.h"
+#include "linklist.h"
+#include "vty.h"
+#include "command.h"
-/* global ospf6d variable */
-int ospf6_sock;
-list iflist;
-list nexthoplist = NULL;
-struct sockaddr_in6 allspfrouters6;
-struct sockaddr_in6 alldrouters6;
-char *recent_reason; /* set by ospf6_lsa_check_recent () */
-int proctitle_mode = 0;
+#include "ospf6d.h"
+#include "ospf6_proto.h"
+#include "ospf6_network.h"
+#include "ospf6_lsa.h"
+#include "ospf6_lsdb.h"
+#include "ospf6_message.h"
+#include "ospf6_route.h"
+#include "ospf6_zebra.h"
+#include "ospf6_spf.h"
+#include "ospf6_top.h"
+#include "ospf6_area.h"
+#include "ospf6_interface.h"
+#include "ospf6_neighbor.h"
+#include "ospf6_intra.h"
+#include "ospf6_asbr.h"
char ospf6_daemon_version[] = OSPF6_DAEMON_VERSION;
-
-#define TIMER_SEC_MICRO 1000000
-
void
-ospf6_timeval_sub (const struct timeval *t1, const struct timeval *t2,
- struct timeval *result)
+ospf6_debug ()
+{
+}
+
+static struct route_node *
+_route_next_until (struct route_node *node, struct route_node *limit)
{
- long usec, movedown = 0;
+ struct route_node *next;
+ struct route_node *start;
+
+ /* Node may be deleted from route_unlock_node so we have to preserve
+ next node's pointer. */
- if (t1->tv_sec < t2->tv_sec ||
- (t1->tv_sec == t2->tv_sec && t1->tv_usec < t2->tv_usec))
+ if (node->l_left)
{
- result->tv_sec = 0;
- result->tv_usec = 0;
- return;
+ next = node->l_left;
+ if (next == limit)
+ {
+ route_unlock_node (node);
+ return NULL;
+ }
+ route_lock_node (next);
+ route_unlock_node (node);
+ return next;
}
-
- if (t1->tv_usec < t2->tv_usec)
+ if (node->l_right)
{
- usec = t1->tv_usec + TIMER_SEC_MICRO;
- movedown++;
+ next = node->l_right;
+ if (next == limit)
+ {
+ route_unlock_node (node);
+ return NULL;
+ }
+ route_lock_node (next);
+ route_unlock_node (node);
+ return next;
}
- else
- usec = t1->tv_usec;
- result->tv_usec = usec - t2->tv_usec;
-
- result->tv_sec = t1->tv_sec - t2->tv_sec - movedown;
-}
-void
-ospf6_timeval_div (const struct timeval *t1, u_int by,
- struct timeval *result)
-{
- long movedown;
-
- if (by == 0)
+ start = node;
+ while (node->parent)
{
- result->tv_sec = 0;
- result->tv_usec = 0;
- return;
+ if (node->parent->l_left == node && node->parent->l_right)
+ {
+ next = node->parent->l_right;
+ if (next == limit)
+ {
+ route_unlock_node (start);
+ return NULL;
+ }
+ route_lock_node (next);
+ route_unlock_node (start);
+ return next;
+ }
+ node = node->parent;
}
- movedown = t1->tv_sec % by;
- result->tv_sec = t1->tv_sec / by;
- result->tv_usec = (t1->tv_usec + movedown * TIMER_SEC_MICRO) / by;
+ route_unlock_node (start);
+ return NULL;
}
-void
-ospf6_timeval_decode (const struct timeval *t, long *dayp, long *hourp,
- long *minp, long *secp, long *msecp, long *usecp)
+struct route_node *
+route_prev (struct route_node *node)
{
- long day, hour, min, sec, msec, usec, left;
-
- left = t->tv_sec;
- day = left / 86400; left -= day * 86400;
- hour = left / 3600; left -= hour * 3600;
- min = left / 60; left -= min * 60;
- sec = left;
- left = t->tv_usec;
- msec = left / 1000; left -= msec * 1000;
- usec = left;
-
- if (dayp) *dayp = day;
- if (hourp) *hourp = hour;
- if (minp) *minp = min;
- if (secp) *secp = sec;
- if (msecp) *msecp = msec;
- if (usecp) *usecp = usec;
-}
-
-void
-ospf6_timeval_string (struct timeval *tv, char *buf, int size)
-{
- char days[16], hours[16], mins[16], secs[16], msecs[16], usecs[16];
- long day, hour, min, sec, msec, usec;
-
- ospf6_timeval_decode (tv, &day, &hour, &min, &sec, &msec, &usec);
- snprintf (days, sizeof (days), "%ld days ", day);
- snprintf (hours, sizeof (hours), "%ld hours ", hour);
- snprintf (mins, sizeof (mins), "%ld mins ", min);
- snprintf (secs, sizeof (secs), "%ld secs ", sec);
- snprintf (msecs, sizeof (msecs), "%ld msecs ", msec);
- snprintf (usecs, sizeof (usecs), "%ld usecs ", usec);
-
- snprintf (buf, size, "%s%s%s%s%s%s",
- (day ? days : ""), (hour ? hours : ""),
- (min ? mins : ""), (sec ? secs : ""),
- (msec ? msecs : ""), (usec ? usecs : ""));
-}
+ struct route_node *end;
+ struct route_node *prev = NULL;
-void
-ospf6_timeval_string_summary (struct timeval *tv, char *buf, int size)
-{
- char days[16], hours[16], mins[16], secs[16], msecs[16], usecs[16];
- long day, hour, min, sec, msec, usec;
-
- ospf6_timeval_decode (tv, &day, &hour, &min, &sec, &msec, &usec);
- snprintf (days, sizeof (days), "%02ldd", day);
- snprintf (hours, sizeof (hours), "%ldh", hour);
- snprintf (mins, sizeof (mins), "%ldm", min);
- snprintf (secs, sizeof (secs), "%lds", sec);
- snprintf (msecs, sizeof (msecs), "%ldms", msec);
- snprintf (usecs, sizeof (usecs), "%ldus", usec);
-
- snprintf (buf, size, "%s%02ld:%02ld:%02ld",
- (day ? days : ""), hour, min, sec);
-}
+ if (node->parent == NULL)
+ {
+ route_unlock_node (node);
+ return NULL;
+ }
-/* foreach function */
-void
-ospf6_count_state (void *arg, int val, void *obj)
-{
- int *count = (int *) arg;
- u_char state = val;
- struct ospf6_neighbor *nei = (struct ospf6_neighbor *) obj;
+ if (node->parent->l_left == node)
+ {
+ prev = node->parent;
+ route_lock_node (prev);
+ route_unlock_node (node);
+ return prev;
+ }
- if (nei->state == state)
- (*count)++;
-}
-
-/* VTY commands. */
-DEFUN (reload,
- reload_cmd,
- "reload",
- "Reloads\n")
-{
- extern void _reload ();
- _reload ();
- return CMD_SUCCESS;
-}
+ end = node;
+ node = node->parent;
+ route_lock_node (node);
+ while (node)
+ {
+ prev = node;
+ node = _route_next_until (node, end);
+ }
+ route_unlock_node (end);
+ route_lock_node (prev);
-DEFUN (garbage_collection,
- garbage_collection_cmd,
- "ipv6 ospf6 garbage collect",
- IPV6_STR
- OSPF6_STR
- "garbage collection by hand\n"
- "Remove Maxages if possible and recalculate routes\n")
-{
- ospf6_maxage_remover ();
-#if 0
- ospf6_route_calculation_schedule ();
-#endif
- return CMD_SUCCESS;
+ return prev;
}
-/* Show version. */
DEFUN (show_version_ospf6,
show_version_ospf6_cmd,
"show version ospf6",
SHOW_STR
- "Displays ospf6d version\n")
+ "Displays ospf6d version\n"
+ )
{
vty_out (vty, "Zebra OSPF6d Version: %s%s",
ospf6_daemon_version, VTY_NEWLINE);
@@ -193,582 +152,1103 @@ DEFUN (show_version_ospf6,
return CMD_SUCCESS;
}
-/* start ospf6 */
-DEFUN (router_ospf6,
- router_ospf6_cmd,
- "router ospf6",
- OSPF6_ROUTER_STR
- OSPF6_STR)
+struct cmd_node debug_node =
{
- if (ospf6 == NULL)
- ospf6_start ();
-
- /* set current ospf point. */
- vty->node = OSPF6_NODE;
- vty->index = ospf6;
+ DEBUG_NODE,
+ ""
+};
- return CMD_SUCCESS;
+int
+config_write_ospf6_debug (struct vty *vty)
+{
+ config_write_ospf6_debug_message (vty);
+ config_write_ospf6_debug_lsa (vty);
+ config_write_ospf6_debug_zebra (vty);
+ config_write_ospf6_debug_interface (vty);
+ config_write_ospf6_debug_neighbor (vty);
+ config_write_ospf6_debug_spf (vty);
+ config_write_ospf6_debug_route (vty);
+ config_write_ospf6_debug_asbr (vty);
+ vty_out (vty, "!%s", VTY_NEWLINE);
+ return 0;
}
-/* stop ospf6 */
-DEFUN (no_router_ospf6,
- no_router_ospf6_cmd,
- "no router ospf6",
- NO_STR
- OSPF6_ROUTER_STR)
+DEFUN (show_ipv6_ospf6_database,
+ show_ipv6_ospf6_database_cmd,
+ "show ipv6 ospf6 database",
+ SHOW_STR
+ IPV6_STR
+ OSPF6_STR
+ "Display Link state database\n"
+ )
{
- if (!ospf6)
- vty_out (vty, "OSPFv3 is not running%s", VTY_NEWLINE);
+ listnode i, j;
+ struct ospf6 *o = ospf6;
+ void (*showfunc) (struct vty *, struct ospf6_lsa *) = NULL;
+
+ OSPF6_CMD_CHECK_RUNNING ();
+
+ if (argc)
+ {
+ if (! strncmp (argv[0], "de", 2))
+ showfunc = ospf6_lsa_show;
+ else if (! strncmp (argv[0], "du", 2))
+ showfunc = ospf6_lsa_show_dump;
+ else if (! strncmp (argv[0], "in", 2))
+ showfunc = ospf6_lsa_show_internal;
+ }
else
- ospf6_stop ();
+ showfunc = ospf6_lsa_show_summary;
+
+ if (showfunc == ospf6_lsa_show_summary)
+ ospf6_lsa_show_summary_header (vty);
- /* return to config node . */
- vty->node = CONFIG_NODE;
- vty->index = NULL;
+ LSDB_FOREACH_LSA (vty, showfunc, o->lsdb);
+ for (i = listhead (o->area_list); i; nextnode (i))
+ {
+ struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+ LSDB_FOREACH_LSA (vty, showfunc, oa->lsdb);
+ }
+ for (i = listhead (o->area_list); i; nextnode (i))
+ {
+ struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+ for (j = listhead (oa->if_list); j; nextnode (j))
+ {
+ struct ospf6_interface *oi = (struct ospf6_interface *) getdata (j);
+ LSDB_FOREACH_LSA (vty, showfunc, oi->lsdb);
+ }
+ }
return CMD_SUCCESS;
}
-/* show top level structures */
-DEFUN (show_ipv6_ospf6,
- show_ipv6_ospf6_cmd,
- "show ipv6 ospf6",
+ALIAS (show_ipv6_ospf6_database,
+ show_ipv6_ospf6_database_detail_cmd,
+ "show ipv6 ospf6 database (detail|dump|internal)",
+ SHOW_STR
+ IPV6_STR
+ OSPF6_STR
+ "Display Link state database\n"
+ "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,
+ "show ipv6 ospf6 database "
+ "(router|network|inter-prefix|inter-router|as-external|"
+ "group-membership|type-7|link|intra-prefix)",
SHOW_STR
- IP6_STR
- OSPF6_STR)
+ IPV6_STR
+ OSPF6_STR
+ "Display Link state database\n"
+ "Display Router LSAs\n"
+ "Display Network LSAs\n"
+ "Display Inter-Area-Prefix LSAs\n"
+ "Display Inter-Area-Router LSAs\n"
+ "Display As-External LSAs\n"
+ "Display Group-Membership LSAs\n"
+ "Display Type-7 LSAs\n"
+ "Display Link LSAs\n"
+ "Display Intra-Area-Prefix LSAs\n"
+ )
{
+ listnode i, j;
+ struct ospf6 *o = ospf6;
+ void (*showfunc) (struct vty *, struct ospf6_lsa *) = NULL;
+ u_int16_t type = 0;
+
OSPF6_CMD_CHECK_RUNNING ();
- ospf6_show (vty);
+ if (argc > 1)
+ {
+ if (! strncmp (argv[1], "de", 2))
+ showfunc = ospf6_lsa_show;
+ else if (! strncmp (argv[1], "du", 2))
+ showfunc = ospf6_lsa_show_dump;
+ else if (! strncmp (argv[1], "in", 2))
+ showfunc = ospf6_lsa_show_internal;
+ }
+ else
+ showfunc = ospf6_lsa_show_summary;
+
+ if (showfunc == ospf6_lsa_show_summary)
+ ospf6_lsa_show_summary_header (vty);
+
+ if (! strcmp (argv[0], "router"))
+ type = htons (OSPF6_LSTYPE_ROUTER);
+ else if (! strcmp (argv[0], "network"))
+ type = htons (OSPF6_LSTYPE_NETWORK);
+ else if (! strcmp (argv[0], "as-external"))
+ type = htons (OSPF6_LSTYPE_AS_EXTERNAL);
+ else if (! strcmp (argv[0], "intra-prefix"))
+ type = htons (OSPF6_LSTYPE_INTRA_PREFIX);
+ else if (! strcmp (argv[0], "inter-router"))
+ type = htons (OSPF6_LSTYPE_INTER_ROUTER);
+ else if (! strcmp (argv[0], "inter-prefix"))
+ type = htons (OSPF6_LSTYPE_INTER_PREFIX);
+ else if (! strcmp (argv[0], "link"))
+ type = htons (OSPF6_LSTYPE_LINK);
+
+ LSDB_FOREACH_LSA_T (vty, showfunc, o->lsdb, type);
+ for (i = listhead (o->area_list); i; nextnode (i))
+ {
+ struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+ LSDB_FOREACH_LSA_T (vty, showfunc, oa->lsdb, type);
+ }
+ for (i = listhead (o->area_list); i; nextnode (i))
+ {
+ struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+ for (j = listhead (oa->if_list); j; nextnode (j))
+ {
+ struct ospf6_interface *oi = (struct ospf6_interface *) getdata (j);
+ LSDB_FOREACH_LSA_T (vty, showfunc, oi->lsdb, type);
+ }
+ }
+
return CMD_SUCCESS;
}
-DEFUN (show_ipv6_ospf6_nexthoplist,
- show_ipv6_ospf6_nexthoplist_cmd,
- "show ipv6 ospf6 nexthop-list",
+ALIAS (show_ipv6_ospf6_database_type,
+ show_ipv6_ospf6_database_type_detail_cmd,
+ "show ipv6 ospf6 database "
+ "(router|network|inter-prefix|inter-router|as-external|"
+ "group-membership|type-7|link|intra-prefix) "
+ "(detail|dump|internal)",
SHOW_STR
- IP6_STR
+ IPV6_STR
OSPF6_STR
- "List of nexthop\n")
-{
-#if 0
- listnode i;
- struct ospf6_nexthop *nh;
- char buf[128];
- for (i = listhead (nexthoplist); i; nextnode (i))
- {
- nh = (struct ospf6_nexthop *) getdata (i);
- nexthop_str (nh, buf, sizeof (buf));
- vty_out (vty, "%s%s", buf,
- VTY_NEWLINE);
- }
-#endif
- return CMD_SUCCESS;
-}
-
-DEFUN (show_ipv6_ospf6_statistics,
- show_ipv6_ospf6_statistics_cmd,
- "show ipv6 ospf6 statistics",
+ "Display Link state database\n"
+ "Display Router LSAs\n"
+ "Display Network LSAs\n"
+ "Display Inter-Area-Prefix LSAs\n"
+ "Display Inter-Area-Router LSAs\n"
+ "Display As-External LSAs\n"
+ "Display Group-Membership LSAs\n"
+ "Display Type-7 LSAs\n"
+ "Display Link LSAs\n"
+ "Display Intra-Area-Prefix LSAs\n"
+ "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,
+ "show ipv6 ospf6 database * A.B.C.D",
SHOW_STR
- IP6_STR
+ IPV6_STR
OSPF6_STR
- "Statistics\n")
+ "Display Link state database\n"
+ "Any Link state Type\n"
+ "Specify Link state ID as IPv4 address notation\n"
+ )
{
+ listnode i, j;
+ struct ospf6 *o = ospf6;
+ void (*showfunc) (struct vty *, struct ospf6_lsa *) = NULL;
+ u_int32_t id = 0;
+
OSPF6_CMD_CHECK_RUNNING ();
- ospf6_statistics_show (vty, ospf6);
- return CMD_SUCCESS;
-}
+ if (argc > 1)
+ {
+ if (! strncmp (argv[1], "de", 2))
+ showfunc = ospf6_lsa_show;
+ else if (! strncmp (argv[1], "du", 2))
+ showfunc = ospf6_lsa_show_dump;
+ else if (! strncmp (argv[1], "in", 2))
+ showfunc = ospf6_lsa_show_internal;
+ }
+ else
+ showfunc = ospf6_lsa_show_summary;
-/* change Router_ID commands. */
-DEFUN (ospf6_router_id,
- ospf6_router_id_cmd,
- "router-id ROUTER_ID",
- "Configure ospf Router-ID.\n"
- V4NOTATION_STR)
-{
- int ret;
- u_int32_t router_id;
+ if (showfunc == ospf6_lsa_show_summary)
+ ospf6_lsa_show_summary_header (vty);
- ret = inet_pton (AF_INET, argv[0], &router_id);
- if (!ret)
+ if ((inet_pton (AF_INET, argv[0], &id)) != 1)
{
- vty_out (vty, "malformed ospf router identifier%s", VTY_NEWLINE);
- vty_out (vty, "%s", VTY_NEWLINE);
- return CMD_WARNING;
+ vty_out (vty, "Link State ID is not parsable: %s%s",
+ argv[0], VTY_NEWLINE);
+ return CMD_SUCCESS;
}
- if (IS_OSPF6_DUMP_CONFIG)
- zlog_info ("CONFIG: router-id %s", argv[0]);
- ospf6->router_id = router_id;
+ LSDB_FOREACH_LSA_I (vty, showfunc, o->lsdb, id);
+ for (i = listhead (o->area_list); i; nextnode (i))
+ {
+ struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+ LSDB_FOREACH_LSA_I (vty, showfunc, oa->lsdb, id);
+ }
+ for (i = listhead (o->area_list); i; nextnode (i))
+ {
+ struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+ for (j = listhead (oa->if_list); j; nextnode (j))
+ {
+ struct ospf6_interface *oi = (struct ospf6_interface *) getdata (j);
+ LSDB_FOREACH_LSA_I (vty, showfunc, oi->lsdb, id);
+ }
+ }
return CMD_SUCCESS;
}
-int
-ospf6_interface_bind_area (struct vty *vty,
- char *if_name, char *area_name,
- char *plist_name, int passive)
+ALIAS (show_ipv6_ospf6_database_id,
+ show_ipv6_ospf6_database_id_detail_cmd,
+ "show ipv6 ospf6 database * A.B.C.D "
+ "(detail|dump|internal)",
+ SHOW_STR
+ IPV6_STR
+ OSPF6_STR
+ "Display Link state database\n"
+ "Any Link state Type\n"
+ "Any Link state ID\n"
+ "Specify Link state ID as IPv4 address notation\n"
+ "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,
+ "show ipv6 ospf6 database * * A.B.C.D",
+ SHOW_STR
+ IPV6_STR
+ OSPF6_STR
+ "Display Link state database\n"
+ "Any Link state Type\n"
+ "Any Link state ID\n"
+ "Specify Advertising Router as IPv4 address notation\n"
+ )
{
- struct interface *ifp;
- struct ospf6_interface *o6i;
- struct ospf6_area *o6a;
- u_int32_t area_id;
+ listnode i, j;
+ struct ospf6 *o = ospf6;
+ void (*showfunc) (struct vty *, struct ospf6_lsa *) = NULL;
+ u_int32_t router = 0;
- /* find/create ospf6 interface */
- ifp = if_get_by_name (if_name);
- o6i = (struct ospf6_interface *) ifp->info;
- if (! o6i)
- o6i = ospf6_interface_create (ifp);
+ OSPF6_CMD_CHECK_RUNNING ();
- /* parse Area-ID */
- if (inet_pton (AF_INET, area_name, &area_id) != 1)
+ if (argc > 1)
{
- vty_out (vty, "Invalid Area-ID: %s%s", area_name, VTY_NEWLINE);
- return CMD_ERR_AMBIGUOUS;
+ if (! strncmp (argv[1], "de", 2))
+ showfunc = ospf6_lsa_show;
+ else if (! strncmp (argv[1], "du", 2))
+ showfunc = ospf6_lsa_show_dump;
+ else if (! strncmp (argv[1], "in", 2))
+ showfunc = ospf6_lsa_show_internal;
}
+ else
+ showfunc = ospf6_lsa_show_summary;
- /* find/create ospf6 area */
- o6a = ospf6_area_lookup (area_id, ospf6);
- if (!o6a)
+ if (showfunc == ospf6_lsa_show_summary)
+ ospf6_lsa_show_summary_header (vty);
+
+ if ((inet_pton (AF_INET, argv[0], &router)) != 1)
{
- o6a = ospf6_area_create (area_id);
- o6a->ospf6 = ospf6;
- listnode_add (ospf6->area_list, o6a);
+ vty_out (vty, "Advertising Router is not parsable: %s%s",
+ argv[0], VTY_NEWLINE);
+ return CMD_SUCCESS;
}
- if (o6i->area)
+ LSDB_FOREACH_LSA_R (vty, showfunc, o->lsdb, router);
+ for (i = listhead (o->area_list); i; nextnode (i))
{
- if (o6i->area != o6a)
- {
- vty_out (vty, "Aready attached to area %s%s",
- o6i->area->str, VTY_NEWLINE);
- return CMD_ERR_NOTHING_TODO;
- }
+ struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+ LSDB_FOREACH_LSA_R (vty, showfunc, oa->lsdb, router);
}
- else
+ for (i = listhead (o->area_list); i; nextnode (i))
{
- listnode_add (o6a->if_list, o6i);
- o6i->area = o6a;
+ struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+ for (j = listhead (oa->if_list); j; nextnode (j))
+ {
+ struct ospf6_interface *oi = (struct ospf6_interface *) getdata (j);
+ LSDB_FOREACH_LSA_R (vty, showfunc, oi->lsdb, router);
+ }
}
- /* prefix-list name */
- if (plist_name)
+ return CMD_SUCCESS;
+}
+
+ALIAS (show_ipv6_ospf6_database_router,
+ show_ipv6_ospf6_database_router_detail_cmd,
+ "show ipv6 ospf6 database * * A.B.C.D "
+ "(detail|dump|internal)",
+ SHOW_STR
+ IPV6_STR
+ OSPF6_STR
+ "Display Link state database\n"
+ "Any Link state Type\n"
+ "Any Link state ID\n"
+ "Specify Advertising Router as IPv4 address notation\n"
+ "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,
+ "show ipv6 ospf6 database "
+ "(router|network|inter-prefix|inter-router|as-external|"
+ "group-membership|type-7|link|intra-prefix) A.B.C.D",
+ SHOW_STR
+ IPV6_STR
+ OSPF6_STR
+ "Display Link state database\n"
+ "Display Router LSAs\n"
+ "Display Network LSAs\n"
+ "Display Inter-Area-Prefix LSAs\n"
+ "Display Inter-Area-Router LSAs\n"
+ "Display As-External LSAs\n"
+ "Display Group-Membership LSAs\n"
+ "Display Type-7 LSAs\n"
+ "Display Link LSAs\n"
+ "Display Intra-Area-Prefix LSAs\n"
+ "Specify Link state ID as IPv4 address notation\n"
+ )
+{
+ listnode i, j;
+ struct ospf6 *o = ospf6;
+ void (*showfunc) (struct vty *, struct ospf6_lsa *) = NULL;
+ u_int16_t type = 0;
+ u_int32_t id = 0;
+
+ OSPF6_CMD_CHECK_RUNNING ();
+
+ if (argc > 2)
{
- if (o6i->plist_name)
- XFREE (MTYPE_PREFIX_LIST_STR, o6i->plist_name);
- o6i->plist_name = XSTRDUP (MTYPE_PREFIX_LIST_STR, plist_name);
+ if (! strncmp (argv[2], "de", 2))
+ showfunc = ospf6_lsa_show;
+ else if (! strncmp (argv[2], "du", 2))
+ showfunc = ospf6_lsa_show_dump;
+ else if (! strncmp (argv[2], "in", 2))
+ showfunc = ospf6_lsa_show_internal;
}
else
+ showfunc = ospf6_lsa_show_summary;
+
+ if (showfunc == ospf6_lsa_show_summary)
+ ospf6_lsa_show_summary_header (vty);
+
+ if (! strcmp (argv[0], "router"))
+ type = htons (OSPF6_LSTYPE_ROUTER);
+ else if (! strcmp (argv[0], "network"))
+ type = htons (OSPF6_LSTYPE_NETWORK);
+ else if (! strcmp (argv[0], "as-external"))
+ type = htons (OSPF6_LSTYPE_AS_EXTERNAL);
+ else if (! strcmp (argv[0], "intra-prefix"))
+ type = htons (OSPF6_LSTYPE_INTRA_PREFIX);
+ else if (! strcmp (argv[0], "inter-router"))
+ type = htons (OSPF6_LSTYPE_INTER_ROUTER);
+ else if (! strcmp (argv[0], "inter-prefix"))
+ type = htons (OSPF6_LSTYPE_INTER_PREFIX);
+ else if (! strcmp (argv[0], "link"))
+ type = htons (OSPF6_LSTYPE_LINK);
+
+ if ((inet_pton (AF_INET, argv[1], &id)) != 1)
{
- if (o6i->plist_name)
- XFREE (MTYPE_PREFIX_LIST_STR, o6i->plist_name);
- o6i->plist_name = NULL;
+ vty_out (vty, "Link state ID is not parsable: %s%s",
+ argv[1], VTY_NEWLINE);
+ return CMD_SUCCESS;
}
- if (passive)
+ LSDB_FOREACH_LSA_TI (vty, showfunc, o->lsdb, type, id);
+ for (i = listhead (o->area_list); i; nextnode (i))
{
- listnode node;
- struct ospf6_neighbor *o6n;
-
- SET_FLAG (o6i->flag, OSPF6_INTERFACE_FLAG_PASSIVE);
- if (o6i->thread_send_hello)
- {
- thread_cancel (o6i->thread_send_hello);
- o6i->thread_send_hello = (struct thread *) NULL;
- }
-
- for (node = listhead (o6i->neighbor_list); node; nextnode (node))
- {
- o6n = getdata (node);
- if (o6n->inactivity_timer)
- thread_cancel (o6n->inactivity_timer);
- thread_execute (master, inactivity_timer, o6n, 0);
- }
+ struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+ LSDB_FOREACH_LSA_TI (vty, showfunc, oa->lsdb, type, id);
}
- else
+ for (i = listhead (o->area_list); i; nextnode (i))
{
- UNSET_FLAG (o6i->flag, OSPF6_INTERFACE_FLAG_PASSIVE);
- if (o6i->thread_send_hello == NULL)
- thread_add_event (master, ospf6_send_hello, o6i, 0);
+ struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+ for (j = listhead (oa->if_list); j; nextnode (j))
+ {
+ struct ospf6_interface *oi = (struct ospf6_interface *) getdata (j);
+ LSDB_FOREACH_LSA_TI (vty, showfunc, oi->lsdb, type, id);
+ }
}
- /* enable I/F if it's not enabled still */
- if (! ospf6_interface_is_enabled (o6i->interface->ifindex))
- thread_add_event (master, interface_up, o6i, 0);
- else
- CALL_FOREACH_LSA_HOOK (hook_interface, hook_change, o6i);
-
- CALL_CHANGE_HOOK (&interface_hook, o6i);
return CMD_SUCCESS;
}
-DEFUN (ospf6_interface_area_plist,
- ospf6_interface_area_plist_cmd,
- "interface IFNAME area A.B.C.D prefix-list WORD",
- "Enable routing on an IPv6 interface\n"
- IFNAME_STR
- "Set the OSPF6 area ID\n"
- "OSPF6 area ID in IPv4 address notation\n"
- OSPF6_PREFIX_LIST_STR
- "IPv6 prefix-list name\n"
- )
-{
- if (IS_OSPF6_DUMP_CONFIG)
- zlog_info ("CONFIG: interface %s area %s prefix-list %s",
- argv[0], argv[1], argv[2]);
-
- return ospf6_interface_bind_area (vty, argv[0], argv[1], argv[2], 0);
-}
-
-DEFUN (ospf6_interface_area_plist_passive,
- ospf6_interface_area_plist_passive_cmd,
- "interface IFNAME area A.B.C.D prefix-list WORD passive",
- "Enable routing on an IPv6 interface\n"
- IFNAME_STR
- "Set the OSPF6 area ID\n"
- "OSPF6 area ID in IPv4 address notation\n"
- OSPF6_PREFIX_LIST_STR
- "IPv6 prefix-list name\n"
- "IPv6 prefix-list name\n"
- OSPF6_PASSIVE_STR
- )
-{
- if (IS_OSPF6_DUMP_CONFIG)
- zlog_info ("CONFIG: interface %s area %s prefix-list %s passive",
- argv[0], argv[1], argv[2]);
-
- return ospf6_interface_bind_area (vty, argv[0], argv[1], argv[2], 1);
-}
-
-DEFUN (ospf6_interface_area,
- ospf6_interface_area_cmd,
- "interface IFNAME area A.B.C.D",
- "Enable routing on an IPv6 interface\n"
- IFNAME_STR
- "Set the OSPF6 area ID\n"
- "OSPF6 area ID in IPv4 address notation\n"
+ALIAS (show_ipv6_ospf6_database_type_id,
+ show_ipv6_ospf6_database_type_id_detail_cmd,
+ "show ipv6 ospf6 database "
+ "(router|network|inter-prefix|inter-router|as-external|"
+ "group-membership|type-7|link|intra-prefix) A.B.C.D "
+ "(detail|dump|internal)",
+ SHOW_STR
+ IPV6_STR
+ OSPF6_STR
+ "Display Link state database\n"
+ "Display Router LSAs\n"
+ "Display Network LSAs\n"
+ "Display Inter-Area-Prefix LSAs\n"
+ "Display Inter-Area-Router LSAs\n"
+ "Display As-External LSAs\n"
+ "Display Group-Membership LSAs\n"
+ "Display Type-7 LSAs\n"
+ "Display Link LSAs\n"
+ "Display Intra-Area-Prefix LSAs\n"
+ "Specify Link state ID as IPv4 address notation\n"
+ "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,
+ "show ipv6 ospf6 database "
+ "(router|network|inter-prefix|inter-router|as-external|"
+ "group-membership|type-7|link|intra-prefix) * A.B.C.D",
+ SHOW_STR
+ IPV6_STR
+ OSPF6_STR
+ "Display Link state database\n"
+ "Display Router LSAs\n"
+ "Display Network LSAs\n"
+ "Display Inter-Area-Prefix LSAs\n"
+ "Display Inter-Area-Router LSAs\n"
+ "Display As-External LSAs\n"
+ "Display Group-Membership LSAs\n"
+ "Display Type-7 LSAs\n"
+ "Display Link LSAs\n"
+ "Display Intra-Area-Prefix LSAs\n"
+ "Any Link state ID\n"
+ "Specify Advertising Router as IPv4 address notation\n"
)
{
- struct interface *ifp;
- struct ospf6_interface *o6i;
- int passive;
- char *plist_name;
+ listnode i, j;
+ struct ospf6 *o = ospf6;
+ void (*showfunc) (struct vty *, struct ospf6_lsa *) = NULL;
+ u_int16_t type = 0;
+ u_int32_t router = 0;
- if (IS_OSPF6_DUMP_CONFIG)
- zlog_info ("CONFIG: interface %s area %s",
- argv[0], argv[1]);
+ OSPF6_CMD_CHECK_RUNNING ();
- ifp = if_get_by_name (argv[0]);
- o6i = (struct ospf6_interface *) ifp->info;
- if (o6i)
+ if (argc > 2)
{
- passive = CHECK_FLAG (o6i->flag, OSPF6_INTERFACE_FLAG_PASSIVE);
- plist_name = o6i->plist_name;
+ if (! strncmp (argv[2], "de", 2))
+ showfunc = ospf6_lsa_show;
+ else if (! strncmp (argv[2], "du", 2))
+ showfunc = ospf6_lsa_show_dump;
+ else if (! strncmp (argv[2], "in", 2))
+ showfunc = ospf6_lsa_show_internal;
}
else
+ showfunc = ospf6_lsa_show_summary;
+
+ if (showfunc == ospf6_lsa_show_summary)
+ ospf6_lsa_show_summary_header (vty);
+
+ if (! strcmp (argv[0], "router"))
+ type = htons (OSPF6_LSTYPE_ROUTER);
+ else if (! strcmp (argv[0], "network"))
+ type = htons (OSPF6_LSTYPE_NETWORK);
+ else if (! strcmp (argv[0], "as-external"))
+ type = htons (OSPF6_LSTYPE_AS_EXTERNAL);
+ else if (! strcmp (argv[0], "intra-prefix"))
+ type = htons (OSPF6_LSTYPE_INTRA_PREFIX);
+ else if (! strcmp (argv[0], "inter-router"))
+ type = htons (OSPF6_LSTYPE_INTER_ROUTER);
+ else if (! strcmp (argv[0], "inter-prefix"))
+ type = htons (OSPF6_LSTYPE_INTER_PREFIX);
+ else if (! strcmp (argv[0], "link"))
+ type = htons (OSPF6_LSTYPE_LINK);
+
+ if ((inet_pton (AF_INET, argv[1], &router)) != 1)
{
- passive = 0;
- plist_name = NULL;
+ vty_out (vty, "Advertising Router is not parsable: %s%s",
+ argv[1], VTY_NEWLINE);
+ return CMD_SUCCESS;
}
- return ospf6_interface_bind_area (vty, argv[0], argv[1],
- plist_name, passive);
-}
-
-DEFUN (ospf6_interface_area_passive,
- ospf6_interface_area_passive_cmd,
- "interface IFNAME area A.B.C.D passive",
- "Enable routing on an IPv6 interface\n"
- IFNAME_STR
- "Set the OSPF6 area ID\n"
- "OSPF6 area ID in IPv4 address notation\n"
- OSPF6_PASSIVE_STR
- )
-{
- if (IS_OSPF6_DUMP_CONFIG)
- zlog_info ("CONFIG: interface %s area %s passive",
- argv[0], argv[1]);
+ LSDB_FOREACH_LSA_TR (vty, showfunc, o->lsdb, type, router);
+ for (i = listhead (o->area_list); i; nextnode (i))
+ {
+ struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+ LSDB_FOREACH_LSA_TR (vty, showfunc, oa->lsdb, type, router);
+ }
+ for (i = listhead (o->area_list); i; nextnode (i))
+ {
+ struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+ for (j = listhead (oa->if_list); j; nextnode (j))
+ {
+ struct ospf6_interface *oi = (struct ospf6_interface *) getdata (j);
+ LSDB_FOREACH_LSA_TR (vty, showfunc, oi->lsdb, type, router);
+ }
+ }
- return ospf6_interface_bind_area (vty, argv[0], argv[1], NULL, 1);
+ return CMD_SUCCESS;
}
-DEFUN (no_ospf6_interface_area,
- no_ospf6_interface_area_cmd,
- "no interface IFNAME area A.B.C.D",
- NO_STR
- "Disable routing on an IPv6 interface\n"
- IFNAME_STR)
+ALIAS (show_ipv6_ospf6_database_type_router,
+ show_ipv6_ospf6_database_type_router_detail_cmd,
+ "show ipv6 ospf6 database "
+ "(router|network|inter-prefix|inter-router|as-external|"
+ "group-membership|type-7|link|intra-prefix) * A.B.C.D "
+ "(detail|dump|internal)",
+ SHOW_STR
+ IPV6_STR
+ OSPF6_STR
+ "Display Link state database\n"
+ "Display Router LSAs\n"
+ "Display Network LSAs\n"
+ "Display Inter-Area-Prefix LSAs\n"
+ "Display Inter-Area-Router LSAs\n"
+ "Display As-External LSAs\n"
+ "Display Group-Membership LSAs\n"
+ "Display Type-7 LSAs\n"
+ "Display Link LSAs\n"
+ "Display Intra-Area-Prefix LSAs\n"
+ "Any Link state ID\n"
+ "Specify Advertising Router as IPv4 address notation\n"
+ "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,
+ "show ipv6 ospf6 database * A.B.C.D A.B.C.D",
+ SHOW_STR
+ IPV6_STR
+ OSPF6_STR
+ "Display Link state database\n"
+ "Any Link state Type\n"
+ "Specify Link state ID as IPv4 address notation\n"
+ "Specify Advertising Router as IPv4 address notation\n"
+ )
{
- struct interface *ifp;
- struct ospf6_interface *o6i;
- struct ospf6 *o6;
- u_int32_t area_id;
+ listnode i, j;
+ struct ospf6 *o = ospf6;
+ void (*showfunc) (struct vty *, struct ospf6_lsa *) = NULL;
+ u_int32_t id = 0;
+ u_int32_t router = 0;
- o6 = (struct ospf6 *) vty->index;
+ OSPF6_CMD_CHECK_RUNNING ();
- ifp = if_lookup_by_name (argv[0]);
- if (!ifp)
- return CMD_ERR_NO_MATCH;
+ if (argc > 2)
+ {
+ if (! strncmp (argv[2], "de", 2))
+ showfunc = ospf6_lsa_show;
+ else if (! strncmp (argv[2], "du", 2))
+ showfunc = ospf6_lsa_show_dump;
+ else if (! strncmp (argv[2], "in", 2))
+ showfunc = ospf6_lsa_show_internal;
+ }
+ else
+ showfunc = ospf6_lsa_show_summary;
- o6i = (struct ospf6_interface *) ifp->info;
- if (!o6i)
- return CMD_SUCCESS;
+ if (showfunc == ospf6_lsa_show_summary)
+ ospf6_lsa_show_summary_header (vty);
- /* parse Area-ID */
- if (inet_pton (AF_INET, argv[1], &area_id) != 1)
+ if ((inet_pton (AF_INET, argv[0], &id)) != 1)
{
- vty_out (vty, "Invalid Area-ID: %s%s", argv[1], VTY_NEWLINE);
- return CMD_ERR_AMBIGUOUS;
+ vty_out (vty, "Link state ID is not parsable: %s%s",
+ argv[1], VTY_NEWLINE);
+ return CMD_SUCCESS;
}
- if (o6i->area->area_id != area_id)
+ if ((inet_pton (AF_INET, argv[1], &router)) != 1)
{
- vty_out (vty, "Wrong Area-ID: %s aready attached to area %s%s",
- o6i->interface->name, o6i->area->str, VTY_NEWLINE);
- return CMD_ERR_NOTHING_TODO;
+ vty_out (vty, "Advertising Router is not parsable: %s%s",
+ argv[1], VTY_NEWLINE);
+ return CMD_SUCCESS;
}
- if (o6i->area)
- thread_execute (master, interface_down, o6i, 0);
-
- listnode_delete (o6i->area->if_list, o6i);
- o6i->area = (struct ospf6_area *) NULL;
+ LSDB_FOREACH_LSA_IR (vty, showfunc, o->lsdb, id, router);
+ for (i = listhead (o->area_list); i; nextnode (i))
+ {
+ struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+ LSDB_FOREACH_LSA_IR (vty, showfunc, oa->lsdb, id, router);
+ }
+ for (i = listhead (o->area_list); i; nextnode (i))
+ {
+ struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+ for (j = listhead (oa->if_list); j; nextnode (j))
+ {
+ struct ospf6_interface *oi = (struct ospf6_interface *) getdata (j);
+ LSDB_FOREACH_LSA_IR (vty, showfunc, oi->lsdb, id, router);
+ }
+ }
return CMD_SUCCESS;
}
-DEFUN (ospf6_area_range,
- ospf6_area_range_cmd,
- "area A.B.C.D range X:X::X:X/M",
- "OSPFv3 area parameters\n"
- "OSPFv3 area ID in IPv4 address format\n"
- "Summarize routes matching address/mask (border routers only)\n"
- "IPv6 address range\n")
+ALIAS (show_ipv6_ospf6_database_id_router,
+ show_ipv6_ospf6_database_id_router_detail_cmd,
+ "show ipv6 ospf6 database * A.B.C.D A.B.C.D "
+ "(detail|dump|internal)",
+ SHOW_STR
+ IPV6_STR
+ OSPF6_STR
+ "Display Link state database\n"
+ "Any Link state Type\n"
+ "Specify Link state ID as IPv4 address notation\n"
+ "Specify Advertising Router as IPv4 address notation\n"
+ "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,
+ "show ipv6 ospf6 database "
+ "(router|network|inter-prefix|inter-router|as-external|"
+ "group-membership|type-7|link|intra-prefix) A.B.C.D A.B.C.D",
+ SHOW_STR
+ IPV6_STR
+ OSPF6_STR
+ "Display Link state database\n"
+ "Display Router LSAs\n"
+ "Display Network LSAs\n"
+ "Display Inter-Area-Prefix LSAs\n"
+ "Display Inter-Area-Router LSAs\n"
+ "Display As-External LSAs\n"
+ "Display Group-Membership LSAs\n"
+ "Display Type-7 LSAs\n"
+ "Display Link LSAs\n"
+ "Display Intra-Area-Prefix LSAs\n"
+ "Specify Link state ID as IPv4 address notation\n"
+ "Specify Advertising Router as IPv4 address notation\n"
+ )
{
- struct ospf6 *o6;
- struct ospf6_area *o6a;
- u_int32_t area_id;
- int ret;
+ listnode i, j;
+ struct ospf6 *o = ospf6;
+ void (*showfunc) (struct vty *, struct ospf6_lsa *) = NULL;
+ u_int16_t type = 0;
+ u_int32_t id = 0;
+ u_int32_t router = 0;
+
+ OSPF6_CMD_CHECK_RUNNING ();
- o6 = (struct ospf6 *) vty->index;
- inet_pton (AF_INET, argv[0], &area_id);
- o6a = ospf6_area_lookup (area_id, o6);
- if (! o6a)
+ if (argc > 3)
{
- vty_out (vty, "No such area%s", VTY_NEWLINE);
- return CMD_ERR_NO_MATCH;
+ if (! strncmp (argv[3], "du", 2))
+ showfunc = ospf6_lsa_show_dump;
+ else if (! strncmp (argv[3], "in", 2))
+ showfunc = ospf6_lsa_show_internal;
+ }
+ else
+ showfunc = ospf6_lsa_show;
+
+ if (showfunc == ospf6_lsa_show_summary)
+ ospf6_lsa_show_summary_header (vty);
+
+ if (! strcmp (argv[0], "router"))
+ type = htons (OSPF6_LSTYPE_ROUTER);
+ else if (! strcmp (argv[0], "network"))
+ type = htons (OSPF6_LSTYPE_NETWORK);
+ else if (! strcmp (argv[0], "as-external"))
+ type = htons (OSPF6_LSTYPE_AS_EXTERNAL);
+ else if (! strcmp (argv[0], "intra-prefix"))
+ type = htons (OSPF6_LSTYPE_INTRA_PREFIX);
+ else if (! strcmp (argv[0], "inter-router"))
+ type = htons (OSPF6_LSTYPE_INTER_ROUTER);
+ else if (! strcmp (argv[0], "inter-prefix"))
+ type = htons (OSPF6_LSTYPE_INTER_PREFIX);
+ else if (! strcmp (argv[0], "link"))
+ type = htons (OSPF6_LSTYPE_LINK);
+
+ if ((inet_pton (AF_INET, argv[1], &id)) != 1)
+ {
+ vty_out (vty, "Link state ID is not parsable: %s%s",
+ argv[1], VTY_NEWLINE);
+ return CMD_SUCCESS;
}
- ret = str2prefix_ipv6 (argv[1], &o6a->area_range);
- if (ret <= 0)
+ if ((inet_pton (AF_INET, argv[2], &router)) != 1)
{
- vty_out (vty, "Malformed IPv6 address%s", VTY_NEWLINE);
- return CMD_WARNING;
+ vty_out (vty, "Advertising Router is not parsable: %s%s",
+ argv[2], VTY_NEWLINE);
+ return CMD_SUCCESS;
+ }
+
+ LSDB_FOREACH_LSA_TIR (vty, showfunc, o->lsdb, type, id, router);
+ for (i = listhead (o->area_list); i; nextnode (i))
+ {
+ struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+ LSDB_FOREACH_LSA_TIR (vty, showfunc, oa->lsdb, type, id, router);
+ }
+ for (i = listhead (o->area_list); i; nextnode (i))
+ {
+ struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+ for (j = listhead (oa->if_list); j; nextnode (j))
+ {
+ struct ospf6_interface *oi = (struct ospf6_interface *) getdata (j);
+ LSDB_FOREACH_LSA_TIR (vty, showfunc, oi->lsdb, type, id, router);
+ }
}
return CMD_SUCCESS;
}
-DEFUN (ospf6_passive_interface,
- ospf6_passive_interface_cmd,
- "passive-interface IFNAME",
- OSPF6_PASSIVE_STR
- IFNAME_STR)
+ALIAS (show_ipv6_ospf6_database_type_id_router,
+ show_ipv6_ospf6_database_type_id_router_detail_cmd,
+ "show ipv6 ospf6 database "
+ "(router|network|inter-prefix|inter-router|as-external|"
+ "group-membership|type-7|link|intra-prefix) A.B.C.D A.B.C.D "
+ "(dump|internal)",
+ SHOW_STR
+ IPV6_STR
+ OSPF6_STR
+ "Display Link state database\n"
+ "Display Router LSAs\n"
+ "Display Network LSAs\n"
+ "Display Inter-Area-Prefix LSAs\n"
+ "Display Inter-Area-Router LSAs\n"
+ "Display As-External LSAs\n"
+ "Display Group-Membership LSAs\n"
+ "Display Type-7 LSAs\n"
+ "Display Link LSAs\n"
+ "Display Intra-Area-Prefix LSAs\n"
+ "Specify Link state ID as IPv4 address notation\n"
+ "Specify Advertising Router as IPv4 address notation\n"
+ "Display details of LSAs\n"
+ "Dump LSAs\n"
+ "Display LSA's internal information\n"
+ );
+
+DEFUN (show_ipv6_ospf6_database_self_originated,
+ show_ipv6_ospf6_database_self_originated_cmd,
+ "show ipv6 ospf6 database self-originated",
+ SHOW_STR
+ IPV6_STR
+ OSPF6_STR
+ "Display Link state database\n"
+ "Display Self-originated LSAs\n"
+ )
{
- struct interface *ifp;
- struct ospf6_interface *o6i;
+ listnode i, j;
+ struct ospf6 *o = ospf6;
+ void (*showfunc) (struct vty *, struct ospf6_lsa *) = NULL;
- ifp = if_get_by_name (argv[0]);
- if (ifp->info)
- o6i = (struct ospf6_interface *) ifp->info;
+ OSPF6_CMD_CHECK_RUNNING ();
+
+ if (argc > 0)
+ {
+ if (! strncmp (argv[0], "de", 2))
+ showfunc = ospf6_lsa_show;
+ else if (! strncmp (argv[0], "du", 2))
+ showfunc = ospf6_lsa_show_dump;
+ else if (! strncmp (argv[0], "in", 2))
+ showfunc = ospf6_lsa_show_internal;
+ }
else
- o6i = ospf6_interface_create (ifp);
+ showfunc = ospf6_lsa_show_summary;
- SET_FLAG (o6i->flag, OSPF6_INTERFACE_FLAG_PASSIVE);
+ if (showfunc == ospf6_lsa_show_summary)
+ ospf6_lsa_show_summary_header (vty);
- if (o6i->thread_send_hello)
+ LSDB_FOREACH_LSA_R (vty, showfunc, o->lsdb, o->router_id);
+ for (i = listhead (o->area_list); i; nextnode (i))
+ {
+ struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+ LSDB_FOREACH_LSA_R (vty, showfunc, oa->lsdb, o->router_id);
+ }
+ for (i = listhead (o->area_list); i; nextnode (i))
{
- thread_cancel (o6i->thread_send_hello);
- o6i->thread_send_hello = (struct thread *) NULL;
+ struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+ for (j = listhead (oa->if_list); j; nextnode (j))
+ {
+ struct ospf6_interface *oi = (struct ospf6_interface *) getdata (j);
+ LSDB_FOREACH_LSA_R (vty, showfunc, oi->lsdb, o->router_id);
+ }
}
return CMD_SUCCESS;
}
-DEFUN (no_ospf6_passive_interface,
- no_ospf6_passive_interface_cmd,
- "no passive-interface IFNAME",
- NO_STR
- OSPF6_PASSIVE_STR
- IFNAME_STR)
+ALIAS (show_ipv6_ospf6_database_self_originated,
+ show_ipv6_ospf6_database_self_originated_detail_cmd,
+ "show ipv6 ospf6 database self-originated "
+ "(detail|dump|internal)",
+ SHOW_STR
+ IPV6_STR
+ OSPF6_STR
+ "Display Link state database\n"
+ "Display Self-originated LSAs\n"
+ "Display details of LSAs\n"
+ "Dump LSAs\n"
+ "Display LSA's internal information\n"
+ );
+
+DEFUN (show_ipv6_ospf6_database_type_self_originated,
+ show_ipv6_ospf6_database_type_self_originated_cmd,
+ "show ipv6 ospf6 database "
+ "(router|network|inter-prefix|inter-router|as-external|"
+ "group-membership|type-7|link|intra-prefix) self-originated",
+ SHOW_STR
+ IPV6_STR
+ OSPF6_STR
+ "Display Link state database\n"
+ "Display Router LSAs\n"
+ "Display Network LSAs\n"
+ "Display Inter-Area-Prefix LSAs\n"
+ "Display Inter-Area-Router LSAs\n"
+ "Display As-External LSAs\n"
+ "Display Group-Membership LSAs\n"
+ "Display Type-7 LSAs\n"
+ "Display Link LSAs\n"
+ "Display Intra-Area-Prefix LSAs\n"
+ "Display Self-originated LSAs\n"
+ )
{
- struct interface *ifp;
- struct ospf6_interface *o6i;
+ listnode i, j;
+ struct ospf6 *o = ospf6;
+ void (*showfunc) (struct vty *, struct ospf6_lsa *) = NULL;
+ u_int16_t type = 0;
- ifp = if_lookup_by_name (argv[0]);
- if (! ifp)
- return CMD_ERR_NO_MATCH;
-
- o6i = (struct ospf6_interface *) ifp->info;
- UNSET_FLAG (o6i->flag, OSPF6_INTERFACE_FLAG_PASSIVE);
- if (o6i->thread_send_hello == NULL)
- thread_add_event (master, ospf6_send_hello, o6i, 0);
-
- return CMD_SUCCESS;
-}
-
-#ifdef HAVE_SETPROCTITLE
-extern int _argc;
-extern char **_argv;
-
-DEFUN (set_proctitle,
- set_proctitle_cmd,
- "set proctitle (version|normal|none)",
- "Set command\n"
- "Process title\n"
- "Version information\n"
- "Normal command-line options\n"
- "Just program name\n")
-{
- int i;
- char buf[64], tmp[64];
+ OSPF6_CMD_CHECK_RUNNING ();
- if (strncmp (argv[0], "v", 1) == 0)
+ if (argc > 1)
{
- proctitle_mode = 1;
- setproctitle ("%s Zebra: %s", OSPF6_DAEMON_VERSION, QUAGGA_VERSION);
+ if (! strncmp (argv[1], "de", 2))
+ showfunc = ospf6_lsa_show;
+ else if (! strncmp (argv[1], "du", 2))
+ showfunc = ospf6_lsa_show_dump;
+ else if (! strncmp (argv[1], "in", 2))
+ showfunc = ospf6_lsa_show_internal;
}
- else if (strncmp (argv[0], "nor", 3) == 0)
+ else
+ showfunc = ospf6_lsa_show_summary;
+
+ if (showfunc == ospf6_lsa_show_summary)
+ ospf6_lsa_show_summary_header (vty);
+
+ if (! strcmp (argv[0], "router"))
+ type = htons (OSPF6_LSTYPE_ROUTER);
+ else if (! strcmp (argv[0], "network"))
+ type = htons (OSPF6_LSTYPE_NETWORK);
+ else if (! strcmp (argv[0], "as-external"))
+ type = htons (OSPF6_LSTYPE_AS_EXTERNAL);
+ else if (! strcmp (argv[0], "intra-prefix"))
+ type = htons (OSPF6_LSTYPE_INTRA_PREFIX);
+ else if (! strcmp (argv[0], "inter-router"))
+ type = htons (OSPF6_LSTYPE_INTER_ROUTER);
+ else if (! strcmp (argv[0], "inter-prefix"))
+ type = htons (OSPF6_LSTYPE_INTER_PREFIX);
+ else if (! strcmp (argv[0], "link"))
+ type = htons (OSPF6_LSTYPE_LINK);
+
+ LSDB_FOREACH_LSA_TR (vty, showfunc, o->lsdb, type, o->router_id);
+ for (i = listhead (o->area_list); i; nextnode (i))
{
- proctitle_mode = 0;
- memset (tmp, 0, sizeof (tmp));
- memset (buf, 0, sizeof (buf));
- for (i = 0; i < _argc; i++)
- {
- snprintf (buf, sizeof (buf), "%s%s ", tmp, _argv[i]);
- memcpy (&tmp, &buf, sizeof (tmp));
- }
- setproctitle (buf);
+ struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+ LSDB_FOREACH_LSA_TR (vty, showfunc, oa->lsdb, type, o->router_id);
}
- else if (strncmp (argv[0], "non", 3) == 0)
+ for (i = listhead (o->area_list); i; nextnode (i))
{
- proctitle_mode = -1;
- setproctitle (NULL);
+ struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+ for (j = listhead (oa->if_list); j; nextnode (j))
+ {
+ struct ospf6_interface *oi = (struct ospf6_interface *) getdata (j);
+ LSDB_FOREACH_LSA_TR (vty, showfunc, oi->lsdb, type, o->router_id);
+ }
}
- else
- return CMD_ERR_NO_MATCH;
return CMD_SUCCESS;
}
-#endif /* HAVE_SETPROCTITLE */
-/* OSPF configuration write function. */
-int
-ospf6_config_write (struct vty *vty)
+ALIAS (show_ipv6_ospf6_database_type_self_originated,
+ show_ipv6_ospf6_database_type_self_originated_detail_cmd,
+ "show ipv6 ospf6 database "
+ "(router|network|inter-prefix|inter-router|as-external|"
+ "group-membership|type-7|link|intra-prefix) self-originated "
+ "(detail|dump|internal)",
+ SHOW_STR
+ IPV6_STR
+ OSPF6_STR
+ "Display Link state database\n"
+ "Display Router LSAs\n"
+ "Display Network LSAs\n"
+ "Display Inter-Area-Prefix LSAs\n"
+ "Display Inter-Area-Router LSAs\n"
+ "Display As-External LSAs\n"
+ "Display Group-Membership LSAs\n"
+ "Display Type-7 LSAs\n"
+ "Display Link LSAs\n"
+ "Display Intra-Area-Prefix LSAs\n"
+ "Display Self-originated LSAs\n"
+ "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,
+ "show ipv6 ospf6 database "
+ "(router|network|inter-prefix|inter-router|as-external|"
+ "group-membership|type-7|link|intra-prefix) A.B.C.D self-originated",
+ SHOW_STR
+ IPV6_STR
+ OSPF6_STR
+ "Display Link state database\n"
+ "Display Router LSAs\n"
+ "Display Network LSAs\n"
+ "Display Inter-Area-Prefix LSAs\n"
+ "Display Inter-Area-Router LSAs\n"
+ "Display As-External LSAs\n"
+ "Display Group-Membership LSAs\n"
+ "Display Type-7 LSAs\n"
+ "Display Link LSAs\n"
+ "Display Intra-Area-Prefix LSAs\n"
+ "Specify Link state ID as IPv4 address notation\n"
+ "Display Self-originated LSAs\n"
+ )
{
- listnode j, k;
- char buf[64];
- struct ospf6_area *area;
- struct ospf6_interface *o6i;
+ listnode i, j;
+ struct ospf6 *o = ospf6;
+ void (*showfunc) (struct vty *, struct ospf6_lsa *) = NULL;
+ u_int16_t type = 0;
+ u_int32_t id = 0;
- if (proctitle_mode == 1)
- vty_out (vty, "set proctitle version%s", VTY_NEWLINE);
- else if (proctitle_mode == -1)
- vty_out (vty, "set proctitle none%s", VTY_NEWLINE);
-
- vty_out (vty, "!%s", VTY_NEWLINE);
-
- if (! ospf6)
- return 0;
-
- /* OSPFv6 configuration. */
- if (!ospf6)
- return CMD_SUCCESS;
-
- inet_ntop (AF_INET, &ospf6->router_id, buf, sizeof (buf));
- vty_out (vty, "router ospf6%s", VTY_NEWLINE);
- vty_out (vty, " router-id %s%s", buf, VTY_NEWLINE);
+ OSPF6_CMD_CHECK_RUNNING ();
- ospf6_redistribute_config_write (vty);
- ospf6_damp_config_write (vty);
+ if (argc > 2)
+ {
+ if (! strncmp (argv[2], "du", 2))
+ showfunc = ospf6_lsa_show_dump;
+ else if (! strncmp (argv[2], "in", 2))
+ showfunc = ospf6_lsa_show_internal;
+ }
+ else
+ showfunc = ospf6_lsa_show;
+
+ if (showfunc == ospf6_lsa_show_summary)
+ ospf6_lsa_show_summary_header (vty);
+
+ if (! strcmp (argv[0], "router"))
+ type = htons (OSPF6_LSTYPE_ROUTER);
+ else if (! strcmp (argv[0], "network"))
+ type = htons (OSPF6_LSTYPE_NETWORK);
+ else if (! strcmp (argv[0], "as-external"))
+ type = htons (OSPF6_LSTYPE_AS_EXTERNAL);
+ else if (! strcmp (argv[0], "intra-prefix"))
+ type = htons (OSPF6_LSTYPE_INTRA_PREFIX);
+ else if (! strcmp (argv[0], "inter-router"))
+ type = htons (OSPF6_LSTYPE_INTER_ROUTER);
+ else if (! strcmp (argv[0], "inter-prefix"))
+ type = htons (OSPF6_LSTYPE_INTER_PREFIX);
+ else if (! strcmp (argv[0], "link"))
+ type = htons (OSPF6_LSTYPE_LINK);
+
+ if ((inet_pton (AF_INET, argv[1], &id)) != 1)
+ {
+ vty_out (vty, "Link State ID is not parsable: %s%s",
+ argv[0], VTY_NEWLINE);
+ return CMD_SUCCESS;
+ }
- for (j = listhead (ospf6->area_list); j; nextnode (j))
+ LSDB_FOREACH_LSA_TIR (vty, showfunc, o->lsdb, type, id, o->router_id);
+ for (i = listhead (o->area_list); i; nextnode (i))
{
- area = (struct ospf6_area *)getdata (j);
- for (k = listhead (area->if_list); k; nextnode (k))
+ struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+ LSDB_FOREACH_LSA_TIR (vty, showfunc, oa->lsdb, type, id, o->router_id);
+ }
+ for (i = listhead (o->area_list); i; nextnode (i))
+ {
+ struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+ for (j = listhead (oa->if_list); j; nextnode (j))
{
- o6i = (struct ospf6_interface *) getdata (k);
- vty_out (vty, " interface %s area %s%s",
- o6i->interface->name, area->str, VTY_NEWLINE);
+ struct ospf6_interface *oi = (struct ospf6_interface *) getdata (j);
+ LSDB_FOREACH_LSA_TIR (vty, showfunc, oi->lsdb, type, id, o->router_id);
}
}
- vty_out (vty, "!%s", VTY_NEWLINE);
- return 0;
+
+ return CMD_SUCCESS;
}
-/* OSPF6 node structure. */
-struct cmd_node ospf6_node =
-{
- OSPF6_NODE,
- "%s(config-ospf6)# ",
- vtysh: 1
-};
+ALIAS (show_ipv6_ospf6_database_type_id_self_originated,
+ show_ipv6_ospf6_database_type_id_self_originated_detail_cmd,
+ "show ipv6 ospf6 database "
+ "(router|network|inter-prefix|inter-router|as-external|"
+ "group-membership|type-7|link|intra-prefix) A.B.C.D self-originated "
+ "(dump|internal)",
+ SHOW_STR
+ IPV6_STR
+ OSPF6_STR
+ "Display Link state database\n"
+ "Display Router LSAs\n"
+ "Display Network LSAs\n"
+ "Display Inter-Area-Prefix LSAs\n"
+ "Display Inter-Area-Router LSAs\n"
+ "Display As-External LSAs\n"
+ "Display Group-Membership LSAs\n"
+ "Display Type-7 LSAs\n"
+ "Display Link LSAs\n"
+ "Display Intra-Area-Prefix LSAs\n"
+ "Specify Link state ID as IPv4 address notation\n"
+ "Display Self-originated LSAs\n"
+ "Display details of LSAs\n"
+ "Dump LSAs\n"
+ "Display LSA's internal information\n"
+ );
+
+
/* Install ospf related commands. */
void
ospf6_init ()
{
- /* Install ospf6 top node. */
- install_node (&ospf6_node, ospf6_config_write);
+ install_node (&debug_node, config_write_ospf6_debug);
+
+ install_element_ospf6_debug_message ();
+ install_element_ospf6_debug_lsa ();
+ install_element_ospf6_debug_interface ();
+ install_element_ospf6_debug_neighbor ();
+ install_element_ospf6_debug_zebra ();
+ install_element_ospf6_debug_spf ();
+ install_element_ospf6_debug_route ();
+ install_element_ospf6_debug_asbr ();
- install_element (VIEW_NODE, &show_ipv6_ospf6_cmd);
install_element (VIEW_NODE, &show_version_ospf6_cmd);
- install_element (ENABLE_NODE, &show_ipv6_ospf6_cmd);
+ install_element (VIEW_NODE, &show_ipv6_ospf6_database_cmd);
+ install_element (VIEW_NODE, &show_ipv6_ospf6_database_detail_cmd);
+ install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_cmd);
+ install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_detail_cmd);
+ install_element (VIEW_NODE, &show_ipv6_ospf6_database_id_cmd);
+ install_element (VIEW_NODE, &show_ipv6_ospf6_database_id_detail_cmd);
+ install_element (VIEW_NODE, &show_ipv6_ospf6_database_router_cmd);
+ install_element (VIEW_NODE, &show_ipv6_ospf6_database_router_detail_cmd);
+ install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_id_cmd);
+ install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_id_detail_cmd);
+ install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_router_cmd);
+ install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_router_detail_cmd);
+ install_element (VIEW_NODE, &show_ipv6_ospf6_database_id_router_cmd);
+ install_element (VIEW_NODE, &show_ipv6_ospf6_database_id_router_detail_cmd);
+ install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_id_router_cmd);
+ install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_id_router_detail_cmd);
+ install_element (VIEW_NODE, &show_ipv6_ospf6_database_self_originated_cmd);
+ install_element (VIEW_NODE, &show_ipv6_ospf6_database_self_originated_detail_cmd);
+ install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_self_originated_cmd);
+ install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_self_originated_detail_cmd);
+ install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_id_self_originated_cmd);
+ install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_id_self_originated_detail_cmd);
+
install_element (ENABLE_NODE, &show_version_ospf6_cmd);
- install_element (ENABLE_NODE, &reload_cmd);
- install_element (CONFIG_NODE, &router_ospf6_cmd);
- install_element (CONFIG_NODE, &interface_cmd);
- install_element (CONFIG_NODE, &no_interface_cmd);
-#ifdef OSPF6_STATISTICS
- install_element (VIEW_NODE, &show_ipv6_ospf6_statistics_cmd);
- install_element (ENABLE_NODE, &show_ipv6_ospf6_statistics_cmd);
-#endif /* OSPF6_STATISTICS */
-#ifdef OSPF6_GARBAGE_COLLECT
- install_element (ENABLE_NODE, &garbage_collection_cmd);
-#endif /* OSPF6_GARBAGE_COLLECT */
-#ifdef HAVE_SETPROCTITLE
- install_element (CONFIG_NODE, &set_proctitle_cmd);
-#endif /* HAVE_SETPROCTITLE */
-
- install_default (OSPF6_NODE);
- install_element (OSPF6_NODE, &ospf6_router_id_cmd);
- install_element (OSPF6_NODE, &ospf6_interface_area_cmd);
- install_element (OSPF6_NODE, &ospf6_interface_area_passive_cmd);
- install_element (OSPF6_NODE, &ospf6_interface_area_plist_cmd);
- install_element (OSPF6_NODE, &ospf6_interface_area_plist_passive_cmd);
- install_element (OSPF6_NODE, &no_ospf6_interface_area_cmd);
- install_element (OSPF6_NODE, &ospf6_passive_interface_cmd);
- install_element (OSPF6_NODE, &no_ospf6_passive_interface_cmd);
- install_element (OSPF6_NODE, &ospf6_area_range_cmd);
-
- /* Make empty list of top list. */
- if_init ();
-
- /* Install access list */
- access_list_init ();
-
- /* Install prefix list */
- prefix_list_init ();
-
- ospf6_dump_init ();
-
-#ifdef HAVE_OSPF6_DAMP
- ospf6_damp_init ();
-#endif /*HAVE_OSPF6_DAMP*/
-
- ospf6_hook_init ();
- ospf6_lsa_init ();
+ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_cmd);
+ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_detail_cmd);
+ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_cmd);
+ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_detail_cmd);
+ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_id_cmd);
+ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_id_detail_cmd);
+ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_router_cmd);
+ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_router_detail_cmd);
+ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_id_cmd);
+ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_id_detail_cmd);
+ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_router_cmd);
+ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_router_detail_cmd);
+ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_id_router_cmd);
+ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_id_router_detail_cmd);
+ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_id_router_cmd);
+ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_id_router_detail_cmd);
+ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_self_originated_cmd);
+ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_self_originated_detail_cmd);
+ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_self_originated_cmd);
+ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_self_originated_detail_cmd);
+ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_id_self_originated_cmd);
+ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_id_self_originated_detail_cmd);
ospf6_top_init ();
ospf6_area_init ();
@@ -776,53 +1256,14 @@ ospf6_init ()
ospf6_neighbor_init ();
ospf6_zebra_init ();
- ospf6_routemap_init ();
- ospf6_lsdb_init ();
-
+ ospf6_lsa_init ();
ospf6_spf_init ();
-
ospf6_intra_init ();
- ospf6_abr_init ();
ospf6_asbr_init ();
-}
-
-void
-ospf6_terminate ()
-{
- /* stop ospf6 */
- ospf6_stop ();
- /* log */
- zlog (NULL, LOG_INFO, "OSPF6d terminated");
+ /* Make ospf protocol socket. */
+ ospf6_serv_sock ();
+ thread_add_read (master, ospf6_receive, NULL, ospf6_sock);
}
-void
-ospf6_maxage_remover ()
-{
-#if 0
- if (IS_OSPF6_DUMP_LSDB)
- zlog_info ("MaxAge Remover");
-#endif
-
- ospf6_top_schedule_maxage_remover (NULL, 0, ospf6);
- (*ospf6->foreach_area) (ospf6, NULL, 0,
- ospf6_area_schedule_maxage_remover);
- (*ospf6->foreach_if) (ospf6, NULL, 0,
- ospf6_interface_schedule_maxage_remover);
-}
-
-
-
-void *
-ospf6_lsa_get_scope (u_int16_t type, struct ospf6_interface *o6i)
-{
- if (OSPF6_LSA_IS_SCOPE_LINKLOCAL (ntohs (type)))
- return o6i;
- else if (OSPF6_LSA_IS_SCOPE_AREA (ntohs (type)))
- return o6i->area;
- else if (OSPF6_LSA_IS_SCOPE_AS (ntohs (type)))
- return o6i->area->ospf6;
- else
- return NULL;
-}