back to topotato report
topotato coverage report
Current view: top level - pimd - pim6_cmd.c (source / functions) Hit Total Coverage
Test: aggregated run ( view descriptions ) Lines: 185 517 35.8 %
Date: 2023-02-24 19:38:44 Functions: 4 13 30.8 %

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

Generated by: LCOV version v1.16-topotato