]> git.proxmox.com Git - mirror_frr.git/blob - pimd/pim6_cmd.c
doc: Add `show ipv6 rpf X:X::X:X` command to docs
[mirror_frr.git] / pimd / pim6_cmd.c
1 /*
2 * PIM for IPv6 FRR
3 * Copyright (C) 2022 Vmware, Inc.
4 * Mobashshera Rasool <mrasool@vmware.com>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program 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.
15 *
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
19 */
20
21 #include <zebra.h>
22
23 #include "lib/json.h"
24 #include "command.h"
25 #include "if.h"
26 #include "prefix.h"
27 #include "zclient.h"
28 #include "plist.h"
29 #include "hash.h"
30 #include "nexthop.h"
31 #include "vrf.h"
32 #include "ferr.h"
33
34 #include "pimd.h"
35 #include "pim6_cmd.h"
36 #include "pim_cmd_common.h"
37 #include "pim_vty.h"
38 #include "lib/northbound_cli.h"
39 #include "pim_errors.h"
40 #include "pim_nb.h"
41 #include "pim_addr.h"
42 #include "pim_nht.h"
43 #include "pim_bsm.h"
44 #include "pim_iface.h"
45 #include "pim_zebra.h"
46 #include "pim_instance.h"
47
48 #include "pimd/pim6_cmd_clippy.c"
49
50 static struct cmd_node debug_node = {
51 .name = "debug",
52 .node = DEBUG_NODE,
53 .prompt = "",
54 .config_write = pim_debug_config_write,
55 };
56
57 DEFPY (ipv6_pim_joinprune_time,
58 ipv6_pim_joinprune_time_cmd,
59 "ipv6 pim join-prune-interval (1-65535)$jpi",
60 IPV6_STR
61 PIM_STR
62 "Join Prune Send Interval\n"
63 "Seconds\n")
64 {
65 return pim_process_join_prune_cmd(vty, jpi_str);
66 }
67
68 DEFPY (no_ipv6_pim_joinprune_time,
69 no_ipv6_pim_joinprune_time_cmd,
70 "no ipv6 pim join-prune-interval [(1-65535)]",
71 NO_STR
72 IPV6_STR
73 PIM_STR
74 "Join Prune Send Interval\n"
75 IGNORED_IN_NO_STR)
76 {
77 return pim_process_no_join_prune_cmd(vty);
78 }
79
80 DEFPY (ipv6_pim_spt_switchover_infinity,
81 ipv6_pim_spt_switchover_infinity_cmd,
82 "ipv6 pim spt-switchover infinity-and-beyond",
83 IPV6_STR
84 PIM_STR
85 "SPT-Switchover\n"
86 "Never switch to SPT Tree\n")
87 {
88 return pim_process_spt_switchover_infinity_cmd(vty);
89 }
90
91 DEFPY (ipv6_pim_spt_switchover_infinity_plist,
92 ipv6_pim_spt_switchover_infinity_plist_cmd,
93 "ipv6 pim spt-switchover infinity-and-beyond prefix-list WORD$plist",
94 IPV6_STR
95 PIM_STR
96 "SPT-Switchover\n"
97 "Never switch to SPT Tree\n"
98 "Prefix-List to control which groups to switch\n"
99 "Prefix-List name\n")
100 {
101 return pim_process_spt_switchover_prefixlist_cmd(vty, plist);
102 }
103
104 DEFPY (no_ipv6_pim_spt_switchover_infinity,
105 no_ipv6_pim_spt_switchover_infinity_cmd,
106 "no ipv6 pim spt-switchover infinity-and-beyond",
107 NO_STR
108 IPV6_STR
109 PIM_STR
110 "SPT_Switchover\n"
111 "Never switch to SPT Tree\n")
112 {
113 return pim_process_no_spt_switchover_cmd(vty);
114 }
115
116 DEFPY (no_ipv6_pim_spt_switchover_infinity_plist,
117 no_ipv6_pim_spt_switchover_infinity_plist_cmd,
118 "no ipv6 pim spt-switchover infinity-and-beyond prefix-list WORD",
119 NO_STR
120 IPV6_STR
121 PIM_STR
122 "SPT_Switchover\n"
123 "Never switch to SPT Tree\n"
124 "Prefix-List to control which groups to switch\n"
125 "Prefix-List name\n")
126 {
127 return pim_process_no_spt_switchover_cmd(vty);
128 }
129
130 DEFPY (ipv6_pim_packets,
131 ipv6_pim_packets_cmd,
132 "ipv6 pim packets (1-255)",
133 IPV6_STR
134 PIM_STR
135 "packets to process at one time per fd\n"
136 "Number of packets\n")
137 {
138 return pim_process_pim_packet_cmd(vty, packets_str);
139 }
140
141 DEFPY (no_ipv6_pim_packets,
142 no_ipv6_pim_packets_cmd,
143 "no ipv6 pim packets [(1-255)]",
144 NO_STR
145 IPV6_STR
146 PIM_STR
147 "packets to process at one time per fd\n"
148 IGNORED_IN_NO_STR)
149 {
150 return pim_process_no_pim_packet_cmd(vty);
151 }
152
153 DEFPY (ipv6_pim_keep_alive,
154 ipv6_pim_keep_alive_cmd,
155 "ipv6 pim keep-alive-timer (1-65535)$kat",
156 IPV6_STR
157 PIM_STR
158 "Keep alive Timer\n"
159 "Seconds\n")
160 {
161 return pim_process_keepalivetimer_cmd(vty, kat_str);
162 }
163
164 DEFPY (no_ipv6_pim_keep_alive,
165 no_ipv6_pim_keep_alive_cmd,
166 "no ipv6 pim keep-alive-timer [(1-65535)]",
167 NO_STR
168 IPV6_STR
169 PIM_STR
170 "Keep alive Timer\n"
171 IGNORED_IN_NO_STR)
172 {
173 return pim_process_no_keepalivetimer_cmd(vty);
174 }
175
176 DEFPY (ipv6_pim_rp_keep_alive,
177 ipv6_pim_rp_keep_alive_cmd,
178 "ipv6 pim rp keep-alive-timer (1-65535)$kat",
179 IPV6_STR
180 PIM_STR
181 "Rendezvous Point\n"
182 "Keep alive Timer\n"
183 "Seconds\n")
184 {
185 return pim_process_rp_kat_cmd(vty, kat_str);
186 }
187
188 DEFPY (no_ipv6_pim_rp_keep_alive,
189 no_ipv6_pim_rp_keep_alive_cmd,
190 "no ipv6 pim rp keep-alive-timer [(1-65535)]",
191 NO_STR
192 IPV6_STR
193 PIM_STR
194 "Rendezvous Point\n"
195 "Keep alive Timer\n"
196 IGNORED_IN_NO_STR)
197 {
198 return pim_process_no_rp_kat_cmd(vty);
199 }
200
201 DEFPY (ipv6_pim_register_suppress,
202 ipv6_pim_register_suppress_cmd,
203 "ipv6 pim register-suppress-time (1-65535)$rst",
204 IPV6_STR
205 PIM_STR
206 "Register Suppress Timer\n"
207 "Seconds\n")
208 {
209 return pim_process_register_suppress_cmd(vty, rst_str);
210 }
211
212 DEFPY (no_ipv6_pim_register_suppress,
213 no_ipv6_pim_register_suppress_cmd,
214 "no ipv6 pim register-suppress-time [(1-65535)]",
215 NO_STR
216 IPV6_STR
217 PIM_STR
218 "Register Suppress Timer\n"
219 IGNORED_IN_NO_STR)
220 {
221 return pim_process_no_register_suppress_cmd(vty);
222 }
223
224 DEFPY (interface_ipv6_pim,
225 interface_ipv6_pim_cmd,
226 "ipv6 pim [passive$passive]",
227 IPV6_STR
228 PIM_STR
229 "Disable exchange of protocol packets\n")
230 {
231 int ret;
232
233 ret = pim_process_ip_pim_cmd(vty);
234
235 if (ret != NB_OK)
236 return ret;
237
238 if (passive)
239 return pim_process_ip_pim_passive_cmd(vty, true);
240
241 return CMD_SUCCESS;
242 }
243
244 DEFPY (interface_no_ipv6_pim,
245 interface_no_ipv6_pim_cmd,
246 "no ipv6 pim [passive$passive]",
247 NO_STR
248 IPV6_STR
249 PIM_STR
250 "Disable exchange of protocol packets\n")
251 {
252 if (passive)
253 return pim_process_ip_pim_passive_cmd(vty, false);
254
255 return pim_process_no_ip_pim_cmd(vty);
256 }
257
258 DEFPY (interface_ipv6_pim_drprio,
259 interface_ipv6_pim_drprio_cmd,
260 "ipv6 pim drpriority (1-4294967295)",
261 IPV6_STR
262 PIM_STR
263 "Set the Designated Router Election Priority\n"
264 "Value of the new DR Priority\n")
265 {
266 return pim_process_ip_pim_drprio_cmd(vty, drpriority_str);
267 }
268
269 DEFPY (interface_no_ipv6_pim_drprio,
270 interface_no_ipv6_pim_drprio_cmd,
271 "no ipv6 pim drpriority [(1-4294967295)]",
272 NO_STR
273 IPV6_STR
274 PIM_STR
275 "Revert the Designated Router Priority to default\n"
276 "Old Value of the Priority\n")
277 {
278 return pim_process_no_ip_pim_drprio_cmd(vty);
279 }
280
281 DEFPY (interface_ipv6_pim_hello,
282 interface_ipv6_pim_hello_cmd,
283 "ipv6 pim hello (1-65535) [(1-65535)]$hold",
284 IPV6_STR
285 PIM_STR
286 IFACE_PIM_HELLO_STR
287 IFACE_PIM_HELLO_TIME_STR
288 IFACE_PIM_HELLO_HOLD_STR)
289 {
290 return pim_process_ip_pim_hello_cmd(vty, hello_str, hold_str);
291 }
292
293 DEFPY (interface_no_ipv6_pim_hello,
294 interface_no_ipv6_pim_hello_cmd,
295 "no ipv6 pim hello [(1-65535) [(1-65535)]]",
296 NO_STR
297 IPV6_STR
298 PIM_STR
299 IFACE_PIM_HELLO_STR
300 IGNORED_IN_NO_STR
301 IGNORED_IN_NO_STR)
302 {
303 return pim_process_no_ip_pim_hello_cmd(vty);
304 }
305
306 DEFPY (interface_ipv6_pim_activeactive,
307 interface_ipv6_pim_activeactive_cmd,
308 "[no] ipv6 pim active-active",
309 NO_STR
310 IPV6_STR
311 PIM_STR
312 "Mark interface as Active-Active for MLAG operations\n")
313 {
314 return pim_process_ip_pim_activeactive_cmd(vty, no);
315 }
316
317 DEFPY_HIDDEN (interface_ipv6_pim_ssm,
318 interface_ipv6_pim_ssm_cmd,
319 "ipv6 pim ssm",
320 IPV6_STR
321 PIM_STR
322 IFACE_PIM_STR)
323 {
324 int ret;
325
326 ret = pim_process_ip_pim_cmd(vty);
327
328 if (ret != NB_OK)
329 return ret;
330
331 vty_out(vty,
332 "Enabled PIM SM on interface; configure PIM SSM range if needed\n");
333
334 return NB_OK;
335 }
336
337 DEFPY_HIDDEN (interface_no_ipv6_pim_ssm,
338 interface_no_ipv6_pim_ssm_cmd,
339 "no ipv6 pim ssm",
340 NO_STR
341 IPV6_STR
342 PIM_STR
343 IFACE_PIM_STR)
344 {
345 return pim_process_no_ip_pim_cmd(vty);
346 }
347
348 DEFPY_HIDDEN (interface_ipv6_pim_sm,
349 interface_ipv6_pim_sm_cmd,
350 "ipv6 pim sm",
351 IPV6_STR
352 PIM_STR
353 IFACE_PIM_SM_STR)
354 {
355 return pim_process_ip_pim_cmd(vty);
356 }
357
358 DEFPY_HIDDEN (interface_no_ipv6_pim_sm,
359 interface_no_ipv6_pim_sm_cmd,
360 "no ipv6 pim sm",
361 NO_STR
362 IPV6_STR
363 PIM_STR
364 IFACE_PIM_SM_STR)
365 {
366 return pim_process_no_ip_pim_cmd(vty);
367 }
368
369 /* boundaries */
370 DEFPY (interface_ipv6_pim_boundary_oil,
371 interface_ipv6_pim_boundary_oil_cmd,
372 "ipv6 multicast boundary oil WORD",
373 IPV6_STR
374 "Generic multicast configuration options\n"
375 "Define multicast boundary\n"
376 "Filter OIL by group using prefix list\n"
377 "Prefix list to filter OIL with\n")
378 {
379 return pim_process_ip_pim_boundary_oil_cmd(vty, oil);
380 }
381
382 DEFPY (interface_no_ipv6_pim_boundary_oil,
383 interface_no_ipv6_pim_boundary_oil_cmd,
384 "no ipv6 multicast boundary oil [WORD]",
385 NO_STR
386 IPV6_STR
387 "Generic multicast configuration options\n"
388 "Define multicast boundary\n"
389 "Filter OIL by group using prefix list\n"
390 "Prefix list to filter OIL with\n")
391 {
392 return pim_process_no_ip_pim_boundary_oil_cmd(vty);
393 }
394
395 DEFPY (interface_ipv6_mroute,
396 interface_ipv6_mroute_cmd,
397 "ipv6 mroute INTERFACE X:X::X:X$group [X:X::X:X]$source",
398 IPV6_STR
399 "Add multicast route\n"
400 "Outgoing interface name\n"
401 "Group address\n"
402 "Source address\n")
403 {
404 return pim_process_ip_mroute_cmd(vty, interface, group_str, source_str);
405 }
406
407 DEFPY (interface_no_ipv6_mroute,
408 interface_no_ipv6_mroute_cmd,
409 "no ipv6 mroute INTERFACE X:X::X:X$group [X:X::X:X]$source",
410 NO_STR
411 IPV6_STR
412 "Add multicast route\n"
413 "Outgoing interface name\n"
414 "Group Address\n"
415 "Source Address\n")
416 {
417 return pim_process_no_ip_mroute_cmd(vty, interface, group_str,
418 source_str);
419 }
420
421 DEFPY (ipv6_pim_rp,
422 ipv6_pim_rp_cmd,
423 "ipv6 pim rp X:X::X:X$rp [X:X::X:X/M]$gp",
424 IPV6_STR
425 PIM_STR
426 "Rendezvous Point\n"
427 "ipv6 address of RP\n"
428 "Group Address range to cover\n")
429 {
430 const char *group_str = (gp_str) ? gp_str : "FF00::0/8";
431
432 return pim_process_rp_cmd(vty, rp_str, group_str);
433 }
434
435 DEFPY (no_ipv6_pim_rp,
436 no_ipv6_pim_rp_cmd,
437 "no ipv6 pim rp X:X::X:X$rp [X:X::X:X/M]$gp",
438 NO_STR
439 IPV6_STR
440 PIM_STR
441 "Rendezvous Point\n"
442 "ipv6 address of RP\n"
443 "Group Address range to cover\n")
444 {
445 const char *group_str = (gp_str) ? gp_str : "FF00::0/8";
446
447 return pim_process_no_rp_cmd(vty, rp_str, group_str);
448 }
449
450 DEFPY (ipv6_pim_rp_prefix_list,
451 ipv6_pim_rp_prefix_list_cmd,
452 "ipv6 pim rp X:X::X:X$rp prefix-list WORD$plist",
453 IPV6_STR
454 PIM_STR
455 "Rendezvous Point\n"
456 "ipv6 address of RP\n"
457 "group prefix-list filter\n"
458 "Name of a prefix-list\n")
459 {
460 return pim_process_rp_plist_cmd(vty, rp_str, plist);
461 }
462
463 DEFPY (no_ipv6_pim_rp_prefix_list,
464 no_ipv6_pim_rp_prefix_list_cmd,
465 "no ipv6 pim rp X:X::X:X$rp prefix-list WORD$plist",
466 NO_STR
467 IPV6_STR
468 PIM_STR
469 "Rendezvous Point\n"
470 "ipv6 address of RP\n"
471 "group prefix-list filter\n"
472 "Name of a prefix-list\n")
473 {
474 return pim_process_no_rp_plist_cmd(vty, rp_str, plist);
475 }
476
477 DEFPY (ipv6_pim_bsm,
478 ipv6_pim_bsm_cmd,
479 "ipv6 pim bsm",
480 IPV6_STR
481 PIM_STR
482 "Enable BSM support on the interface\n")
483 {
484 return pim_process_bsm_cmd(vty);
485 }
486
487 DEFPY (no_ipv6_pim_bsm,
488 no_ipv6_pim_bsm_cmd,
489 "no ipv6 pim bsm",
490 NO_STR
491 IPV6_STR
492 PIM_STR
493 "Enable BSM support on the interface\n")
494 {
495 return pim_process_no_bsm_cmd(vty);
496 }
497
498 DEFPY (ipv6_pim_ucast_bsm,
499 ipv6_pim_ucast_bsm_cmd,
500 "ipv6 pim unicast-bsm",
501 IPV6_STR
502 PIM_STR
503 "Accept/Send unicast BSM on the interface\n")
504 {
505 return pim_process_unicast_bsm_cmd(vty);
506 }
507
508 DEFPY (no_ipv6_pim_ucast_bsm,
509 no_ipv6_pim_ucast_bsm_cmd,
510 "no ipv6 pim unicast-bsm",
511 NO_STR
512 IPV6_STR
513 PIM_STR
514 "Accept/Send unicast BSM on the interface\n")
515 {
516 return pim_process_no_unicast_bsm_cmd(vty);
517 }
518
519 DEFPY (ipv6_ssmpingd,
520 ipv6_ssmpingd_cmd,
521 "ipv6 ssmpingd [X:X::X:X]$source",
522 IPV6_STR
523 CONF_SSMPINGD_STR
524 "Source address\n")
525 {
526 const char *src_str = (source_str) ? source_str : "::";
527
528 return pim_process_ssmpingd_cmd(vty, NB_OP_CREATE, src_str);
529 }
530
531
532 DEFPY (no_ipv6_ssmpingd,
533 no_ipv6_ssmpingd_cmd,
534 "no ipv6 ssmpingd [X:X::X:X]$source",
535 NO_STR
536 IPV6_STR
537 CONF_SSMPINGD_STR
538 "Source address\n")
539 {
540 const char *src_str = (source_str) ? source_str : "::";
541
542 return pim_process_ssmpingd_cmd(vty, NB_OP_DESTROY, src_str);
543 }
544
545 DEFPY (interface_ipv6_mld_join,
546 interface_ipv6_mld_join_cmd,
547 "ipv6 mld join X:X::X:X$group [X:X::X:X$source]",
548 IPV6_STR
549 IFACE_MLD_STR
550 "MLD join multicast group\n"
551 "Multicast group address\n"
552 "Source address\n")
553 {
554 char xpath[XPATH_MAXLEN];
555
556 if (source_str) {
557 if (IPV6_ADDR_SAME(&source, &in6addr_any)) {
558 vty_out(vty, "Bad source address %s\n", source_str);
559 return CMD_WARNING_CONFIG_FAILED;
560 }
561 } else
562 source_str = "::";
563
564 snprintf(xpath, sizeof(xpath), FRR_GMP_JOIN_XPATH, "frr-routing:ipv6",
565 group_str, source_str);
566
567 nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
568
569 return nb_cli_apply_changes(vty, NULL);
570 }
571
572 DEFPY (interface_no_ipv6_mld_join,
573 interface_no_ipv6_mld_join_cmd,
574 "no ipv6 mld join X:X::X:X$group [X:X::X:X$source]",
575 NO_STR
576 IPV6_STR
577 IFACE_MLD_STR
578 "MLD join multicast group\n"
579 "Multicast group address\n"
580 "Source address\n")
581 {
582 char xpath[XPATH_MAXLEN];
583
584 if (source_str) {
585 if (IPV6_ADDR_SAME(&source, &in6addr_any)) {
586 vty_out(vty, "Bad source address %s\n", source_str);
587 return CMD_WARNING_CONFIG_FAILED;
588 }
589 } else
590 source_str = "::";
591
592 snprintf(xpath, sizeof(xpath), FRR_GMP_JOIN_XPATH, "frr-routing:ipv6",
593 group_str, source_str);
594
595 nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
596
597 return nb_cli_apply_changes(vty, NULL);
598 }
599
600 DEFPY (interface_ipv6_mld,
601 interface_ipv6_mld_cmd,
602 "ipv6 mld",
603 IPV6_STR
604 IFACE_MLD_STR)
605 {
606 nb_cli_enqueue_change(vty, "./enable", NB_OP_MODIFY, "true");
607
608 return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
609 "frr-routing:ipv6");
610 }
611
612 DEFPY (interface_no_ipv6_mld,
613 interface_no_ipv6_mld_cmd,
614 "no ipv6 mld",
615 NO_STR
616 IPV6_STR
617 IFACE_MLD_STR)
618 {
619 const struct lyd_node *pim_enable_dnode;
620 char pim_if_xpath[XPATH_MAXLEN + 64];
621
622 snprintf(pim_if_xpath, sizeof(pim_if_xpath),
623 "%s/frr-pim:pim/address-family[address-family='%s']",
624 VTY_CURR_XPATH, "frr-routing:ipv6");
625
626 pim_enable_dnode = yang_dnode_getf(vty->candidate_config->dnode,
627 FRR_PIM_ENABLE_XPATH, VTY_CURR_XPATH,
628 "frr-routing:ipv6");
629 if (!pim_enable_dnode) {
630 nb_cli_enqueue_change(vty, pim_if_xpath, NB_OP_DESTROY, NULL);
631 nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
632 } else {
633 if (!yang_dnode_get_bool(pim_enable_dnode, ".")) {
634 nb_cli_enqueue_change(vty, pim_if_xpath, NB_OP_DESTROY,
635 NULL);
636 nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
637 } else
638 nb_cli_enqueue_change(vty, "./enable", NB_OP_MODIFY,
639 "false");
640 }
641
642 return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
643 "frr-routing:ipv6");
644 }
645
646 DEFPY (interface_ipv6_mld_version,
647 interface_ipv6_mld_version_cmd,
648 "ipv6 mld version (1-2)$version",
649 IPV6_STR
650 IFACE_MLD_STR
651 "MLD version\n"
652 "MLD version number\n")
653 {
654 nb_cli_enqueue_change(vty, "./enable", NB_OP_MODIFY, "true");
655 nb_cli_enqueue_change(vty, "./mld-version", NB_OP_MODIFY, version_str);
656
657 return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
658 "frr-routing:ipv6");
659 }
660
661 DEFPY (interface_no_ipv6_mld_version,
662 interface_no_ipv6_mld_version_cmd,
663 "no ipv6 mld version [(1-2)]",
664 NO_STR
665 IPV6_STR
666 IFACE_MLD_STR
667 "MLD version\n"
668 "MLD version number\n")
669 {
670 nb_cli_enqueue_change(vty, "./mld-version", NB_OP_DESTROY, NULL);
671
672 return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
673 "frr-routing:ipv6");
674 }
675
676 DEFPY (interface_ipv6_mld_query_interval,
677 interface_ipv6_mld_query_interval_cmd,
678 "ipv6 mld query-interval (1-65535)$q_interval",
679 IPV6_STR
680 IFACE_MLD_STR
681 IFACE_MLD_QUERY_INTERVAL_STR
682 "Query interval in seconds\n")
683 {
684 const struct lyd_node *pim_enable_dnode;
685
686 pim_enable_dnode = yang_dnode_getf(vty->candidate_config->dnode,
687 FRR_PIM_ENABLE_XPATH, VTY_CURR_XPATH,
688 "frr-routing:ipv6");
689 if (!pim_enable_dnode) {
690 nb_cli_enqueue_change(vty, "./enable", NB_OP_MODIFY, "true");
691 } else {
692 if (!yang_dnode_get_bool(pim_enable_dnode, "."))
693 nb_cli_enqueue_change(vty, "./enable", NB_OP_MODIFY,
694 "true");
695 }
696
697 nb_cli_enqueue_change(vty, "./query-interval", NB_OP_MODIFY,
698 q_interval_str);
699
700 return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
701 "frr-routing:ipv6");
702 }
703
704 DEFPY (interface_no_ipv6_mld_query_interval,
705 interface_no_ipv6_mld_query_interval_cmd,
706 "no ipv6 mld query-interval [(1-65535)]",
707 NO_STR
708 IPV6_STR
709 IFACE_MLD_STR
710 IFACE_MLD_QUERY_INTERVAL_STR
711 IGNORED_IN_NO_STR)
712 {
713 nb_cli_enqueue_change(vty, "./query-interval", NB_OP_DESTROY, NULL);
714
715 return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
716 "frr-routing:ipv6");
717 }
718
719 DEFPY (ipv6_mld_group_watermark,
720 ipv6_mld_group_watermark_cmd,
721 "ipv6 mld watermark-warn (1-65535)$limit",
722 IPV6_STR
723 MLD_STR
724 "Configure group limit for watermark warning\n"
725 "Group count to generate watermark warning\n")
726 {
727 PIM_DECLVAR_CONTEXT_VRF(vrf, pim);
728 pim->gm_watermark_limit = limit;
729
730 return CMD_SUCCESS;
731 }
732
733 DEFPY (no_ipv6_mld_group_watermark,
734 no_ipv6_mld_group_watermark_cmd,
735 "no ipv6 mld watermark-warn [(1-65535)$limit]",
736 NO_STR
737 IPV6_STR
738 MLD_STR
739 "Unconfigure group limit for watermark warning\n"
740 IGNORED_IN_NO_STR)
741 {
742 PIM_DECLVAR_CONTEXT_VRF(vrf, pim);
743 pim->gm_watermark_limit = 0;
744
745 return CMD_SUCCESS;
746 }
747
748 DEFPY (interface_ipv6_mld_query_max_response_time,
749 interface_ipv6_mld_query_max_response_time_cmd,
750 "ipv6 mld query-max-response-time (1-65535)$qmrt",
751 IPV6_STR
752 IFACE_MLD_STR
753 IFACE_MLD_QUERY_MAX_RESPONSE_TIME_STR
754 "Query response value in milliseconds\n")
755 {
756 return gm_process_query_max_response_time_cmd(vty, qmrt_str);
757 }
758
759 DEFPY (interface_no_ipv6_mld_query_max_response_time,
760 interface_no_ipv6_mld_query_max_response_time_cmd,
761 "no ipv6 mld query-max-response-time [(1-65535)]",
762 NO_STR
763 IPV6_STR
764 IFACE_MLD_STR
765 IFACE_MLD_QUERY_MAX_RESPONSE_TIME_STR
766 IGNORED_IN_NO_STR)
767 {
768 return gm_process_no_query_max_response_time_cmd(vty);
769 }
770
771 DEFPY (interface_ipv6_mld_last_member_query_count,
772 interface_ipv6_mld_last_member_query_count_cmd,
773 "ipv6 mld last-member-query-count (1-255)$lmqc",
774 IPV6_STR
775 IFACE_MLD_STR
776 IFACE_MLD_LAST_MEMBER_QUERY_COUNT_STR
777 "Last member query count\n")
778 {
779 return gm_process_last_member_query_count_cmd(vty, lmqc_str);
780 }
781
782 DEFPY (interface_no_ipv6_mld_last_member_query_count,
783 interface_no_ipv6_mld_last_member_query_count_cmd,
784 "no ipv6 mld last-member-query-count [(1-255)]",
785 NO_STR
786 IPV6_STR
787 IFACE_MLD_STR
788 IFACE_MLD_LAST_MEMBER_QUERY_COUNT_STR
789 IGNORED_IN_NO_STR)
790 {
791 return gm_process_no_last_member_query_count_cmd(vty);
792 }
793
794 DEFPY (interface_ipv6_mld_last_member_query_interval,
795 interface_ipv6_mld_last_member_query_interval_cmd,
796 "ipv6 mld last-member-query-interval (1-65535)$lmqi",
797 IPV6_STR
798 IFACE_MLD_STR
799 IFACE_MLD_LAST_MEMBER_QUERY_INTERVAL_STR
800 "Last member query interval in deciseconds\n")
801 {
802 return gm_process_last_member_query_interval_cmd(vty, lmqi_str);
803 }
804
805 DEFPY (interface_no_ipv6_mld_last_member_query_interval,
806 interface_no_ipv6_mld_last_member_query_interval_cmd,
807 "no ipv6 mld last-member-query-interval [(1-65535)]",
808 NO_STR
809 IPV6_STR
810 IFACE_MLD_STR
811 IFACE_MLD_LAST_MEMBER_QUERY_INTERVAL_STR
812 IGNORED_IN_NO_STR)
813 {
814 return gm_process_no_last_member_query_interval_cmd(vty);
815 }
816
817 DEFPY (show_ipv6_pim_rp,
818 show_ipv6_pim_rp_cmd,
819 "show ipv6 pim [vrf NAME] rp-info [X:X::X:X/M$group] [json$json]",
820 SHOW_STR
821 IPV6_STR
822 PIM_STR
823 VRF_CMD_HELP_STR
824 "PIM RP information\n"
825 "Multicast Group range\n"
826 JSON_STR)
827 {
828 return pim_show_rp_helper(vrf, vty, group_str, (struct prefix *)group,
829 !!json);
830 }
831
832 DEFPY (show_ipv6_pim_rp_vrf_all,
833 show_ipv6_pim_rp_vrf_all_cmd,
834 "show ipv6 pim vrf all rp-info [X:X::X:X/M$group] [json$json]",
835 SHOW_STR
836 IPV6_STR
837 PIM_STR
838 VRF_CMD_HELP_STR
839 "PIM RP information\n"
840 "Multicast Group range\n"
841 JSON_STR)
842 {
843 return pim_show_rp_vrf_all_helper(vty, group_str,
844 (struct prefix *)group, !!json);
845 }
846
847 DEFPY (show_ipv6_pim_rpf,
848 show_ipv6_pim_rpf_cmd,
849 "show ipv6 pim [vrf NAME] rpf [json$json]",
850 SHOW_STR
851 IPV6_STR
852 PIM_STR
853 VRF_CMD_HELP_STR
854 "PIM cached source rpf information\n"
855 JSON_STR)
856 {
857 return pim_show_rpf_helper(vrf, vty, !!json);
858 }
859
860 DEFPY (show_ipv6_pim_rpf_vrf_all,
861 show_ipv6_pim_rpf_vrf_all_cmd,
862 "show ipv6 pim vrf all rpf [json$json]",
863 SHOW_STR
864 IPV6_STR
865 PIM_STR
866 VRF_CMD_HELP_STR
867 "PIM cached source rpf information\n"
868 JSON_STR)
869 {
870 return pim_show_rpf_vrf_all_helper(vty, !!json);
871 }
872
873 DEFPY (show_ipv6_pim_secondary,
874 show_ipv6_pim_secondary_cmd,
875 "show ipv6 pim [vrf NAME] secondary",
876 SHOW_STR
877 IPV6_STR
878 PIM_STR
879 VRF_CMD_HELP_STR
880 "PIM neighbor addresses\n")
881 {
882 return pim_show_secondary_helper(vrf, vty);
883 }
884
885 DEFPY (show_ipv6_pim_statistics,
886 show_ipv6_pim_statistics_cmd,
887 "show ipv6 pim [vrf NAME] statistics [interface WORD$word] [json$json]",
888 SHOW_STR
889 IPV6_STR
890 PIM_STR
891 VRF_CMD_HELP_STR
892 "PIM statistics\n"
893 INTERFACE_STR
894 "PIM interface\n"
895 JSON_STR)
896 {
897 return pim_show_statistics_helper(vrf, vty, word, !!json);
898 }
899
900 DEFPY (show_ipv6_pim_upstream,
901 show_ipv6_pim_upstream_cmd,
902 "show ipv6 pim [vrf NAME] upstream [X:X::X:X$s_or_g [X:X::X:X$g]] [json$json]",
903 SHOW_STR
904 IPV6_STR
905 PIM_STR
906 VRF_CMD_HELP_STR
907 "PIM upstream information\n"
908 "The Source or Group\n"
909 "The Group\n"
910 JSON_STR)
911 {
912 return pim_show_upstream_helper(vrf, vty, s_or_g, g, !!json);
913 }
914
915 DEFPY (show_ipv6_pim_upstream_vrf_all,
916 show_ipv6_pim_upstream_vrf_all_cmd,
917 "show ipv6 pim vrf all upstream [json$json]",
918 SHOW_STR
919 IPV6_STR
920 PIM_STR
921 VRF_CMD_HELP_STR
922 "PIM upstream information\n"
923 JSON_STR)
924 {
925 return pim_show_upstream_vrf_all_helper(vty, !!json);
926 }
927
928 DEFPY (show_ipv6_pim_upstream_join_desired,
929 show_ipv6_pim_upstream_join_desired_cmd,
930 "show ipv6 pim [vrf NAME] upstream-join-desired [json$json]",
931 SHOW_STR
932 IPV6_STR
933 PIM_STR
934 VRF_CMD_HELP_STR
935 "PIM upstream join-desired\n"
936 JSON_STR)
937 {
938 return pim_show_upstream_join_desired_helper(vrf, vty, !!json);
939 }
940
941 DEFPY (show_ipv6_pim_upstream_rpf,
942 show_ipv6_pim_upstream_rpf_cmd,
943 "show ipv6 pim [vrf NAME] upstream-rpf [json$json]",
944 SHOW_STR
945 IPV6_STR
946 PIM_STR
947 VRF_CMD_HELP_STR
948 "PIM upstream source rpf\n"
949 JSON_STR)
950 {
951 return pim_show_upstream_rpf_helper(vrf, vty, !!json);
952 }
953
954 DEFPY (show_ipv6_pim_state,
955 show_ipv6_pim_state_cmd,
956 "show ipv6 pim [vrf NAME] state [X:X::X:X$s_or_g [X:X::X:X$g]] [json$json]",
957 SHOW_STR
958 IPV6_STR
959 PIM_STR
960 VRF_CMD_HELP_STR
961 "PIM state information\n"
962 "Unicast or Multicast address\n"
963 "Multicast address\n"
964 JSON_STR)
965 {
966 return pim_show_state_helper(vrf, vty, s_or_g_str, g_str, !!json);
967 }
968
969 DEFPY (show_ipv6_pim_state_vrf_all,
970 show_ipv6_pim_state_vrf_all_cmd,
971 "show ipv6 pim vrf all state [X:X::X:X$s_or_g [X:X::X:X$g]] [json$json]",
972 SHOW_STR
973 IPV6_STR
974 PIM_STR
975 VRF_CMD_HELP_STR
976 "PIM state information\n"
977 "Unicast or Multicast address\n"
978 "Multicast address\n"
979 JSON_STR)
980 {
981 return pim_show_state_vrf_all_helper(vty, s_or_g_str, g_str, !!json);
982 }
983
984 DEFPY (show_ipv6_pim_channel,
985 show_ipv6_pim_channel_cmd,
986 "show ipv6 pim [vrf NAME] channel [json$json]",
987 SHOW_STR
988 IPV6_STR
989 PIM_STR
990 VRF_CMD_HELP_STR
991 "PIM downstream channel info\n"
992 JSON_STR)
993 {
994 return pim_show_channel_cmd_helper(vrf, vty, !!json);
995 }
996
997 DEFPY (show_ipv6_pim_interface,
998 show_ipv6_pim_interface_cmd,
999 "show ipv6 pim [vrf NAME] interface [detail|WORD]$interface [json$json]",
1000 SHOW_STR
1001 IPV6_STR
1002 PIM_STR
1003 VRF_CMD_HELP_STR
1004 "PIM interface information\n"
1005 "Detailed output\n"
1006 "interface name\n"
1007 JSON_STR)
1008 {
1009 return pim_show_interface_cmd_helper(vrf, vty, !!json, false,
1010 interface);
1011 }
1012
1013 DEFPY (show_ipv6_pim_interface_vrf_all,
1014 show_ipv6_pim_interface_vrf_all_cmd,
1015 "show ipv6 pim vrf all interface [detail|WORD]$interface [json$json]",
1016 SHOW_STR
1017 IPV6_STR
1018 PIM_STR
1019 VRF_CMD_HELP_STR
1020 "PIM interface information\n"
1021 "Detailed output\n"
1022 "interface name\n"
1023 JSON_STR)
1024 {
1025 return pim_show_interface_vrf_all_cmd_helper(vty, !!json, false,
1026 interface);
1027 }
1028
1029 DEFPY (show_ipv6_pim_join,
1030 show_ipv6_pim_join_cmd,
1031 "show ipv6 pim [vrf NAME] join [X:X::X:X$s_or_g [X:X::X:X$g]] [json$json]",
1032 SHOW_STR
1033 IPV6_STR
1034 PIM_STR
1035 VRF_CMD_HELP_STR
1036 "PIM interface join information\n"
1037 "The Source or Group\n"
1038 "The Group\n"
1039 JSON_STR)
1040 {
1041 return pim_show_join_cmd_helper(vrf, vty, s_or_g, g, json);
1042 }
1043
1044 DEFPY (show_ipv6_pim_join_vrf_all,
1045 show_ipv6_pim_join_vrf_all_cmd,
1046 "show ipv6 pim vrf all join [json$json]",
1047 SHOW_STR
1048 IPV6_STR
1049 PIM_STR
1050 VRF_CMD_HELP_STR
1051 "PIM interface join information\n"
1052 JSON_STR)
1053 {
1054 return pim_show_join_vrf_all_cmd_helper(vty, json);
1055 }
1056
1057 DEFPY (show_ipv6_pim_jp_agg,
1058 show_ipv6_pim_jp_agg_cmd,
1059 "show ipv6 pim [vrf NAME] jp-agg",
1060 SHOW_STR
1061 IPV6_STR
1062 PIM_STR
1063 VRF_CMD_HELP_STR
1064 "join prune aggregation list\n")
1065 {
1066 return pim_show_jp_agg_list_cmd_helper(vrf, vty);
1067 }
1068
1069 DEFPY (show_ipv6_pim_local_membership,
1070 show_ipv6_pim_local_membership_cmd,
1071 "show ipv6 pim [vrf NAME] local-membership [json$json]",
1072 SHOW_STR
1073 IPV6_STR
1074 PIM_STR
1075 VRF_CMD_HELP_STR
1076 "PIM interface local-membership\n"
1077 JSON_STR)
1078 {
1079 return pim_show_membership_cmd_helper(vrf, vty, !!json);
1080 }
1081
1082 DEFPY (show_ipv6_pim_neighbor,
1083 show_ipv6_pim_neighbor_cmd,
1084 "show ipv6 pim [vrf NAME] neighbor [detail|WORD]$interface [json$json]",
1085 SHOW_STR
1086 IPV6_STR
1087 PIM_STR
1088 VRF_CMD_HELP_STR
1089 "PIM neighbor information\n"
1090 "Detailed output\n"
1091 "Name of interface or neighbor\n"
1092 JSON_STR)
1093 {
1094 return pim_show_neighbors_cmd_helper(vrf, vty, json, interface);
1095 }
1096
1097 DEFPY (show_ipv6_pim_neighbor_vrf_all,
1098 show_ipv6_pim_neighbor_vrf_all_cmd,
1099 "show ipv6 pim vrf all neighbor [detail|WORD]$interface [json$json]",
1100 SHOW_STR
1101 IPV6_STR
1102 PIM_STR
1103 VRF_CMD_HELP_STR
1104 "PIM neighbor information\n"
1105 "Detailed output\n"
1106 "Name of interface or neighbor\n"
1107 JSON_STR)
1108 {
1109 return pim_show_neighbors_vrf_all_cmd_helper(vty, json, interface);
1110 }
1111
1112 DEFPY (show_ipv6_pim_nexthop,
1113 show_ipv6_pim_nexthop_cmd,
1114 "show ipv6 pim [vrf NAME] nexthop [json$json]",
1115 SHOW_STR
1116 IPV6_STR
1117 PIM_STR
1118 VRF_CMD_HELP_STR
1119 "PIM cached nexthop rpf information\n"
1120 JSON_STR)
1121 {
1122 return pim_show_nexthop_cmd_helper(vrf, vty, !!json);
1123 }
1124
1125 DEFPY (show_ipv6_pim_nexthop_lookup,
1126 show_ipv6_pim_nexthop_lookup_cmd,
1127 "show ipv6 pim [vrf NAME] nexthop-lookup X:X::X:X$source X:X::X:X$group",
1128 SHOW_STR
1129 IPV6_STR
1130 PIM_STR
1131 VRF_CMD_HELP_STR
1132 "PIM cached nexthop rpf lookup\n"
1133 "Source/RP address\n"
1134 "Multicast Group address\n")
1135 {
1136 return pim_show_nexthop_lookup_cmd_helper(vrf, vty, source, group);
1137 }
1138
1139 DEFPY (show_ipv6_multicast,
1140 show_ipv6_multicast_cmd,
1141 "show ipv6 multicast [vrf NAME]",
1142 SHOW_STR
1143 IPV6_STR
1144 "Multicast global information\n"
1145 VRF_CMD_HELP_STR)
1146 {
1147 return pim_show_multicast_helper(vrf, vty);
1148 }
1149
1150 DEFPY (show_ipv6_multicast_vrf_all,
1151 show_ipv6_multicast_vrf_all_cmd,
1152 "show ipv6 multicast vrf all",
1153 SHOW_STR
1154 IPV6_STR
1155 "Multicast global information\n"
1156 VRF_CMD_HELP_STR)
1157 {
1158 return pim_show_multicast_vrf_all_helper(vty);
1159 }
1160
1161 DEFPY (show_ipv6_multicast_count,
1162 show_ipv6_multicast_count_cmd,
1163 "show ipv6 multicast count [vrf NAME] [json$json]",
1164 SHOW_STR
1165 IPV6_STR
1166 "Multicast global information\n"
1167 "Data packet count\n"
1168 VRF_CMD_HELP_STR
1169 JSON_STR)
1170 {
1171 return pim_show_multicast_count_helper(vrf, vty, !!json);
1172 }
1173
1174 DEFPY (show_ipv6_multicast_count_vrf_all,
1175 show_ipv6_multicast_count_vrf_all_cmd,
1176 "show ipv6 multicast count vrf all [json$json]",
1177 SHOW_STR
1178 IPV6_STR
1179 "Multicast global information\n"
1180 "Data packet count\n"
1181 VRF_CMD_HELP_STR
1182 JSON_STR)
1183 {
1184 return pim_show_multicast_count_vrf_all_helper(vty, !!json);
1185 }
1186
1187 DEFPY (show_ipv6_mroute,
1188 show_ipv6_mroute_cmd,
1189 "show ipv6 mroute [vrf NAME] [X:X::X:X$s_or_g [X:X::X:X$g]] [fill$fill] [json$json]",
1190 SHOW_STR
1191 IPV6_STR
1192 MROUTE_STR
1193 VRF_CMD_HELP_STR
1194 "The Source or Group\n"
1195 "The Group\n"
1196 "Fill in Assumed data\n"
1197 JSON_STR)
1198 {
1199 return pim_show_mroute_helper(vrf, vty, s_or_g, g, !!fill, !!json);
1200 }
1201
1202 DEFPY (show_ipv6_mroute_vrf_all,
1203 show_ipv6_mroute_vrf_all_cmd,
1204 "show ipv6 mroute vrf all [fill$fill] [json$json]",
1205 SHOW_STR
1206 IPV6_STR
1207 MROUTE_STR
1208 VRF_CMD_HELP_STR
1209 "Fill in Assumed data\n"
1210 JSON_STR)
1211 {
1212 return pim_show_mroute_vrf_all_helper(vty, !!fill, !!json);
1213 }
1214
1215 DEFPY (show_ipv6_mroute_count,
1216 show_ipv6_mroute_count_cmd,
1217 "show ipv6 mroute [vrf NAME] count [json$json]",
1218 SHOW_STR
1219 IPV6_STR
1220 MROUTE_STR
1221 VRF_CMD_HELP_STR
1222 "Route and packet count data\n"
1223 JSON_STR)
1224 {
1225 return pim_show_mroute_count_helper(vrf, vty, !!json);
1226 }
1227
1228 DEFPY (show_ipv6_mroute_count_vrf_all,
1229 show_ipv6_mroute_count_vrf_all_cmd,
1230 "show ipv6 mroute vrf all count [json$json]",
1231 SHOW_STR
1232 IPV6_STR
1233 MROUTE_STR
1234 VRF_CMD_HELP_STR
1235 "Route and packet count data\n"
1236 JSON_STR)
1237 {
1238 return pim_show_mroute_count_vrf_all_helper(vty, !!json);
1239 }
1240
1241 DEFPY (show_ipv6_mroute_summary,
1242 show_ipv6_mroute_summary_cmd,
1243 "show ipv6 mroute [vrf NAME] summary [json$json]",
1244 SHOW_STR
1245 IPV6_STR
1246 MROUTE_STR
1247 VRF_CMD_HELP_STR
1248 "Summary of all mroutes\n"
1249 JSON_STR)
1250 {
1251 return pim_show_mroute_summary_helper(vrf, vty, !!json);
1252 }
1253
1254 DEFPY (show_ipv6_mroute_summary_vrf_all,
1255 show_ipv6_mroute_summary_vrf_all_cmd,
1256 "show ipv6 mroute vrf all summary [json$json]",
1257 SHOW_STR
1258 IPV6_STR
1259 MROUTE_STR
1260 VRF_CMD_HELP_STR
1261 "Summary of all mroutes\n"
1262 JSON_STR)
1263 {
1264 return pim_show_mroute_summary_vrf_all_helper(vty, !!json);
1265 }
1266
1267 DEFPY (show_ipv6_pim_interface_traffic,
1268 show_ipv6_pim_interface_traffic_cmd,
1269 "show ipv6 pim [vrf NAME] interface traffic [WORD$if_name] [json$json]",
1270 SHOW_STR
1271 IPV6_STR
1272 PIM_STR
1273 VRF_CMD_HELP_STR
1274 "PIM interface information\n"
1275 "Protocol Packet counters\n"
1276 "Interface name\n"
1277 JSON_STR)
1278 {
1279 return pim_show_interface_traffic_helper(vrf, if_name, vty, !!json);
1280 }
1281
1282 DEFPY (show_ipv6_pim_bsr,
1283 show_ipv6_pim_bsr_cmd,
1284 "show ipv6 pim bsr [vrf NAME] [json$json]",
1285 SHOW_STR
1286 IPV6_STR
1287 PIM_STR
1288 "boot-strap router information\n"
1289 VRF_CMD_HELP_STR
1290 JSON_STR)
1291 {
1292 return pim_show_bsr_helper(vrf, vty, !!json);
1293 }
1294
1295 DEFPY (show_ipv6_pim_bsm_db,
1296 show_ipv6_pim_bsm_db_cmd,
1297 "show ipv6 pim bsm-database [vrf NAME] [json$json]",
1298 SHOW_STR
1299 IPV6_STR
1300 PIM_STR
1301 "PIM cached bsm packets information\n"
1302 VRF_CMD_HELP_STR
1303 JSON_STR)
1304 {
1305 return pim_show_bsm_db_helper(vrf, vty, !!json);
1306 }
1307
1308 DEFPY (show_ipv6_pim_bsrp,
1309 show_ipv6_pim_bsrp_cmd,
1310 "show ipv6 pim bsrp-info [vrf NAME] [json$json]",
1311 SHOW_STR
1312 IPV6_STR
1313 PIM_STR
1314 "PIM cached group-rp mappings information\n"
1315 VRF_CMD_HELP_STR
1316 JSON_STR)
1317 {
1318 return pim_show_group_rp_mappings_info_helper(vrf, vty, !!json);
1319 }
1320
1321 DEFPY (clear_ipv6_pim_statistics,
1322 clear_ipv6_pim_statistics_cmd,
1323 "clear ipv6 pim statistics [vrf NAME]$name",
1324 CLEAR_STR
1325 IPV6_STR
1326 CLEAR_IP_PIM_STR
1327 VRF_CMD_HELP_STR
1328 "Reset PIM statistics\n")
1329 {
1330 struct vrf *v = pim_cmd_lookup(vty, name);
1331
1332 if (!v)
1333 return CMD_WARNING;
1334
1335 clear_pim_statistics(v->info);
1336
1337 return CMD_SUCCESS;
1338 }
1339
1340 DEFPY (clear_ipv6_pim_interface_traffic,
1341 clear_ipv6_pim_interface_traffic_cmd,
1342 "clear ipv6 pim [vrf NAME] interface traffic",
1343 CLEAR_STR
1344 IPV6_STR
1345 CLEAR_IP_PIM_STR
1346 VRF_CMD_HELP_STR
1347 "Reset PIM interfaces\n"
1348 "Reset Protocol Packet counters\n")
1349 {
1350 return clear_pim_interface_traffic(vrf, vty);
1351 }
1352
1353 DEFPY (clear_ipv6_mroute,
1354 clear_ipv6_mroute_cmd,
1355 "clear ipv6 mroute [vrf NAME]$name",
1356 CLEAR_STR
1357 IPV6_STR
1358 MROUTE_STR
1359 VRF_CMD_HELP_STR)
1360 {
1361 struct vrf *v = pim_cmd_lookup(vty, name);
1362
1363 if (!v)
1364 return CMD_WARNING;
1365
1366 clear_mroute(v->info);
1367
1368 return CMD_SUCCESS;
1369 }
1370
1371 DEFPY (clear_ipv6_pim_oil,
1372 clear_ipv6_pim_oil_cmd,
1373 "clear ipv6 pim [vrf NAME]$name oil",
1374 CLEAR_STR
1375 IPV6_STR
1376 CLEAR_IP_PIM_STR
1377 VRF_CMD_HELP_STR
1378 "Rescan PIMv6 OIL (output interface list)\n")
1379 {
1380 struct vrf *v = pim_cmd_lookup(vty, name);
1381
1382 if (!v)
1383 return CMD_WARNING;
1384
1385 pim_scan_oil(v->info);
1386
1387 return CMD_SUCCESS;
1388 }
1389
1390 DEFPY (clear_ipv6_mroute_count,
1391 clear_ipv6_mroute_count_cmd,
1392 "clear ipv6 mroute [vrf NAME]$name count",
1393 CLEAR_STR
1394 IPV6_STR
1395 MROUTE_STR
1396 VRF_CMD_HELP_STR
1397 "Route and packet count data\n")
1398 {
1399 return clear_ip_mroute_count_command(vty, name);
1400 }
1401
1402 DEFPY (clear_ipv6_pim_interfaces,
1403 clear_ipv6_pim_interfaces_cmd,
1404 "clear ipv6 pim [vrf NAME] interfaces",
1405 CLEAR_STR
1406 IPV6_STR
1407 CLEAR_IP_PIM_STR
1408 VRF_CMD_HELP_STR
1409 "Reset PIM interfaces\n")
1410 {
1411 struct vrf *v = pim_cmd_lookup(vty, vrf);
1412
1413 if (!v)
1414 return CMD_WARNING;
1415
1416 clear_pim_interfaces(v->info);
1417
1418 return CMD_SUCCESS;
1419 }
1420
1421 DEFPY (clear_ipv6_pim_bsr_db,
1422 clear_ipv6_pim_bsr_db_cmd,
1423 "clear ipv6 pim [vrf NAME] bsr-data",
1424 CLEAR_STR
1425 IPV6_STR
1426 CLEAR_IP_PIM_STR
1427 VRF_CMD_HELP_STR
1428 "Reset pim bsr data\n")
1429 {
1430 struct vrf *v;
1431
1432 v = vrf_lookup_by_name(vrf ? vrf : VRF_DEFAULT_NAME);
1433 if (!v)
1434 return CMD_WARNING;
1435
1436 pim_bsm_clear(v->info);
1437
1438 return CMD_SUCCESS;
1439 }
1440
1441 DEFPY (debug_pimv6,
1442 debug_pimv6_cmd,
1443 "[no] debug pimv6",
1444 NO_STR
1445 DEBUG_STR
1446 DEBUG_PIMV6_STR)
1447 {
1448 if (!no)
1449 return pim_debug_pim_cmd();
1450 else
1451 return pim_no_debug_pim_cmd();
1452 }
1453
1454 DEFPY (debug_pimv6_nht,
1455 debug_pimv6_nht_cmd,
1456 "[no] debug pimv6 nht",
1457 NO_STR
1458 DEBUG_STR
1459 DEBUG_PIMV6_STR
1460 "Nexthop Tracking\n")
1461 {
1462 if (!no)
1463 PIM_DO_DEBUG_PIM_NHT;
1464 else
1465 PIM_DONT_DEBUG_PIM_NHT;
1466 return CMD_SUCCESS;
1467 }
1468
1469 DEFPY (debug_pimv6_nht_det,
1470 debug_pimv6_nht_det_cmd,
1471 "[no] debug pimv6 nht detail",
1472 NO_STR
1473 DEBUG_STR
1474 DEBUG_PIMV6_STR
1475 "Nexthop Tracking\n"
1476 "Detailed Information\n")
1477 {
1478 if (!no)
1479 PIM_DO_DEBUG_PIM_NHT_DETAIL;
1480 else
1481 PIM_DONT_DEBUG_PIM_NHT_DETAIL;
1482 return CMD_SUCCESS;
1483 }
1484
1485 DEFPY (debug_pimv6_events,
1486 debug_pimv6_events_cmd,
1487 "[no] debug pimv6 events",
1488 NO_STR
1489 DEBUG_STR
1490 DEBUG_PIMV6_STR
1491 DEBUG_PIMV6_EVENTS_STR)
1492 {
1493 if (!no)
1494 PIM_DO_DEBUG_PIM_EVENTS;
1495 else
1496 PIM_DONT_DEBUG_PIM_EVENTS;
1497 return CMD_SUCCESS;
1498 }
1499
1500 DEFPY (debug_pimv6_packets,
1501 debug_pimv6_packets_cmd,
1502 "[no] debug pimv6 packets [<hello$hello|joins$joins|register$registers>]",
1503 NO_STR
1504 DEBUG_STR
1505 DEBUG_PIMV6_STR
1506 DEBUG_PIMV6_PACKETS_STR
1507 DEBUG_PIMV6_HELLO_PACKETS_STR
1508 DEBUG_PIMV6_J_P_PACKETS_STR
1509 DEBUG_PIMV6_PIM_REG_PACKETS_STR)
1510 {
1511 if (!no)
1512 return pim_debug_pim_packets_cmd(hello, joins, registers, vty);
1513 else
1514 return pim_no_debug_pim_packets_cmd(hello, joins, registers,
1515 vty);
1516 }
1517
1518 DEFPY (debug_pimv6_packetdump_send,
1519 debug_pimv6_packetdump_send_cmd,
1520 "[no] debug pimv6 packet-dump send",
1521 NO_STR
1522 DEBUG_STR
1523 DEBUG_PIMV6_STR
1524 DEBUG_PIMV6_PACKETDUMP_STR
1525 DEBUG_PIMV6_PACKETDUMP_SEND_STR)
1526 {
1527 if (!no)
1528 PIM_DO_DEBUG_PIM_PACKETDUMP_SEND;
1529 else
1530 PIM_DONT_DEBUG_PIM_PACKETDUMP_SEND;
1531 return CMD_SUCCESS;
1532 }
1533
1534 DEFPY (debug_pimv6_packetdump_recv,
1535 debug_pimv6_packetdump_recv_cmd,
1536 "[no] debug pimv6 packet-dump receive",
1537 NO_STR
1538 DEBUG_STR
1539 DEBUG_PIMV6_STR
1540 DEBUG_PIMV6_PACKETDUMP_STR
1541 DEBUG_PIMV6_PACKETDUMP_RECV_STR)
1542 {
1543 if (!no)
1544 PIM_DO_DEBUG_PIM_PACKETDUMP_RECV;
1545 else
1546 PIM_DONT_DEBUG_PIM_PACKETDUMP_RECV;
1547 return CMD_SUCCESS;
1548 }
1549
1550 DEFPY (debug_pimv6_trace,
1551 debug_pimv6_trace_cmd,
1552 "[no] debug pimv6 trace",
1553 NO_STR
1554 DEBUG_STR
1555 DEBUG_PIMV6_STR
1556 DEBUG_PIMV6_TRACE_STR)
1557 {
1558 if (!no)
1559 PIM_DO_DEBUG_PIM_TRACE;
1560 else
1561 PIM_DONT_DEBUG_PIM_TRACE;
1562 return CMD_SUCCESS;
1563 }
1564
1565 DEFPY (debug_pimv6_trace_detail,
1566 debug_pimv6_trace_detail_cmd,
1567 "[no] debug pimv6 trace detail",
1568 NO_STR
1569 DEBUG_STR
1570 DEBUG_PIMV6_STR
1571 DEBUG_PIMV6_TRACE_STR
1572 "Detailed Information\n")
1573 {
1574 if (!no)
1575 PIM_DO_DEBUG_PIM_TRACE_DETAIL;
1576 else
1577 PIM_DONT_DEBUG_PIM_TRACE_DETAIL;
1578 return CMD_SUCCESS;
1579 }
1580
1581 DEFPY (debug_pimv6_zebra,
1582 debug_pimv6_zebra_cmd,
1583 "[no] debug pimv6 zebra",
1584 NO_STR
1585 DEBUG_STR
1586 DEBUG_PIMV6_STR
1587 DEBUG_PIMV6_ZEBRA_STR)
1588 {
1589 if (!no)
1590 PIM_DO_DEBUG_ZEBRA;
1591 else
1592 PIM_DONT_DEBUG_ZEBRA;
1593 return CMD_SUCCESS;
1594 }
1595
1596 DEFPY (debug_mroute6,
1597 debug_mroute6_cmd,
1598 "[no] debug mroute6",
1599 NO_STR
1600 DEBUG_STR
1601 DEBUG_MROUTE6_STR)
1602 {
1603 if (!no)
1604 PIM_DO_DEBUG_MROUTE;
1605 else
1606 PIM_DONT_DEBUG_MROUTE;
1607
1608 return CMD_SUCCESS;
1609 }
1610
1611 DEFPY (debug_mroute6_detail,
1612 debug_mroute6_detail_cmd,
1613 "[no] debug mroute6 detail",
1614 NO_STR
1615 DEBUG_STR
1616 DEBUG_MROUTE6_STR
1617 "detailed\n")
1618 {
1619 if (!no)
1620 PIM_DO_DEBUG_MROUTE_DETAIL;
1621 else
1622 PIM_DONT_DEBUG_MROUTE_DETAIL;
1623
1624 return CMD_SUCCESS;
1625 }
1626
1627 DEFUN_NOSH (show_debugging_pimv6,
1628 show_debugging_pimv6_cmd,
1629 "show debugging [pimv6]",
1630 SHOW_STR
1631 DEBUG_STR
1632 "PIMv6 Information\n")
1633 {
1634 vty_out(vty, "PIMv6 debugging status\n");
1635
1636 pim_debug_config_write(vty);
1637
1638 cmd_show_lib_debugs(vty);
1639
1640 return CMD_SUCCESS;
1641 }
1642
1643 DEFPY (debug_mld,
1644 debug_mld_cmd,
1645 "[no] debug mld",
1646 NO_STR
1647 DEBUG_STR
1648 DEBUG_MLD_STR)
1649 {
1650 if (!no) {
1651 PIM_DO_DEBUG_GM_EVENTS;
1652 PIM_DO_DEBUG_GM_PACKETS;
1653 PIM_DO_DEBUG_GM_TRACE;
1654 } else {
1655 PIM_DONT_DEBUG_GM_EVENTS;
1656 PIM_DONT_DEBUG_GM_PACKETS;
1657 PIM_DONT_DEBUG_GM_TRACE;
1658 }
1659
1660 return CMD_SUCCESS;
1661 }
1662
1663 DEFPY (debug_mld_events,
1664 debug_mld_events_cmd,
1665 "[no] debug mld events",
1666 NO_STR
1667 DEBUG_STR
1668 DEBUG_MLD_STR
1669 DEBUG_MLD_EVENTS_STR)
1670 {
1671 if (!no)
1672 PIM_DO_DEBUG_GM_EVENTS;
1673 else
1674 PIM_DONT_DEBUG_GM_EVENTS;
1675
1676 return CMD_SUCCESS;
1677 }
1678
1679 DEFPY (debug_mld_packets,
1680 debug_mld_packets_cmd,
1681 "[no] debug mld packets",
1682 NO_STR
1683 DEBUG_STR
1684 DEBUG_MLD_STR
1685 DEBUG_MLD_PACKETS_STR)
1686 {
1687 if (!no)
1688 PIM_DO_DEBUG_GM_PACKETS;
1689 else
1690 PIM_DONT_DEBUG_GM_PACKETS;
1691
1692 return CMD_SUCCESS;
1693 }
1694
1695 DEFPY (debug_mld_trace,
1696 debug_mld_trace_cmd,
1697 "[no] debug mld trace",
1698 NO_STR
1699 DEBUG_STR
1700 DEBUG_MLD_STR
1701 DEBUG_MLD_TRACE_STR)
1702 {
1703 if (!no)
1704 PIM_DO_DEBUG_GM_TRACE;
1705 else
1706 PIM_DONT_DEBUG_GM_TRACE;
1707
1708 return CMD_SUCCESS;
1709 }
1710
1711 DEFPY (debug_mld_trace_detail,
1712 debug_mld_trace_detail_cmd,
1713 "[no] debug mld trace detail",
1714 NO_STR
1715 DEBUG_STR
1716 DEBUG_MLD_STR
1717 DEBUG_MLD_TRACE_STR
1718 "detailed\n")
1719 {
1720 if (!no)
1721 PIM_DO_DEBUG_GM_TRACE_DETAIL;
1722 else
1723 PIM_DONT_DEBUG_GM_TRACE_DETAIL;
1724
1725 return CMD_SUCCESS;
1726 }
1727
1728 DEFPY (debug_pimv6_bsm,
1729 debug_pimv6_bsm_cmd,
1730 "[no] debug pimv6 bsm",
1731 NO_STR
1732 DEBUG_STR
1733 DEBUG_PIMV6_STR
1734 DEBUG_PIMV6_BSM_STR)
1735 {
1736 if (!no)
1737 PIM_DO_DEBUG_BSM;
1738 else
1739 PIM_DONT_DEBUG_BSM;
1740
1741 return CMD_SUCCESS;
1742 }
1743
1744 void pim_cmd_init(void)
1745 {
1746 if_cmd_init(pim_interface_config_write);
1747
1748 install_node(&debug_node);
1749
1750 install_element(CONFIG_NODE, &ipv6_pim_joinprune_time_cmd);
1751 install_element(CONFIG_NODE, &no_ipv6_pim_joinprune_time_cmd);
1752 install_element(CONFIG_NODE, &ipv6_pim_spt_switchover_infinity_cmd);
1753 install_element(CONFIG_NODE, &ipv6_pim_spt_switchover_infinity_plist_cmd);
1754 install_element(CONFIG_NODE, &no_ipv6_pim_spt_switchover_infinity_cmd);
1755 install_element(CONFIG_NODE, &no_ipv6_pim_spt_switchover_infinity_plist_cmd);
1756 install_element(CONFIG_NODE, &ipv6_pim_packets_cmd);
1757 install_element(CONFIG_NODE, &no_ipv6_pim_packets_cmd);
1758 install_element(CONFIG_NODE, &ipv6_pim_keep_alive_cmd);
1759 install_element(CONFIG_NODE, &no_ipv6_pim_keep_alive_cmd);
1760 install_element(CONFIG_NODE, &ipv6_pim_rp_keep_alive_cmd);
1761 install_element(CONFIG_NODE, &no_ipv6_pim_rp_keep_alive_cmd);
1762 install_element(CONFIG_NODE, &ipv6_pim_register_suppress_cmd);
1763 install_element(CONFIG_NODE, &no_ipv6_pim_register_suppress_cmd);
1764 install_element(INTERFACE_NODE, &interface_ipv6_pim_cmd);
1765 install_element(INTERFACE_NODE, &interface_no_ipv6_pim_cmd);
1766 install_element(INTERFACE_NODE, &interface_ipv6_pim_drprio_cmd);
1767 install_element(INTERFACE_NODE, &interface_no_ipv6_pim_drprio_cmd);
1768 install_element(INTERFACE_NODE, &interface_ipv6_pim_hello_cmd);
1769 install_element(INTERFACE_NODE, &interface_no_ipv6_pim_hello_cmd);
1770 install_element(INTERFACE_NODE, &interface_ipv6_pim_activeactive_cmd);
1771 install_element(INTERFACE_NODE, &interface_ipv6_pim_ssm_cmd);
1772 install_element(INTERFACE_NODE, &interface_no_ipv6_pim_ssm_cmd);
1773 install_element(INTERFACE_NODE, &interface_ipv6_pim_sm_cmd);
1774 install_element(INTERFACE_NODE, &interface_no_ipv6_pim_sm_cmd);
1775 install_element(INTERFACE_NODE,
1776 &interface_ipv6_pim_boundary_oil_cmd);
1777 install_element(INTERFACE_NODE,
1778 &interface_no_ipv6_pim_boundary_oil_cmd);
1779 install_element(INTERFACE_NODE, &interface_ipv6_mroute_cmd);
1780 install_element(INTERFACE_NODE, &interface_no_ipv6_mroute_cmd);
1781 /* Install BSM command */
1782 install_element(INTERFACE_NODE, &ipv6_pim_bsm_cmd);
1783 install_element(INTERFACE_NODE, &no_ipv6_pim_bsm_cmd);
1784 install_element(INTERFACE_NODE, &ipv6_pim_ucast_bsm_cmd);
1785 install_element(INTERFACE_NODE, &no_ipv6_pim_ucast_bsm_cmd);
1786 install_element(CONFIG_NODE, &ipv6_pim_rp_cmd);
1787 install_element(VRF_NODE, &ipv6_pim_rp_cmd);
1788 install_element(CONFIG_NODE, &no_ipv6_pim_rp_cmd);
1789 install_element(VRF_NODE, &no_ipv6_pim_rp_cmd);
1790 install_element(CONFIG_NODE, &ipv6_pim_rp_prefix_list_cmd);
1791 install_element(VRF_NODE, &ipv6_pim_rp_prefix_list_cmd);
1792 install_element(CONFIG_NODE, &no_ipv6_pim_rp_prefix_list_cmd);
1793 install_element(VRF_NODE, &no_ipv6_pim_rp_prefix_list_cmd);
1794 install_element(CONFIG_NODE, &ipv6_ssmpingd_cmd);
1795 install_element(VRF_NODE, &ipv6_ssmpingd_cmd);
1796 install_element(CONFIG_NODE, &no_ipv6_ssmpingd_cmd);
1797 install_element(VRF_NODE, &no_ipv6_ssmpingd_cmd);
1798 install_element(INTERFACE_NODE, &interface_ipv6_mld_cmd);
1799 install_element(INTERFACE_NODE, &interface_no_ipv6_mld_cmd);
1800 install_element(INTERFACE_NODE, &interface_ipv6_mld_join_cmd);
1801 install_element(INTERFACE_NODE, &interface_no_ipv6_mld_join_cmd);
1802 install_element(INTERFACE_NODE, &interface_ipv6_mld_version_cmd);
1803 install_element(INTERFACE_NODE, &interface_no_ipv6_mld_version_cmd);
1804 install_element(INTERFACE_NODE, &interface_ipv6_mld_query_interval_cmd);
1805 install_element(INTERFACE_NODE,
1806 &interface_no_ipv6_mld_query_interval_cmd);
1807 install_element(CONFIG_NODE, &ipv6_mld_group_watermark_cmd);
1808 install_element(VRF_NODE, &ipv6_mld_group_watermark_cmd);
1809 install_element(CONFIG_NODE, &no_ipv6_mld_group_watermark_cmd);
1810 install_element(VRF_NODE, &no_ipv6_mld_group_watermark_cmd);
1811 install_element(INTERFACE_NODE,
1812 &interface_ipv6_mld_query_max_response_time_cmd);
1813 install_element(INTERFACE_NODE,
1814 &interface_no_ipv6_mld_query_max_response_time_cmd);
1815 install_element(INTERFACE_NODE,
1816 &interface_ipv6_mld_last_member_query_count_cmd);
1817 install_element(INTERFACE_NODE,
1818 &interface_no_ipv6_mld_last_member_query_count_cmd);
1819 install_element(INTERFACE_NODE,
1820 &interface_ipv6_mld_last_member_query_interval_cmd);
1821 install_element(INTERFACE_NODE,
1822 &interface_no_ipv6_mld_last_member_query_interval_cmd);
1823
1824 install_element(VIEW_NODE, &show_ipv6_pim_rp_cmd);
1825 install_element(VIEW_NODE, &show_ipv6_pim_rp_vrf_all_cmd);
1826 install_element(VIEW_NODE, &show_ipv6_pim_rpf_cmd);
1827 install_element(VIEW_NODE, &show_ipv6_pim_rpf_vrf_all_cmd);
1828 install_element(VIEW_NODE, &show_ipv6_pim_secondary_cmd);
1829 install_element(VIEW_NODE, &show_ipv6_pim_statistics_cmd);
1830 install_element(VIEW_NODE, &show_ipv6_pim_upstream_cmd);
1831 install_element(VIEW_NODE, &show_ipv6_pim_upstream_vrf_all_cmd);
1832 install_element(VIEW_NODE, &show_ipv6_pim_upstream_join_desired_cmd);
1833 install_element(VIEW_NODE, &show_ipv6_pim_upstream_rpf_cmd);
1834 install_element(VIEW_NODE, &show_ipv6_pim_state_cmd);
1835 install_element(VIEW_NODE, &show_ipv6_pim_state_vrf_all_cmd);
1836 install_element(VIEW_NODE, &show_ipv6_pim_channel_cmd);
1837 install_element(VIEW_NODE, &show_ipv6_pim_interface_cmd);
1838 install_element(VIEW_NODE, &show_ipv6_pim_interface_vrf_all_cmd);
1839 install_element(VIEW_NODE, &show_ipv6_pim_join_cmd);
1840 install_element(VIEW_NODE, &show_ipv6_pim_join_vrf_all_cmd);
1841 install_element(VIEW_NODE, &show_ipv6_pim_jp_agg_cmd);
1842 install_element(VIEW_NODE, &show_ipv6_pim_local_membership_cmd);
1843 install_element(VIEW_NODE, &show_ipv6_pim_neighbor_cmd);
1844 install_element(VIEW_NODE, &show_ipv6_pim_neighbor_vrf_all_cmd);
1845 install_element(VIEW_NODE, &show_ipv6_pim_nexthop_cmd);
1846 install_element(VIEW_NODE, &show_ipv6_pim_nexthop_lookup_cmd);
1847 install_element(VIEW_NODE, &show_ipv6_multicast_cmd);
1848 install_element(VIEW_NODE, &show_ipv6_multicast_vrf_all_cmd);
1849 install_element(VIEW_NODE, &show_ipv6_multicast_count_cmd);
1850 install_element(VIEW_NODE, &show_ipv6_multicast_count_vrf_all_cmd);
1851 install_element(VIEW_NODE, &show_ipv6_mroute_cmd);
1852 install_element(VIEW_NODE, &show_ipv6_mroute_vrf_all_cmd);
1853 install_element(VIEW_NODE, &show_ipv6_mroute_count_cmd);
1854 install_element(VIEW_NODE, &show_ipv6_mroute_count_vrf_all_cmd);
1855 install_element(VIEW_NODE, &show_ipv6_mroute_summary_cmd);
1856 install_element(VIEW_NODE, &show_ipv6_mroute_summary_vrf_all_cmd);
1857 install_element(VIEW_NODE, &show_ipv6_pim_interface_traffic_cmd);
1858 install_element(VIEW_NODE, &show_ipv6_pim_bsr_cmd);
1859 install_element(VIEW_NODE, &show_ipv6_pim_bsm_db_cmd);
1860 install_element(VIEW_NODE, &show_ipv6_pim_bsrp_cmd);
1861 install_element(ENABLE_NODE, &clear_ipv6_pim_statistics_cmd);
1862 install_element(ENABLE_NODE, &clear_ipv6_mroute_cmd);
1863 install_element(ENABLE_NODE, &clear_ipv6_pim_oil_cmd);
1864 install_element(ENABLE_NODE, &clear_ipv6_mroute_count_cmd);
1865 install_element(ENABLE_NODE, &clear_ipv6_pim_bsr_db_cmd);
1866 install_element(ENABLE_NODE, &clear_ipv6_pim_interfaces_cmd);
1867 install_element(ENABLE_NODE, &clear_ipv6_pim_interface_traffic_cmd);
1868
1869 install_element(ENABLE_NODE, &show_debugging_pimv6_cmd);
1870
1871 install_element(ENABLE_NODE, &debug_pimv6_cmd);
1872 install_element(ENABLE_NODE, &debug_pimv6_nht_cmd);
1873 install_element(ENABLE_NODE, &debug_pimv6_nht_det_cmd);
1874 install_element(ENABLE_NODE, &debug_pimv6_events_cmd);
1875 install_element(ENABLE_NODE, &debug_pimv6_packets_cmd);
1876 install_element(ENABLE_NODE, &debug_pimv6_packetdump_send_cmd);
1877 install_element(ENABLE_NODE, &debug_pimv6_packetdump_recv_cmd);
1878 install_element(ENABLE_NODE, &debug_pimv6_trace_cmd);
1879 install_element(ENABLE_NODE, &debug_pimv6_trace_detail_cmd);
1880 install_element(ENABLE_NODE, &debug_pimv6_zebra_cmd);
1881 install_element(ENABLE_NODE, &debug_mroute6_cmd);
1882 install_element(ENABLE_NODE, &debug_mroute6_detail_cmd);
1883 install_element(ENABLE_NODE, &debug_mld_cmd);
1884 install_element(ENABLE_NODE, &debug_mld_events_cmd);
1885 install_element(ENABLE_NODE, &debug_mld_packets_cmd);
1886 install_element(ENABLE_NODE, &debug_mld_trace_cmd);
1887 install_element(ENABLE_NODE, &debug_mld_trace_detail_cmd);
1888 install_element(ENABLE_NODE, &debug_pimv6_bsm_cmd);
1889
1890 install_element(CONFIG_NODE, &debug_pimv6_cmd);
1891 install_element(CONFIG_NODE, &debug_pimv6_nht_cmd);
1892 install_element(CONFIG_NODE, &debug_pimv6_nht_det_cmd);
1893 install_element(CONFIG_NODE, &debug_pimv6_events_cmd);
1894 install_element(CONFIG_NODE, &debug_pimv6_packets_cmd);
1895 install_element(CONFIG_NODE, &debug_pimv6_packetdump_send_cmd);
1896 install_element(CONFIG_NODE, &debug_pimv6_packetdump_recv_cmd);
1897 install_element(CONFIG_NODE, &debug_pimv6_trace_cmd);
1898 install_element(CONFIG_NODE, &debug_pimv6_trace_detail_cmd);
1899 install_element(CONFIG_NODE, &debug_pimv6_zebra_cmd);
1900 install_element(CONFIG_NODE, &debug_mroute6_cmd);
1901 install_element(CONFIG_NODE, &debug_mroute6_detail_cmd);
1902 install_element(CONFIG_NODE, &debug_mld_cmd);
1903 install_element(CONFIG_NODE, &debug_mld_events_cmd);
1904 install_element(CONFIG_NODE, &debug_mld_packets_cmd);
1905 install_element(CONFIG_NODE, &debug_mld_trace_cmd);
1906 install_element(CONFIG_NODE, &debug_mld_trace_detail_cmd);
1907 install_element(CONFIG_NODE, &debug_pimv6_bsm_cmd);
1908 }