2 * Copyright (C) 2003 Yasuhiro Ohara
4 * This file is part of GNU Zebra.
6 * GNU Zebra is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2, or (at your option) any
11 * GNU Zebra is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
16 * You should have received a copy of the GNU General Public License along
17 * with this program; see the file COPYING; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
30 #include "ospf6_proto.h"
31 #include "ospf6_top.h"
32 #include "ospf6_network.h"
33 #include "ospf6_lsa.h"
34 #include "ospf6_lsdb.h"
35 #include "ospf6_message.h"
36 #include "ospf6_route.h"
37 #include "ospf6_zebra.h"
38 #include "ospf6_spf.h"
39 #include "ospf6_area.h"
40 #include "ospf6_interface.h"
41 #include "ospf6_neighbor.h"
42 #include "ospf6_intra.h"
43 #include "ospf6_asbr.h"
44 #include "ospf6_abr.h"
45 #include "ospf6_flood.h"
47 #include "ospf6_bfd.h"
50 #include "ospf6_nssa.h"
51 #include "ospf6_auth_trailer.h"
53 DEFINE_MGROUP(OSPF6D
, "ospf6d");
55 struct route_node
*route_prev(struct route_node
*node
)
57 struct route_node
*end
;
58 struct route_node
*prev
= NULL
;
63 route_lock_node(node
);
66 node
= route_next(node
);
68 route_unlock_node(node
);
72 route_unlock_node(end
);
74 route_lock_node(prev
);
79 static int config_write_ospf6_debug(struct vty
*vty
);
80 static struct cmd_node debug_node
= {
84 .config_write
= config_write_ospf6_debug
,
87 static int config_write_ospf6_debug(struct vty
*vty
)
89 config_write_ospf6_debug_message(vty
);
90 config_write_ospf6_debug_lsa(vty
);
91 config_write_ospf6_debug_zebra(vty
);
92 config_write_ospf6_debug_interface(vty
);
93 config_write_ospf6_debug_neighbor(vty
);
94 config_write_ospf6_debug_spf(vty
);
95 config_write_ospf6_debug_route(vty
);
96 config_write_ospf6_debug_brouter(vty
);
97 config_write_ospf6_debug_asbr(vty
);
98 config_write_ospf6_debug_abr(vty
);
99 config_write_ospf6_debug_flood(vty
);
100 config_write_ospf6_debug_nssa(vty
);
101 config_write_ospf6_debug_gr_helper(vty
);
102 config_write_ospf6_debug_auth(vty
);
107 DEFUN_NOSH (show_debugging_ospf6
,
108 show_debugging_ospf6_cmd
,
109 "show debugging [ospf6]",
114 vty_out(vty
, "OSPF6 debugging status:\n");
116 config_write_ospf6_debug(vty
);
118 cmd_show_lib_debugs(vty
);
123 #define AREA_LSDB_TITLE_FORMAT \
124 "\n Area Scoped Link State Database (Area %s)\n\n"
125 #define IF_LSDB_TITLE_FORMAT \
126 "\n I/F Scoped Link State Database (I/F %s in Area %s)\n\n"
127 #define AS_LSDB_TITLE_FORMAT "\n AS Scoped Link State Database\n\n"
129 static int parse_show_level(int idx_level
, int argc
, struct cmd_token
**argv
)
131 int level
= OSPF6_LSDB_SHOW_LEVEL_NORMAL
;
133 if (argc
> idx_level
) {
134 if (strmatch(argv
[idx_level
]->text
, "detail"))
135 level
= OSPF6_LSDB_SHOW_LEVEL_DETAIL
;
136 else if (strmatch(argv
[idx_level
]->text
, "dump"))
137 level
= OSPF6_LSDB_SHOW_LEVEL_DUMP
;
138 else if (strmatch(argv
[idx_level
]->text
, "internal"))
139 level
= OSPF6_LSDB_SHOW_LEVEL_INTERNAL
;
145 static uint16_t parse_type_spec(int idx_lsa
, int argc
, struct cmd_token
**argv
)
149 if (argc
> idx_lsa
) {
150 if (strmatch(argv
[idx_lsa
]->text
, "router"))
151 type
= htons(OSPF6_LSTYPE_ROUTER
);
152 else if (strmatch(argv
[idx_lsa
]->text
, "network"))
153 type
= htons(OSPF6_LSTYPE_NETWORK
);
154 else if (strmatch(argv
[idx_lsa
]->text
, "as-external"))
155 type
= htons(OSPF6_LSTYPE_AS_EXTERNAL
);
156 else if (strmatch(argv
[idx_lsa
]->text
, "intra-prefix"))
157 type
= htons(OSPF6_LSTYPE_INTRA_PREFIX
);
158 else if (strmatch(argv
[idx_lsa
]->text
, "inter-router"))
159 type
= htons(OSPF6_LSTYPE_INTER_ROUTER
);
160 else if (strmatch(argv
[idx_lsa
]->text
, "inter-prefix"))
161 type
= htons(OSPF6_LSTYPE_INTER_PREFIX
);
162 else if (strmatch(argv
[idx_lsa
]->text
, "link"))
163 type
= htons(OSPF6_LSTYPE_LINK
);
164 else if (strmatch(argv
[idx_lsa
]->text
, "type-7"))
165 type
= htons(OSPF6_LSTYPE_TYPE_7
);
171 void ospf6_lsdb_show(struct vty
*vty
, enum ospf_lsdb_show_level level
,
172 uint16_t *type
, uint32_t *id
, uint32_t *adv_router
,
173 struct ospf6_lsdb
*lsdb
, json_object
*json_obj
,
176 struct ospf6_lsa
*lsa
;
177 const struct route_node
*end
= NULL
;
178 void (*showfunc
)(struct vty
*, struct ospf6_lsa
*, json_object
*,
180 json_object
*json_array
= NULL
;
183 case OSPF6_LSDB_SHOW_LEVEL_DETAIL
:
184 showfunc
= ospf6_lsa_show
;
186 case OSPF6_LSDB_SHOW_LEVEL_INTERNAL
:
187 showfunc
= ospf6_lsa_show_internal
;
189 case OSPF6_LSDB_SHOW_LEVEL_DUMP
:
190 showfunc
= ospf6_lsa_show_dump
;
192 case OSPF6_LSDB_SHOW_LEVEL_NORMAL
:
194 showfunc
= ospf6_lsa_show_summary
;
198 json_array
= json_object_new_array();
200 if (type
&& id
&& adv_router
) {
201 lsa
= ospf6_lsdb_lookup(*type
, *id
, *adv_router
, lsdb
);
203 if (level
== OSPF6_LSDB_SHOW_LEVEL_NORMAL
)
204 ospf6_lsa_show(vty
, lsa
, json_array
, use_json
);
206 (*showfunc
)(vty
, lsa
, json_array
, use_json
);
210 json_object_object_add(json_obj
, "lsa", json_array
);
214 if ((level
== OSPF6_LSDB_SHOW_LEVEL_NORMAL
) && !use_json
)
215 ospf6_lsa_show_summary_header(vty
);
217 end
= ospf6_lsdb_head(lsdb
, !!type
+ !!(type
&& adv_router
),
218 type
? *type
: 0, adv_router
? *adv_router
: 0,
221 if ((!adv_router
|| lsa
->header
->adv_router
== *adv_router
)
222 && (!id
|| lsa
->header
->id
== *id
))
223 (*showfunc
)(vty
, lsa
, json_array
, use_json
);
224 lsa
= ospf6_lsdb_next(end
, lsa
);
228 json_object_object_add(json_obj
, "lsa", json_array
);
231 static void ospf6_lsdb_show_wrapper(struct vty
*vty
,
232 enum ospf_lsdb_show_level level
,
233 uint16_t *type
, uint32_t *id
,
234 uint32_t *adv_router
, bool uj
,
237 struct listnode
*i
, *j
;
238 struct ospf6
*o
= ospf6
;
239 struct ospf6_area
*oa
;
240 struct ospf6_interface
*oi
;
241 json_object
*json
= NULL
;
242 json_object
*json_array
= NULL
;
243 json_object
*json_obj
= NULL
;
246 json
= json_object_new_object();
247 json_array
= json_object_new_array();
249 for (ALL_LIST_ELEMENTS_RO(o
->area_list
, i
, oa
)) {
251 json_obj
= json_object_new_object();
252 json_object_string_add(json_obj
, "areaId", oa
->name
);
254 vty_out(vty
, AREA_LSDB_TITLE_FORMAT
, oa
->name
);
255 ospf6_lsdb_show(vty
, level
, type
, id
, adv_router
, oa
->lsdb
,
258 json_object_array_add(json_array
, json_obj
);
261 json_object_object_add(json
, "areaScopedLinkStateDb",
265 json_array
= json_object_new_array();
266 for (ALL_LIST_ELEMENTS_RO(o
->area_list
, i
, oa
)) {
267 for (ALL_LIST_ELEMENTS_RO(oa
->if_list
, j
, oi
)) {
269 json_obj
= json_object_new_object();
270 json_object_string_add(json_obj
, "areaId",
272 json_object_string_add(json_obj
, "interface",
273 oi
->interface
->name
);
275 vty_out(vty
, IF_LSDB_TITLE_FORMAT
,
276 oi
->interface
->name
, oa
->name
);
277 ospf6_lsdb_show(vty
, level
, type
, id
, adv_router
,
278 oi
->lsdb
, json_obj
, uj
);
280 json_object_array_add(json_array
, json_obj
);
284 json_object_object_add(json
, "interfaceScopedLinkStateDb",
287 json_array
= json_object_new_array();
288 json_obj
= json_object_new_object();
290 vty_out(vty
, AS_LSDB_TITLE_FORMAT
);
292 ospf6_lsdb_show(vty
, level
, type
, id
, adv_router
, o
->lsdb
, json_obj
,
296 json_object_array_add(json_array
, json_obj
);
297 json_object_object_add(json
, "asScopedLinkStateDb", json_array
);
304 static void ospf6_lsdb_type_show_wrapper(struct vty
*vty
,
305 enum ospf_lsdb_show_level level
,
306 uint16_t *type
, uint32_t *id
,
307 uint32_t *adv_router
, bool uj
,
310 struct listnode
*i
, *j
;
311 struct ospf6
*o
= ospf6
;
312 struct ospf6_area
*oa
;
313 struct ospf6_interface
*oi
;
314 json_object
*json
= NULL
;
315 json_object
*json_array
= NULL
;
316 json_object
*json_obj
= NULL
;
319 json
= json_object_new_object();
320 json_array
= json_object_new_array();
323 switch (OSPF6_LSA_SCOPE(*type
)) {
324 case OSPF6_SCOPE_AREA
:
325 for (ALL_LIST_ELEMENTS_RO(o
->area_list
, i
, oa
)) {
327 json_obj
= json_object_new_object();
328 json_object_string_add(json_obj
, "areaId",
331 vty_out(vty
, AREA_LSDB_TITLE_FORMAT
, oa
->name
);
333 ospf6_lsdb_show(vty
, level
, type
, id
, adv_router
,
334 oa
->lsdb
, json_obj
, uj
);
336 json_object_array_add(json_array
, json_obj
);
339 json_object_object_add(json
, "areaScopedLinkStateDb",
343 case OSPF6_SCOPE_LINKLOCAL
:
344 for (ALL_LIST_ELEMENTS_RO(o
->area_list
, i
, oa
)) {
345 for (ALL_LIST_ELEMENTS_RO(oa
->if_list
, j
, oi
)) {
347 json_obj
= json_object_new_object();
348 json_object_string_add(
349 json_obj
, "areaId", oa
->name
);
350 json_object_string_add(
351 json_obj
, "interface",
352 oi
->interface
->name
);
354 vty_out(vty
, IF_LSDB_TITLE_FORMAT
,
355 oi
->interface
->name
, oa
->name
);
357 ospf6_lsdb_show(vty
, level
, type
, id
,
358 adv_router
, oi
->lsdb
, json_obj
,
362 json_object_array_add(json_array
,
367 json_object_object_add(
368 json
, "interfaceScopedLinkStateDb", json_array
);
373 json_obj
= json_object_new_object();
375 vty_out(vty
, AS_LSDB_TITLE_FORMAT
);
377 ospf6_lsdb_show(vty
, level
, type
, id
, adv_router
, o
->lsdb
,
380 json_object_array_add(json_array
, json_obj
);
381 json_object_object_add(json
, "asScopedLinkStateDb",
396 DEFUN(show_ipv6_ospf6_database
, show_ipv6_ospf6_database_cmd
,
397 "show ipv6 ospf6 [vrf <NAME|all>] database [<detail|dump|internal>] [json]",
398 SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
400 "Display Link state database\n"
401 "Display details of LSAs\n"
403 "Display LSA's internal information\n" JSON_STR
)
407 struct listnode
*node
;
409 const char *vrf_name
= NULL
;
410 bool all_vrf
= false;
412 bool uj
= use_json(argc
, argv
);
414 OSPF6_FIND_VRF_ARGS(argv
, argc
, idx_vrf
, vrf_name
, all_vrf
);
418 level
= parse_show_level(idx_level
, argc
, argv
);
419 for (ALL_LIST_ELEMENTS_RO(om6
->ospf6
, node
, ospf6
)) {
420 if (all_vrf
|| strcmp(ospf6
->name
, vrf_name
) == 0) {
421 ospf6_lsdb_show_wrapper(vty
, level
, NULL
, NULL
, NULL
,
428 OSPF6_CMD_CHECK_VRF(uj
, all_vrf
, ospf6
);
433 DEFUN(show_ipv6_ospf6_database_type
, show_ipv6_ospf6_database_type_cmd
,
434 "show ipv6 ospf6 [vrf <NAME|all>] database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> [<detail|dump|internal>] [json]",
435 SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
437 "Display Link state database\n"
438 "Display Router LSAs\n"
439 "Display Network LSAs\n"
440 "Display Inter-Area-Prefix LSAs\n"
441 "Display Inter-Area-Router LSAs\n"
442 "Display As-External LSAs\n"
443 "Display Group-Membership LSAs\n"
444 "Display Type-7 LSAs\n"
445 "Display Link LSAs\n"
446 "Display Intra-Area-Prefix LSAs\n"
447 "Display details of LSAs\n"
449 "Display LSA's internal information\n" JSON_STR
)
454 bool uj
= use_json(argc
, argv
);
455 struct listnode
*node
;
458 const char *vrf_name
= NULL
;
459 bool all_vrf
= false;
462 OSPF6_FIND_VRF_ARGS(argv
, argc
, idx_vrf
, vrf_name
, all_vrf
);
468 type
= parse_type_spec(idx_lsa
, argc
, argv
);
469 level
= parse_show_level(idx_level
, argc
, argv
);
471 for (ALL_LIST_ELEMENTS_RO(om6
->ospf6
, node
, ospf6
)) {
472 if (all_vrf
|| strcmp(ospf6
->name
, vrf_name
) == 0) {
473 ospf6_lsdb_type_show_wrapper(vty
, level
, &type
, NULL
,
480 OSPF6_CMD_CHECK_VRF(uj
, all_vrf
, ospf6
);
485 DEFUN(show_ipv6_ospf6_database_id
, show_ipv6_ospf6_database_id_cmd
,
486 "show ipv6 ospf6 [vrf <NAME|all>] database <*|linkstate-id> A.B.C.D [<detail|dump|internal>] [json]",
487 SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
489 "Display Link state database\n"
490 "Any Link state Type\n"
491 "Search by Link state ID\n"
492 "Specify Link state ID as IPv4 address notation\n"
493 "Display details of LSAs\n"
495 "Display LSA's internal information\n" JSON_STR
)
500 bool uj
= use_json(argc
, argv
);
501 struct listnode
*node
;
504 const char *vrf_name
= NULL
;
505 bool all_vrf
= false;
508 OSPF6_FIND_VRF_ARGS(argv
, argc
, idx_vrf
, vrf_name
, all_vrf
);
509 if (argv
[idx_ipv4
]->type
== IPV4_TKN
)
510 inet_pton(AF_INET
, argv
[idx_ipv4
]->arg
, &id
);
512 level
= parse_show_level(idx_level
, argc
, argv
);
514 for (ALL_LIST_ELEMENTS_RO(om6
->ospf6
, node
, ospf6
)) {
515 if (all_vrf
|| strcmp(ospf6
->name
, vrf_name
) == 0) {
516 ospf6_lsdb_show_wrapper(vty
, level
, NULL
, &id
, NULL
, uj
,
523 OSPF6_CMD_CHECK_VRF(uj
, all_vrf
, ospf6
);
528 DEFUN(show_ipv6_ospf6_database_router
, show_ipv6_ospf6_database_router_cmd
,
529 "show ipv6 ospf6 [vrf <NAME|all>] database <*|adv-router> * A.B.C.D <detail|dump|internal> [json]",
530 SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
532 "Display Link state database\n"
533 "Any Link state Type\n"
534 "Search by Advertising Router\n"
535 "Any Link state ID\n"
536 "Specify Advertising Router as IPv4 address notation\n"
537 "Display details of LSAs\n"
539 "Display LSA's internal information\n" JSON_STR
)
544 struct listnode
*node
;
546 uint32_t adv_router
= 0;
547 const char *vrf_name
= NULL
;
548 bool all_vrf
= false;
550 bool uj
= use_json(argc
, argv
);
552 OSPF6_FIND_VRF_ARGS(argv
, argc
, idx_vrf
, vrf_name
, all_vrf
);
558 inet_pton(AF_INET
, argv
[idx_ipv4
]->arg
, &adv_router
);
559 level
= parse_show_level(idx_level
, argc
, argv
);
561 for (ALL_LIST_ELEMENTS_RO(om6
->ospf6
, node
, ospf6
)) {
562 if (all_vrf
|| strcmp(ospf6
->name
, vrf_name
) == 0) {
563 ospf6_lsdb_show_wrapper(vty
, level
, NULL
, NULL
,
564 &adv_router
, uj
, ospf6
);
570 OSPF6_CMD_CHECK_VRF(uj
, all_vrf
, ospf6
);
575 static int ipv6_ospf6_database_aggr_router_common(struct vty
*vty
,
579 int level
= OSPF6_LSDB_SHOW_LEVEL_DETAIL
;
580 uint16_t type
= htons(OSPF6_LSTYPE_ROUTER
);
582 struct ospf6_area
*oa
;
583 struct ospf6_lsdb
*lsdb
;
585 for (ALL_LIST_ELEMENTS_RO(ospf6
->area_list
, i
, oa
)) {
586 if (adv_router
== ospf6
->router_id
)
587 lsdb
= oa
->lsdb_self
;
590 if (ospf6_create_single_router_lsa(oa
, lsdb
, adv_router
)
592 vty_out(vty
, "Adv router is not found in LSDB.");
595 ospf6_lsdb_show(vty
, level
, &type
, NULL
, NULL
,
596 oa
->temp_router_lsa_lsdb
, NULL
, false);
597 /* Remove the temp cache */
598 ospf6_remove_temp_router_lsa(oa
);
606 show_ipv6_ospf6_database_aggr_router
,
607 show_ipv6_ospf6_database_aggr_router_cmd
,
608 "show ipv6 ospf6 [vrf <NAME|all>] database aggr adv-router A.B.C.D",
609 SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
611 "Display Link state database\n"
612 "Aggregated Router LSA\n"
613 "Search by Advertising Router\n"
614 "Specify Advertising Router as IPv4 address notation\n")
617 struct listnode
*node
;
619 uint32_t adv_router
= 0;
620 const char *vrf_name
= NULL
;
621 bool all_vrf
= false;
624 OSPF6_FIND_VRF_ARGS(argv
, argc
, idx_vrf
, vrf_name
, all_vrf
);
628 inet_pton(AF_INET
, argv
[idx_ipv4
]->arg
, &adv_router
);
630 for (ALL_LIST_ELEMENTS_RO(om6
->ospf6
, node
, ospf6
)) {
631 if (all_vrf
|| strcmp(ospf6
->name
, vrf_name
) == 0) {
632 ipv6_ospf6_database_aggr_router_common(vty
, adv_router
,
640 OSPF6_CMD_CHECK_VRF(false, all_vrf
, ospf6
);
645 DEFUN(show_ipv6_ospf6_database_type_id
, show_ipv6_ospf6_database_type_id_cmd
,
646 "show ipv6 ospf6 [vrf <NAME|all>] database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> linkstate-id A.B.C.D [<detail|dump|internal>] [json]",
647 SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
649 "Display Link state database\n"
650 "Display Router LSAs\n"
651 "Display Network LSAs\n"
652 "Display Inter-Area-Prefix LSAs\n"
653 "Display Inter-Area-Router LSAs\n"
654 "Display As-External LSAs\n"
655 "Display Group-Membership LSAs\n"
656 "Display Type-7 LSAs\n"
657 "Display Link LSAs\n"
658 "Display Intra-Area-Prefix LSAs\n"
659 "Search by Link state ID\n"
660 "Specify Link state ID as IPv4 address notation\n"
661 "Display details of LSAs\n"
663 "Display LSA's internal information\n" JSON_STR
)
669 bool uj
= use_json(argc
, argv
);
670 struct listnode
*node
;
674 const char *vrf_name
= NULL
;
675 bool all_vrf
= false;
678 OSPF6_FIND_VRF_ARGS(argv
, argc
, idx_vrf
, vrf_name
, all_vrf
);
685 type
= parse_type_spec(idx_lsa
, argc
, argv
);
686 inet_pton(AF_INET
, argv
[idx_ipv4
]->arg
, &id
);
687 level
= parse_show_level(idx_level
, argc
, argv
);
689 for (ALL_LIST_ELEMENTS_RO(om6
->ospf6
, node
, ospf6
)) {
690 if (all_vrf
|| strcmp(ospf6
->name
, vrf_name
) == 0) {
691 ospf6_lsdb_type_show_wrapper(vty
, level
, &type
, &id
,
698 OSPF6_CMD_CHECK_VRF(uj
, all_vrf
, ospf6
);
703 DEFUN(show_ipv6_ospf6_database_type_router
,
704 show_ipv6_ospf6_database_type_router_cmd
,
705 "show ipv6 ospf6 [vrf <NAME|all>] database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> <*|adv-router> A.B.C.D [<detail|dump|internal>] [json]",
706 SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
708 "Display Link state database\n"
709 "Display Router LSAs\n"
710 "Display Network LSAs\n"
711 "Display Inter-Area-Prefix LSAs\n"
712 "Display Inter-Area-Router LSAs\n"
713 "Display As-External LSAs\n"
714 "Display Group-Membership LSAs\n"
715 "Display Type-7 LSAs\n"
716 "Display Link LSAs\n"
717 "Display Intra-Area-Prefix LSAs\n"
718 "Any Link state ID\n"
719 "Search by Advertising Router\n"
720 "Specify Advertising Router as IPv4 address notation\n"
721 "Display details of LSAs\n"
723 "Display LSA's internal information\n" JSON_STR
)
729 bool uj
= use_json(argc
, argv
);
730 struct listnode
*node
;
733 uint32_t adv_router
= 0;
734 const char *vrf_name
= NULL
;
735 bool all_vrf
= false;
738 OSPF6_FIND_VRF_ARGS(argv
, argc
, idx_vrf
, vrf_name
, all_vrf
);
745 type
= parse_type_spec(idx_lsa
, argc
, argv
);
746 inet_pton(AF_INET
, argv
[idx_ipv4
]->arg
, &adv_router
);
747 level
= parse_show_level(idx_level
, argc
, argv
);
749 for (ALL_LIST_ELEMENTS_RO(om6
->ospf6
, node
, ospf6
)) {
750 if (all_vrf
|| strcmp(ospf6
->name
, vrf_name
) == 0) {
751 ospf6_lsdb_type_show_wrapper(vty
, level
, &type
, NULL
,
752 &adv_router
, uj
, ospf6
);
759 OSPF6_CMD_CHECK_VRF(uj
, all_vrf
, ospf6
);
764 DEFUN(show_ipv6_ospf6_database_id_router
,
765 show_ipv6_ospf6_database_id_router_cmd
,
766 "show ipv6 ospf6 [vrf <NAME|all>] database * A.B.C.D A.B.C.D [<detail|dump|internal>] [json]",
767 SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
769 "Display Link state database\n"
770 "Any Link state Type\n"
771 "Specify Link state ID as IPv4 address notation\n"
772 "Specify Advertising Router as IPv4 address notation\n"
773 "Display details of LSAs\n"
775 "Display LSA's internal information\n" JSON_STR
)
781 bool uj
= use_json(argc
, argv
);
782 struct listnode
*node
;
785 uint32_t adv_router
= 0;
786 const char *vrf_name
= NULL
;
787 bool all_vrf
= false;
790 OSPF6_FIND_VRF_ARGS(argv
, argc
, idx_vrf
, vrf_name
, all_vrf
);
797 inet_pton(AF_INET
, argv
[idx_ls_id
]->arg
, &id
);
798 inet_pton(AF_INET
, argv
[idx_adv_rtr
]->arg
, &adv_router
);
799 level
= parse_show_level(idx_level
, argc
, argv
);
801 for (ALL_LIST_ELEMENTS_RO(om6
->ospf6
, node
, ospf6
)) {
802 if (all_vrf
|| strcmp(ospf6
->name
, vrf_name
) == 0) {
803 ospf6_lsdb_show_wrapper(vty
, level
, NULL
, &id
,
804 &adv_router
, uj
, ospf6
);
810 OSPF6_CMD_CHECK_VRF(uj
, all_vrf
, ospf6
);
815 DEFUN(show_ipv6_ospf6_database_adv_router_linkstate_id
,
816 show_ipv6_ospf6_database_adv_router_linkstate_id_cmd
,
817 "show ipv6 ospf6 [vrf <NAME|all>] database adv-router A.B.C.D linkstate-id A.B.C.D [<detail|dump|internal>] [json]",
818 SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
820 "Display Link state database\n"
821 "Search by Advertising Router\n"
822 "Specify Advertising Router as IPv4 address notation\n"
823 "Search by Link state ID\n"
824 "Specify Link state ID as IPv4 address notation\n"
825 "Display details of LSAs\n"
827 "Display LSA's internal information\n" JSON_STR
)
833 bool uj
= use_json(argc
, argv
);
834 struct listnode
*node
;
837 uint32_t adv_router
= 0;
838 const char *vrf_name
= NULL
;
839 bool all_vrf
= false;
842 OSPF6_FIND_VRF_ARGS(argv
, argc
, idx_vrf
, vrf_name
, all_vrf
);
848 inet_pton(AF_INET
, argv
[idx_adv_rtr
]->arg
, &adv_router
);
849 inet_pton(AF_INET
, argv
[idx_ls_id
]->arg
, &id
);
850 level
= parse_show_level(idx_level
, argc
, argv
);
852 for (ALL_LIST_ELEMENTS_RO(om6
->ospf6
, node
, ospf6
)) {
853 if (all_vrf
|| strcmp(ospf6
->name
, vrf_name
) == 0) {
854 ospf6_lsdb_show_wrapper(vty
, level
, NULL
, &id
,
855 &adv_router
, uj
, ospf6
);
861 OSPF6_CMD_CHECK_VRF(uj
, all_vrf
, ospf6
);
866 DEFUN(show_ipv6_ospf6_database_type_id_router
,
867 show_ipv6_ospf6_database_type_id_router_cmd
,
868 "show ipv6 ospf6 [vrf <NAME|all>] 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>] [json]",
869 SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
871 "Display Link state database\n"
872 "Display Router LSAs\n"
873 "Display Network LSAs\n"
874 "Display Inter-Area-Prefix LSAs\n"
875 "Display Inter-Area-Router LSAs\n"
876 "Display As-External LSAs\n"
877 "Display Group-Membership LSAs\n"
878 "Display Type-7 LSAs\n"
879 "Display Link LSAs\n"
880 "Display Intra-Area-Prefix LSAs\n"
881 "Specify Link state ID as IPv4 address notation\n"
882 "Specify Advertising Router as IPv4 address notation\n"
884 "Display LSA's internal information\n" JSON_STR
)
891 bool uj
= use_json(argc
, argv
);
892 struct listnode
*node
;
896 uint32_t adv_router
= 0;
897 const char *vrf_name
= NULL
;
898 bool all_vrf
= false;
901 OSPF6_FIND_VRF_ARGS(argv
, argc
, idx_vrf
, vrf_name
, all_vrf
);
909 type
= parse_type_spec(idx_lsa
, argc
, argv
);
910 inet_pton(AF_INET
, argv
[idx_ls_id
]->arg
, &id
);
911 inet_pton(AF_INET
, argv
[idx_adv_rtr
]->arg
, &adv_router
);
912 level
= parse_show_level(idx_level
, argc
, argv
);
914 for (ALL_LIST_ELEMENTS_RO(om6
->ospf6
, node
, ospf6
)) {
915 if (all_vrf
|| strcmp(ospf6
->name
, vrf_name
) == 0) {
916 ospf6_lsdb_type_show_wrapper(vty
, level
, &type
, &id
,
917 &adv_router
, uj
, ospf6
);
924 OSPF6_CMD_CHECK_VRF(uj
, all_vrf
, ospf6
);
930 DEFUN (show_ipv6_ospf6_database_type_adv_router_linkstate_id
,
931 show_ipv6_ospf6_database_type_adv_router_linkstate_id_cmd
,
932 "show ipv6 ospf6 [vrf <NAME|all>] database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> adv-router A.B.C.D linkstate-id A.B.C.D [<dump|internal>] [json]",
938 "Display Link state database\n"
939 "Display Router LSAs\n"
940 "Display Network LSAs\n"
941 "Display Inter-Area-Prefix LSAs\n"
942 "Display Inter-Area-Router LSAs\n"
943 "Display As-External LSAs\n"
944 "Display Group-Membership LSAs\n"
945 "Display Type-7 LSAs\n"
946 "Display Link LSAs\n"
947 "Display Intra-Area-Prefix LSAs\n"
948 "Search by Advertising Router\n"
949 "Specify Advertising Router as IPv4 address notation\n"
950 "Search by Link state ID\n"
951 "Specify Link state ID as IPv4 address notation\n"
953 "Display LSA's internal information\n"
961 bool uj
= use_json(argc
, argv
);
962 struct listnode
*node
;
966 uint32_t adv_router
= 0;
967 const char *vrf_name
= NULL
;
968 bool all_vrf
= false;
971 OSPF6_FIND_VRF_ARGS(argv
, argc
, idx_vrf
, vrf_name
, all_vrf
);
979 type
= parse_type_spec(idx_lsa
, argc
, argv
);
980 inet_pton(AF_INET
, argv
[idx_adv_rtr
]->arg
, &adv_router
);
981 inet_pton(AF_INET
, argv
[idx_ls_id
]->arg
, &id
);
982 level
= parse_show_level(idx_level
, argc
, argv
);
984 for (ALL_LIST_ELEMENTS_RO(om6
->ospf6
, node
, ospf6
)) {
985 if (all_vrf
|| strcmp(ospf6
->name
, vrf_name
) == 0) {
986 ospf6_lsdb_type_show_wrapper(vty
, level
, &type
, &id
,
987 &adv_router
, uj
, ospf6
);
994 OSPF6_CMD_CHECK_VRF(uj
, all_vrf
, ospf6
);
999 DEFUN(show_ipv6_ospf6_database_self_originated
,
1000 show_ipv6_ospf6_database_self_originated_cmd
,
1001 "show ipv6 ospf6 [vrf <NAME|all>] database self-originated [<detail|dump|internal>] [json]",
1002 SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
1004 "Display Link state database\n"
1005 "Display Self-originated LSAs\n"
1006 "Display details of LSAs\n"
1008 "Display LSA's internal information\n" JSON_STR
)
1012 struct listnode
*node
;
1013 struct ospf6
*ospf6
;
1014 const char *vrf_name
= NULL
;
1015 bool all_vrf
= false;
1017 uint32_t adv_router
= 0;
1018 bool uj
= use_json(argc
, argv
);
1020 OSPF6_FIND_VRF_ARGS(argv
, argc
, idx_vrf
, vrf_name
, all_vrf
);
1024 level
= parse_show_level(idx_level
, argc
, argv
);
1026 for (ALL_LIST_ELEMENTS_RO(om6
->ospf6
, node
, ospf6
)) {
1027 adv_router
= ospf6
->router_id
;
1028 if (all_vrf
|| strcmp(ospf6
->name
, vrf_name
) == 0) {
1029 ospf6_lsdb_show_wrapper(vty
, level
, NULL
, NULL
,
1030 &adv_router
, uj
, ospf6
);
1037 OSPF6_CMD_CHECK_VRF(uj
, all_vrf
, ospf6
);
1043 DEFUN(show_ipv6_ospf6_database_type_self_originated
,
1044 show_ipv6_ospf6_database_type_self_originated_cmd
,
1045 "show ipv6 ospf6 [vrf <NAME|all>] database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> self-originated [<detail|dump|internal>] [json]",
1046 SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
1048 "Display Link state database\n"
1049 "Display Router LSAs\n"
1050 "Display Network LSAs\n"
1051 "Display Inter-Area-Prefix LSAs\n"
1052 "Display Inter-Area-Router LSAs\n"
1053 "Display As-External LSAs\n"
1054 "Display Group-Membership LSAs\n"
1055 "Display Type-7 LSAs\n"
1056 "Display Link LSAs\n"
1057 "Display Intra-Area-Prefix LSAs\n"
1058 "Display Self-originated LSAs\n"
1059 "Display details of LSAs\n"
1061 "Display LSA's internal information\n" JSON_STR
)
1066 struct listnode
*node
;
1067 struct ospf6
*ospf6
;
1069 uint32_t adv_router
= 0;
1070 bool uj
= use_json(argc
, argv
);
1072 const char *vrf_name
= NULL
;
1073 bool all_vrf
= false;
1076 OSPF6_FIND_VRF_ARGS(argv
, argc
, idx_vrf
, vrf_name
, all_vrf
);
1082 type
= parse_type_spec(idx_lsa
, argc
, argv
);
1083 level
= parse_show_level(idx_level
, argc
, argv
);
1085 for (ALL_LIST_ELEMENTS_RO(om6
->ospf6
, node
, ospf6
)) {
1086 if (all_vrf
|| strcmp(ospf6
->name
, vrf_name
) == 0) {
1087 adv_router
= ospf6
->router_id
;
1088 ospf6_lsdb_type_show_wrapper(vty
, level
, &type
, NULL
,
1089 &adv_router
, uj
, ospf6
);
1096 OSPF6_CMD_CHECK_VRF(uj
, all_vrf
, ospf6
);
1101 DEFUN(show_ipv6_ospf6_database_type_self_originated_linkstate_id
,
1102 show_ipv6_ospf6_database_type_self_originated_linkstate_id_cmd
,
1103 "show ipv6 ospf6 [vrf <NAME|all>] database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> self-originated linkstate-id A.B.C.D [<detail|dump|internal>] [json]",
1104 SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
1106 "Display Link state database\n"
1107 "Display Router LSAs\n"
1108 "Display Network LSAs\n"
1109 "Display Inter-Area-Prefix LSAs\n"
1110 "Display Inter-Area-Router LSAs\n"
1111 "Display As-External LSAs\n"
1112 "Display Group-Membership LSAs\n"
1113 "Display Type-7 LSAs\n"
1114 "Display Link LSAs\n"
1115 "Display Intra-Area-Prefix LSAs\n"
1116 "Display Self-originated LSAs\n"
1117 "Search by Link state ID\n"
1118 "Specify Link state ID as IPv4 address notation\n"
1119 "Display details of LSAs\n"
1121 "Display LSA's internal information\n" JSON_STR
)
1127 bool uj
= use_json(argc
, argv
);
1128 struct listnode
*node
;
1129 struct ospf6
*ospf6
;
1131 uint32_t adv_router
= 0;
1133 const char *vrf_name
= NULL
;
1134 bool all_vrf
= false;
1137 OSPF6_FIND_VRF_ARGS(argv
, argc
, idx_vrf
, vrf_name
, all_vrf
);
1145 type
= parse_type_spec(idx_lsa
, argc
, argv
);
1146 inet_pton(AF_INET
, argv
[idx_ls_id
]->arg
, &id
);
1147 level
= parse_show_level(idx_level
, argc
, argv
);
1149 for (ALL_LIST_ELEMENTS_RO(om6
->ospf6
, node
, ospf6
)) {
1150 if (all_vrf
|| strcmp(ospf6
->name
, vrf_name
) == 0) {
1151 adv_router
= ospf6
->router_id
;
1152 ospf6_lsdb_type_show_wrapper(vty
, level
, &type
, &id
,
1153 &adv_router
, uj
, ospf6
);
1160 OSPF6_CMD_CHECK_VRF(uj
, all_vrf
, ospf6
);
1165 DEFUN(show_ipv6_ospf6_database_type_id_self_originated
,
1166 show_ipv6_ospf6_database_type_id_self_originated_cmd
,
1167 "show ipv6 ospf6 [vrf <NAME|all>] database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> A.B.C.D self-originated [<detail|dump|internal>] [json]",
1168 SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
1170 "Display Link state database\n"
1171 "Display Router LSAs\n"
1172 "Display Network LSAs\n"
1173 "Display Inter-Area-Prefix LSAs\n"
1174 "Display Inter-Area-Router LSAs\n"
1175 "Display As-External LSAs\n"
1176 "Display Group-Membership LSAs\n"
1177 "Display Type-7 LSAs\n"
1178 "Display Link LSAs\n"
1179 "Display Intra-Area-Prefix LSAs\n"
1180 "Specify Link state ID as IPv4 address notation\n"
1181 "Display Self-originated LSAs\n"
1182 "Display details of LSAs\n"
1184 "Display LSA's internal information\n" JSON_STR
)
1190 bool uj
= use_json(argc
, argv
);
1191 struct listnode
*node
;
1192 struct ospf6
*ospf6
;
1194 uint32_t adv_router
= 0;
1196 const char *vrf_name
= NULL
;
1197 bool all_vrf
= false;
1200 OSPF6_FIND_VRF_ARGS(argv
, argc
, idx_vrf
, vrf_name
, all_vrf
);
1207 type
= parse_type_spec(idx_lsa
, argc
, argv
);
1208 inet_pton(AF_INET
, argv
[idx_ls_id
]->arg
, &id
);
1209 level
= parse_show_level(idx_level
, argc
, argv
);
1211 for (ALL_LIST_ELEMENTS_RO(om6
->ospf6
, node
, ospf6
)) {
1212 if (all_vrf
|| strcmp(ospf6
->name
, vrf_name
) == 0) {
1213 adv_router
= ospf6
->router_id
;
1214 ospf6_lsdb_type_show_wrapper(vty
, level
, &type
, &id
,
1215 &adv_router
, uj
, ospf6
);
1222 OSPF6_CMD_CHECK_VRF(uj
, all_vrf
, ospf6
);
1227 static int show_ospf6_border_routers_common(struct vty
*vty
, int argc
,
1228 struct cmd_token
**argv
,
1229 struct ospf6
*ospf6
, int idx_ipv4
,
1232 uint32_t adv_router
;
1233 struct ospf6_route
*ro
;
1234 struct prefix prefix
;
1237 if (argc
== idx_argc
) {
1238 if (strmatch(argv
[idx_ipv4
]->text
, "detail")) {
1239 for (ro
= ospf6_route_head(ospf6
->brouter_table
); ro
;
1240 ro
= ospf6_route_next(ro
))
1241 ospf6_route_show_detail(vty
, ro
, NULL
, false);
1243 inet_pton(AF_INET
, argv
[idx_ipv4
]->arg
, &adv_router
);
1245 ospf6_linkstate_prefix(adv_router
, 0, &prefix
);
1246 ro
= ospf6_route_lookup(&prefix
, ospf6
->brouter_table
);
1249 "No Route found for Router ID: %s\n",
1250 argv
[idx_ipv4
]->arg
);
1254 ospf6_route_show_detail(vty
, ro
, NULL
, false);
1258 ospf6_brouter_show_header(vty
);
1260 for (ro
= ospf6_route_head(ospf6
->brouter_table
); ro
;
1261 ro
= ospf6_route_next(ro
))
1262 ospf6_brouter_show(vty
, ro
);
1268 DEFUN(show_ipv6_ospf6_border_routers
, show_ipv6_ospf6_border_routers_cmd
,
1269 "show ipv6 ospf6 [vrf <NAME|all>] border-routers [<A.B.C.D|detail>]",
1270 SHOW_STR IP6_STR OSPF6_STR VRF_CMD_HELP_STR
1272 "Display routing table for ABR and ASBR\n"
1274 "Show detailed output\n")
1277 struct ospf6
*ospf6
= NULL
;
1278 struct listnode
*node
;
1279 const char *vrf_name
= NULL
;
1280 bool all_vrf
= false;
1284 OSPF6_FIND_VRF_ARGS(argv
, argc
, idx_vrf
, vrf_name
, all_vrf
);
1290 for (ALL_LIST_ELEMENTS_RO(om6
->ospf6
, node
, ospf6
)) {
1291 if (all_vrf
|| strcmp(ospf6
->name
, vrf_name
) == 0) {
1292 show_ospf6_border_routers_common(vty
, argc
, argv
, ospf6
,
1293 idx_ipv4
, idx_argc
);
1300 OSPF6_CMD_CHECK_VRF(false, all_vrf
, ospf6
);
1306 DEFUN(show_ipv6_ospf6_linkstate
, show_ipv6_ospf6_linkstate_cmd
,
1307 "show ipv6 ospf6 [vrf <NAME|all>] linkstate <router A.B.C.D|network A.B.C.D A.B.C.D>",
1308 SHOW_STR IP6_STR OSPF6_STR VRF_CMD_HELP_STR
1310 "Display linkstate routing table\n"
1311 "Display Router Entry\n"
1312 "Specify Router ID as IPv4 address notation\n"
1313 "Display Network Entry\n"
1314 "Specify Router ID as IPv4 address notation\n"
1315 "Specify Link state ID as IPv4 address notation\n")
1318 struct listnode
*node
, *nnode
;
1319 struct ospf6_area
*oa
;
1320 struct ospf6
*ospf6
= NULL
;
1321 const char *vrf_name
= NULL
;
1322 bool all_vrf
= false;
1325 OSPF6_FIND_VRF_ARGS(argv
, argc
, idx_vrf
, vrf_name
, all_vrf
);
1329 for (ALL_LIST_ELEMENTS_RO(om6
->ospf6
, nnode
, ospf6
)) {
1330 if (all_vrf
|| strcmp(ospf6
->name
, vrf_name
) == 0) {
1331 for (ALL_LIST_ELEMENTS_RO(ospf6
->area_list
, node
, oa
)) {
1333 "\n SPF Result in Area %s\n\n",
1335 ospf6_linkstate_table_show(vty
, idx_ipv4
, argc
,
1336 argv
, oa
->spf_table
);
1345 OSPF6_CMD_CHECK_VRF(false, all_vrf
, ospf6
);
1351 DEFUN(show_ipv6_ospf6_linkstate_detail
, show_ipv6_ospf6_linkstate_detail_cmd
,
1352 "show ipv6 ospf6 [vrf <NAME|all>] linkstate detail",
1353 SHOW_STR IP6_STR OSPF6_STR VRF_CMD_HELP_STR
1355 "Display linkstate routing table\n"
1356 "Display detailed information\n")
1359 struct listnode
*node
;
1360 struct ospf6_area
*oa
;
1361 struct ospf6
*ospf6
= NULL
;
1362 const char *vrf_name
= NULL
;
1363 bool all_vrf
= false;
1366 OSPF6_FIND_VRF_ARGS(argv
, argc
, idx_vrf
, vrf_name
, all_vrf
);
1370 for (ALL_LIST_ELEMENTS_RO(om6
->ospf6
, node
, ospf6
)) {
1371 if (all_vrf
|| strcmp(ospf6
->name
, vrf_name
) == 0) {
1372 for (ALL_LIST_ELEMENTS_RO(ospf6
->area_list
, node
, oa
)) {
1374 "\n SPF Result in Area %s\n\n",
1376 ospf6_linkstate_table_show(vty
, idx_detail
,
1387 OSPF6_CMD_CHECK_VRF(false, all_vrf
, ospf6
);
1392 /* Install ospf related commands. */
1393 void ospf6_init(struct thread_master
*master
)
1397 ospf6_interface_init();
1398 ospf6_neighbor_init();
1399 ospf6_zebra_init(master
);
1407 ospf6_gr_helper_config_init();
1409 /* initialize hooks for modifying filter rules */
1410 prefix_list_add_hook(ospf6_plist_update
);
1411 prefix_list_delete_hook(ospf6_plist_update
);
1412 access_list_add_hook(ospf6_filter_update
);
1413 access_list_delete_hook(ospf6_filter_update
);
1416 install_node(&debug_node
);
1418 install_element_ospf6_debug_message();
1419 install_element_ospf6_debug_lsa();
1420 install_element_ospf6_debug_interface();
1421 install_element_ospf6_debug_neighbor();
1422 install_element_ospf6_debug_zebra();
1423 install_element_ospf6_debug_spf();
1424 install_element_ospf6_debug_route();
1425 install_element_ospf6_debug_brouter();
1426 install_element_ospf6_debug_asbr();
1427 install_element_ospf6_debug_abr();
1428 install_element_ospf6_debug_flood();
1429 install_element_ospf6_debug_nssa();
1431 install_element_ospf6_clear_process();
1432 install_element_ospf6_clear_interface();
1434 install_element(ENABLE_NODE
, &show_debugging_ospf6_cmd
);
1436 install_element(VIEW_NODE
, &show_ipv6_ospf6_border_routers_cmd
);
1438 install_element(VIEW_NODE
, &show_ipv6_ospf6_linkstate_cmd
);
1439 install_element(VIEW_NODE
, &show_ipv6_ospf6_linkstate_detail_cmd
);
1441 install_element(VIEW_NODE
, &show_ipv6_ospf6_database_cmd
);
1442 install_element(VIEW_NODE
, &show_ipv6_ospf6_database_type_cmd
);
1443 install_element(VIEW_NODE
, &show_ipv6_ospf6_database_id_cmd
);
1444 install_element(VIEW_NODE
, &show_ipv6_ospf6_database_router_cmd
);
1445 install_element(VIEW_NODE
, &show_ipv6_ospf6_database_type_id_cmd
);
1446 install_element(VIEW_NODE
, &show_ipv6_ospf6_database_type_router_cmd
);
1447 install_element(VIEW_NODE
,
1448 &show_ipv6_ospf6_database_adv_router_linkstate_id_cmd
);
1449 install_element(VIEW_NODE
, &show_ipv6_ospf6_database_id_router_cmd
);
1450 install_element(VIEW_NODE
,
1451 &show_ipv6_ospf6_database_type_id_router_cmd
);
1454 &show_ipv6_ospf6_database_type_adv_router_linkstate_id_cmd
);
1455 install_element(VIEW_NODE
,
1456 &show_ipv6_ospf6_database_self_originated_cmd
);
1457 install_element(VIEW_NODE
,
1458 &show_ipv6_ospf6_database_type_self_originated_cmd
);
1459 install_element(VIEW_NODE
,
1460 &show_ipv6_ospf6_database_type_id_self_originated_cmd
);
1463 &show_ipv6_ospf6_database_type_self_originated_linkstate_id_cmd
);
1464 install_element(VIEW_NODE
, &show_ipv6_ospf6_database_aggr_router_cmd
);
1465 install_element_ospf6_debug_auth();
1466 ospf6_interface_auth_trailer_cmd_init();
1467 install_element_ospf6_clear_intf_auth();