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