📄 ospf6d.c
字号:
/* * Copyright (C) 2003 Yasuhiro Ohara * * This file is part of GNU Zebra. * * GNU Zebra is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * GNU Zebra is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Zebra; see the file COPYING. If not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */#include <zebra.h>#include "thread.h"#include "linklist.h"#include "vty.h"#include "command.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"#include "ospf6_abr.h"#include "ospf6_flood.h"#include "ospf6d.h"#ifdef HAVE_SNMP#include "ospf6_snmp.h"#endif /*HAVE_SNMP*/char ospf6_daemon_version[] = OSPF6_DAEMON_VERSION;voidospf6_debug (){}struct route_node *route_prev (struct route_node *node){ struct route_node *end; struct route_node *prev = NULL; end = node; node = node->parent; if (node) route_lock_node (node); while (node) { prev = node; node = route_next (node); if (node == end) { route_unlock_node (node); node = NULL; } } route_unlock_node (end); if (prev) route_lock_node (prev); return prev;}/* show database functions */DEFUN (show_version_ospf6, show_version_ospf6_cmd, "show version ospf6", SHOW_STR "Displays ospf6d version\n" ){ vty_out (vty, "Zebra OSPF6d Version: %s%s", ospf6_daemon_version, VNL); return CMD_SUCCESS;}struct cmd_node debug_node ={ DEBUG_NODE, "", 1 /* VTYSH */};intconfig_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); config_write_ospf6_debug_abr (vty); config_write_ospf6_debug_flood (vty); vty_out (vty, "!%s", VNL); return 0;}#define AREA_LSDB_TITLE_FORMAT \ "%s Area Scoped Link State Database (Area %s)%s%s"#define IF_LSDB_TITLE_FORMAT \ "%s I/F Scoped Link State Database (I/F %s in Area %s)%s%s"#define AS_LSDB_TITLE_FORMAT \ "%s AS Scoped Link State Database%s%s"static intparse_show_level (int argc, char **argv){ int level = 0; if (argc) { if (! strncmp (argv[0], "de", 2)) level = OSPF6_LSDB_SHOW_LEVEL_DETAIL; else if (! strncmp (argv[0], "du", 2)) level = OSPF6_LSDB_SHOW_LEVEL_DUMP; else if (! strncmp (argv[0], "in", 2)) level = OSPF6_LSDB_SHOW_LEVEL_INTERNAL; } else level = OSPF6_LSDB_SHOW_LEVEL_NORMAL; return level;}static u_int16_tparse_type_spec (int argc, char **argv){ u_int16_t type = 0; assert (argc); 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); return type;}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" ){ int level; listnode i, j; struct ospf6 *o = ospf6; struct ospf6_area *oa; struct ospf6_interface *oi; OSPF6_CMD_CHECK_RUNNING (); level = parse_show_level (argc, argv); for (i = listhead (o->area_list); i; nextnode (i)) { oa = (struct ospf6_area *) getdata (i); vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL); ospf6_lsdb_show (vty, level, NULL, NULL, NULL, oa->lsdb); } for (i = listhead (o->area_list); i; nextnode (i)) { oa = (struct ospf6_area *) getdata (i); for (j = listhead (oa->if_list); j; nextnode (j)) { oi = (struct ospf6_interface *) getdata (j); vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL, oi->interface->name, oa->name, VNL, VNL); ospf6_lsdb_show (vty, level, NULL, NULL, NULL, oi->lsdb); } } vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL); ospf6_lsdb_show (vty, level, NULL, NULL, NULL, o->lsdb); vty_out (vty, "%s", VNL); return CMD_SUCCESS;}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 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" ){ int level; listnode i, j; struct ospf6 *o = ospf6; struct ospf6_area *oa; struct ospf6_interface *oi; u_int16_t type = 0; OSPF6_CMD_CHECK_RUNNING (); type = parse_type_spec (argc, argv); argc--; argv++; level = parse_show_level (argc, argv); switch (OSPF6_LSA_SCOPE (type)) { case OSPF6_SCOPE_AREA: for (i = listhead (o->area_list); i; nextnode (i)) { oa = (struct ospf6_area *) getdata (i); vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL); ospf6_lsdb_show (vty, level, &type, NULL, NULL, oa->lsdb); } break; case OSPF6_SCOPE_LINKLOCAL: for (i = listhead (o->area_list); i; nextnode (i)) { oa = (struct ospf6_area *) getdata (i); for (j = listhead (oa->if_list); j; nextnode (j)) { oi = (struct ospf6_interface *) getdata (j); vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL, oi->interface->name, oa->name, VNL, VNL); ospf6_lsdb_show (vty, level, &type, NULL, NULL, oi->lsdb); } } break; case OSPF6_SCOPE_AS: vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL); ospf6_lsdb_show (vty, level, &type, NULL, NULL, o->lsdb); break; default: assert (0); break; } vty_out (vty, "%s", VNL); return CMD_SUCCESS;}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 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 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 IPV6_STR OSPF6_STR "Display Link state database\n" "Any Link state Type\n" "Specify Link state ID as IPv4 address notation\n" ){ int level; listnode i, j; struct ospf6 *o = ospf6; struct ospf6_area *oa; struct ospf6_interface *oi; u_int32_t id = 0; OSPF6_CMD_CHECK_RUNNING (); if ((inet_pton (AF_INET, argv[0], &id)) != 1) { vty_out (vty, "Link State ID is not parsable: %s%s", argv[0], VNL); return CMD_SUCCESS; } argc--; argv++; level = parse_show_level (argc, argv); for (i = listhead (o->area_list); i; nextnode (i)) { oa = (struct ospf6_area *) getdata (i); vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL); ospf6_lsdb_show (vty, level, NULL, &id, NULL, oa->lsdb); } for (i = listhead (o->area_list); i; nextnode (i)) { oa = (struct ospf6_area *) getdata (i); for (j = listhead (oa->if_list); j; nextnode (j)) { oi = (struct ospf6_interface *) getdata (j); vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL, oi->interface->name, oa->name, VNL, VNL); ospf6_lsdb_show (vty, level, NULL, &id, NULL, oi->lsdb); } } vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL); ospf6_lsdb_show (vty, level, NULL, &id, NULL, o->lsdb); vty_out (vty, "%s", VNL); return CMD_SUCCESS;}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" "Specify Link state ID as IPv4 address notation\n" "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, "show ipv6 ospf6 database linkstate-id A.B.C.D", SHOW_STR IPV6_STR OSPF6_STR "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, "show ipv6 ospf6 database linkstate-id A.B.C.D " "(detail|dump|internal)", SHOW_STR IPV6_STR OSPF6_STR "Display Link state database\n" "Search by 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" ){ int level; listnode i, j; struct ospf6 *o = ospf6; struct ospf6_area *oa; struct ospf6_interface *oi; u_int32_t adv_router = 0; OSPF6_CMD_CHECK_RUNNING (); if ((inet_pton (AF_INET, argv[0], &adv_router)) != 1) { vty_out (vty, "Advertising Router is not parsable: %s%s", argv[0], VNL); return CMD_SUCCESS; } argc--; argv++; level = parse_show_level (argc, argv); for (i = listhead (o->area_list); i; nextnode (i)) { oa = (struct ospf6_area *) getdata (i); vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL); ospf6_lsdb_show (vty, level, NULL, NULL, &adv_router, oa->lsdb); } for (i = listhead (o->area_list); i; nextnode (i)) { oa = (struct ospf6_area *) getdata (i); for (j = listhead (oa->if_list); j; nextnode (j)) { oi = (struct ospf6_interface *) getdata (j); vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL, oi->interface->name, oa->name, VNL, VNL); ospf6_lsdb_show (vty, level, NULL, NULL, &adv_router, oi->lsdb); } } vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL); ospf6_lsdb_show (vty, level, NULL, NULL, &adv_router, o->lsdb); vty_out (vty, "%s", VNL); 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -