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