From 58d5712048f2a5518dd315648ae8b3d60abf62d6 Mon Sep 17 00:00:00 2001 From: Sai Gomathi N Date: Tue, 12 Apr 2022 04:36:35 -0700 Subject: [PATCH 1/7] pimd: Moving the common functions from pim_cmd.c file Moving the functions that are used by both IPV4 and IPV6 to a common file pim_cmd_common.c file. Signed-off-by: Sai Gomathi N --- pimd/pim6_cmd.h | 1 + pimd/pim_cmd.c | 60 ------------------------------------------- pimd/pim_cmd_common.c | 59 ++++++++++++++++++++++++++++++++++++++++++ pimd/pim_cmd_common.h | 2 ++ 4 files changed, 62 insertions(+), 60 deletions(-) diff --git a/pimd/pim6_cmd.h b/pimd/pim6_cmd.h index d6853a7410..b7804c0db2 100644 --- a/pimd/pim6_cmd.h +++ b/pimd/pim6_cmd.h @@ -39,6 +39,7 @@ #define IFACE_PIM_HELLO_TIME_STR "Time in seconds for Hello Interval\n" #define IFACE_PIM_HELLO_HOLD_STR "Time in seconds for Hold Interval\n" #define MROUTE_STR "IP multicast routing table\n" +#define CLEAR_IP_PIM_STR "PIM clear commands\n" #define DEBUG_MLD_STR "MLD protocol activity\n" #define DEBUG_MLD_EVENTS_STR "MLD protocol events\n" #define DEBUG_MLD_PACKETS_STR "MLD protocol packets\n" diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index 7e9ce5f933..bdf015642f 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -1303,27 +1303,6 @@ static void pim_show_group_rp_mappings_info(struct pim_instance *pim, vty_json(vty, json); } -static void clear_pim_statistics(struct pim_instance *pim) -{ - struct interface *ifp; - - pim->bsm_rcvd = 0; - pim->bsm_sent = 0; - pim->bsm_dropped = 0; - - /* scan interfaces */ - FOR_ALL_INTERFACES (pim->vrf, ifp) { - struct pim_interface *pim_ifp = ifp->info; - - if (!pim_ifp) - continue; - - pim_ifp->pim_ifstat_bsm_cfg_miss = 0; - pim_ifp->pim_ifstat_ucast_bsm_cfg_miss = 0; - pim_ifp->pim_ifstat_bsm_invalid_sz = 0; - } -} - static void igmp_show_groups(struct pim_instance *pim, struct vty *vty, bool uj) { struct interface *ifp; @@ -1861,45 +1840,6 @@ DEFUN (clear_ip_pim_statistics, return CMD_SUCCESS; } -static void clear_mroute(struct pim_instance *pim) -{ - struct pim_upstream *up; - struct interface *ifp; - - /* scan interfaces */ - FOR_ALL_INTERFACES (pim->vrf, ifp) { - struct pim_interface *pim_ifp = ifp->info; - struct pim_ifchannel *ch; - - if (!pim_ifp) - continue; - - /* deleting all ifchannels */ - while (!RB_EMPTY(pim_ifchannel_rb, &pim_ifp->ifchannel_rb)) { - ch = RB_ROOT(pim_ifchannel_rb, &pim_ifp->ifchannel_rb); - - pim_ifchannel_delete(ch); - } - -#if PIM_IPV == 4 - /* clean up all igmp groups */ - struct gm_group *grp; - - if (pim_ifp->gm_group_list) { - while (pim_ifp->gm_group_list->count) { - grp = listnode_head(pim_ifp->gm_group_list); - igmp_group_delete(grp); - } - } -#endif - } - - /* clean up all upstreams*/ - while ((up = rb_pim_upstream_first(&pim->upstream_head))) - pim_upstream_del(pim, up, __func__); - -} - DEFUN (clear_ip_mroute, clear_ip_mroute_cmd, "clear ip mroute [vrf NAME]", diff --git a/pimd/pim_cmd_common.c b/pimd/pim_cmd_common.c index 6cff3a077e..f4479abfab 100644 --- a/pimd/pim_cmd_common.c +++ b/pimd/pim_cmd_common.c @@ -3563,3 +3563,62 @@ void show_mroute_summary(struct pim_instance *pim, struct vty *vty, sg_hw_mroute_cnt); } } + +void clear_mroute(struct pim_instance *pim) +{ + struct pim_upstream *up; + struct interface *ifp; + + /* scan interfaces */ + FOR_ALL_INTERFACES (pim->vrf, ifp) { + struct pim_interface *pim_ifp = ifp->info; + struct pim_ifchannel *ch; + + if (!pim_ifp) + continue; + + /* deleting all ifchannels */ + while (!RB_EMPTY(pim_ifchannel_rb, &pim_ifp->ifchannel_rb)) { + ch = RB_ROOT(pim_ifchannel_rb, &pim_ifp->ifchannel_rb); + + pim_ifchannel_delete(ch); + } + +#if PIM_IPV == 4 + /* clean up all igmp groups */ + struct gm_group *grp; + + if (pim_ifp->gm_group_list) { + while (pim_ifp->gm_group_list->count) { + grp = listnode_head(pim_ifp->gm_group_list); + igmp_group_delete(grp); + } + } +#endif + } + + /* clean up all upstreams*/ + while ((up = rb_pim_upstream_first(&pim->upstream_head))) + pim_upstream_del(pim, up, __func__); +} + +void clear_pim_statistics(struct pim_instance *pim) +{ + struct interface *ifp; + + pim->bsm_rcvd = 0; + pim->bsm_sent = 0; + pim->bsm_dropped = 0; + + /* scan interfaces */ + FOR_ALL_INTERFACES (pim->vrf, ifp) { + struct pim_interface *pim_ifp = ifp->info; + + if (!pim_ifp) + continue; + + pim_ifp->pim_ifstat_bsm_cfg_miss = 0; + pim_ifp->pim_ifstat_ucast_bsm_cfg_miss = 0; + pim_ifp->pim_ifstat_bsm_invalid_sz = 0; + } +} diff --git a/pimd/pim_cmd_common.h b/pimd/pim_cmd_common.h index 4457ea57a9..1431ce32e1 100644 --- a/pimd/pim_cmd_common.h +++ b/pimd/pim_cmd_common.h @@ -121,6 +121,8 @@ void show_mroute_count(struct pim_instance *pim, struct vty *vty, json_object *json); void show_mroute_summary(struct pim_instance *pim, struct vty *vty, json_object *json); +void clear_mroute(struct pim_instance *pim); +void clear_pim_statistics(struct pim_instance *pim); /* * Special Macro to allow us to get the correct pim_instance; From fe0c6838c5dc781fd3f55783f9c9061e6803a502 Mon Sep 17 00:00:00 2001 From: Sai Gomathi N Date: Wed, 27 Apr 2022 08:07:53 -0700 Subject: [PATCH 2/7] pim6d: Adding pim_cmd_lookup api in pim_cmd_common file Adding pim_cmd_lookup function for clear CLIs Signed-off-by: Sai Gomathi N --- pimd/pim_cmd_common.c | 15 +++++++++++++++ pimd/pim_cmd_common.h | 1 + 2 files changed, 16 insertions(+) diff --git a/pimd/pim_cmd_common.c b/pimd/pim_cmd_common.c index f4479abfab..6f81862db4 100644 --- a/pimd/pim_cmd_common.c +++ b/pimd/pim_cmd_common.c @@ -3564,6 +3564,21 @@ void show_mroute_summary(struct pim_instance *pim, struct vty *vty, } } +struct vrf *pim_cmd_lookup(struct vty *vty, const char *name) +{ + struct vrf *vrf; + + if (name) + vrf = vrf_lookup_by_name(name); + else + vrf = vrf_lookup_by_id(VRF_DEFAULT); + + if (!vrf) + vty_out(vty, "Specified VRF: %s does not exist\n", name); + + return vrf; +} + void clear_mroute(struct pim_instance *pim) { struct pim_upstream *up; diff --git a/pimd/pim_cmd_common.h b/pimd/pim_cmd_common.h index 1431ce32e1..b8264e24c4 100644 --- a/pimd/pim_cmd_common.h +++ b/pimd/pim_cmd_common.h @@ -121,6 +121,7 @@ void show_mroute_count(struct pim_instance *pim, struct vty *vty, json_object *json); void show_mroute_summary(struct pim_instance *pim, struct vty *vty, json_object *json); +struct vrf *pim_cmd_lookup(struct vty *vty, const char *name); void clear_mroute(struct pim_instance *pim); void clear_pim_statistics(struct pim_instance *pim); From ef1b0a2d8cbf6ce7bcb3da4e730ef02eb5de5f03 Mon Sep 17 00:00:00 2001 From: Sai Gomathi N Date: Wed, 13 Apr 2022 04:16:59 -0700 Subject: [PATCH 3/7] pim6d: Adding 'clear ipv6 pim statistics [vrf NAME]' cmd Adding clear ipv6 pim statistics cli for resetting pimv6 statistics Signed-off-by: Sai Gomathi N --- pimd/pim6_cmd.c | 21 +++++++++++++++++++++ pimd/pim_cmd.c | 12 ++++++------ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/pimd/pim6_cmd.c b/pimd/pim6_cmd.c index ecff2173d4..94074f256a 100644 --- a/pimd/pim6_cmd.c +++ b/pimd/pim6_cmd.c @@ -1935,6 +1935,25 @@ DEFPY (show_ipv6_mroute_summary_vrf_all, return CMD_SUCCESS; } +DEFPY (clear_ipv6_pim_statistics, + clear_ipv6_pim_statistics_cmd, + "clear ipv6 pim statistics [vrf NAME]$name", + CLEAR_STR + IPV6_STR + CLEAR_IP_PIM_STR + VRF_CMD_HELP_STR + "Reset PIM statistics\n") +{ + struct vrf *v = pim_cmd_lookup(vty, name); + + if (!v) + return CMD_WARNING; + + clear_pim_statistics(v->info); + + return CMD_SUCCESS; +} + void pim_cmd_init(void) { if_cmd_init(pim_interface_config_write); @@ -2041,4 +2060,6 @@ void pim_cmd_init(void) install_element(VIEW_NODE, &show_ipv6_mroute_count_vrf_all_cmd); install_element(VIEW_NODE, &show_ipv6_mroute_summary_cmd); install_element(VIEW_NODE, &show_ipv6_mroute_summary_vrf_all_cmd); + + install_element(ENABLE_NODE, &clear_ipv6_pim_statistics_cmd); } diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index bdf015642f..0200597857 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -1821,22 +1821,22 @@ DEFUN (clear_ip_igmp_interfaces, return CMD_SUCCESS; } -DEFUN (clear_ip_pim_statistics, +DEFPY (clear_ip_pim_statistics, clear_ip_pim_statistics_cmd, - "clear ip pim statistics [vrf NAME]", + "clear ip pim statistics [vrf NAME]$name", CLEAR_STR IP_STR CLEAR_IP_PIM_STR VRF_CMD_HELP_STR "Reset PIM statistics\n") { - int idx = 2; - struct vrf *vrf = pim_cmd_lookup_vrf(vty, argv, argc, &idx); + struct vrf *v = pim_cmd_lookup(vty, name); - if (!vrf) + if (!v) return CMD_WARNING; - clear_pim_statistics(vrf->info); + clear_pim_statistics(v->info); + return CMD_SUCCESS; } From a14ae314124684188e8a6b5ec65cef79295da41f Mon Sep 17 00:00:00 2001 From: Sai Gomathi N Date: Wed, 13 Apr 2022 06:14:02 -0700 Subject: [PATCH 4/7] pim6d: Add 'clear ipv6 mroute [vrf NAME]' command Adding clear ipv6 mroute cli for resetting the PIMv6 mroutes. Signed-off-by: Sai Gomathi N --- pimd/pim6_cmd.c | 19 +++++++++++++++++++ pimd/pim_cmd.c | 11 +++++------ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/pimd/pim6_cmd.c b/pimd/pim6_cmd.c index 94074f256a..e88a832cc3 100644 --- a/pimd/pim6_cmd.c +++ b/pimd/pim6_cmd.c @@ -1954,6 +1954,24 @@ DEFPY (clear_ipv6_pim_statistics, return CMD_SUCCESS; } +DEFPY (clear_ipv6_mroute, + clear_ipv6_mroute_cmd, + "clear ipv6 mroute [vrf NAME]$name", + CLEAR_STR + IPV6_STR + "Reset multicast routes\n" + VRF_CMD_HELP_STR) +{ + struct vrf *v = pim_cmd_lookup(vty, name); + + if (!v) + return CMD_WARNING; + + clear_mroute(v->info); + + return CMD_SUCCESS; +} + void pim_cmd_init(void) { if_cmd_init(pim_interface_config_write); @@ -2062,4 +2080,5 @@ void pim_cmd_init(void) install_element(VIEW_NODE, &show_ipv6_mroute_summary_vrf_all_cmd); install_element(ENABLE_NODE, &clear_ipv6_pim_statistics_cmd); + install_element(ENABLE_NODE, &clear_ipv6_mroute_cmd); } diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index 0200597857..5c6c1e3d00 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -1840,21 +1840,20 @@ DEFPY (clear_ip_pim_statistics, return CMD_SUCCESS; } -DEFUN (clear_ip_mroute, +DEFPY (clear_ip_mroute, clear_ip_mroute_cmd, - "clear ip mroute [vrf NAME]", + "clear ip mroute [vrf NAME]$name", CLEAR_STR IP_STR "Reset multicast routes\n" VRF_CMD_HELP_STR) { - int idx = 2; - struct vrf *vrf = pim_cmd_lookup_vrf(vty, argv, argc, &idx); + struct vrf *v = pim_cmd_lookup(vty, name); - if (!vrf) + if (!v) return CMD_WARNING; - clear_mroute(vrf->info); + clear_mroute(v->info); return CMD_SUCCESS; } From 09a754ead1fed57665ff802d6a8e3ccdcdd337cb Mon Sep 17 00:00:00 2001 From: Sai Gomathi N Date: Wed, 13 Apr 2022 07:41:46 -0700 Subject: [PATCH 5/7] pim6d: Add 'clear ipv6 pim [vrf NAME] oil' command Adding clear ipv6 pim [vrf NAME] oil CLI for resetting PIMv6 output interface list. Signed-off-by: Sai Gomathi N --- pimd/pim6_cmd.c | 21 +++++++++++++++++++++ pimd/pim_cmd.c | 11 +++++------ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/pimd/pim6_cmd.c b/pimd/pim6_cmd.c index e88a832cc3..0a913f812d 100644 --- a/pimd/pim6_cmd.c +++ b/pimd/pim6_cmd.c @@ -42,6 +42,7 @@ #include "pim_nht.h" #include "pim_bsm.h" #include "pim_iface.h" +#include "pim_zebra.h" #ifndef VTYSH_EXTRACT_PL #include "pimd/pim6_cmd_clippy.c" @@ -1972,6 +1973,25 @@ DEFPY (clear_ipv6_mroute, return CMD_SUCCESS; } +DEFPY (clear_ipv6_pim_oil, + clear_ipv6_pim_oil_cmd, + "clear ipv6 pim [vrf NAME]$name oil", + CLEAR_STR + IPV6_STR + CLEAR_IP_PIM_STR + VRF_CMD_HELP_STR + "Rescan PIMv6 OIL (output interface list)\n") +{ + struct vrf *v = pim_cmd_lookup(vty, name); + + if (!v) + return CMD_WARNING; + + pim_scan_oil(v->info); + + return CMD_SUCCESS; +} + void pim_cmd_init(void) { if_cmd_init(pim_interface_config_write); @@ -2081,4 +2101,5 @@ void pim_cmd_init(void) install_element(ENABLE_NODE, &clear_ipv6_pim_statistics_cmd); install_element(ENABLE_NODE, &clear_ipv6_mroute_cmd); + install_element(ENABLE_NODE, &clear_ipv6_pim_oil_cmd); } diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index 5c6c1e3d00..60d2ec3e2f 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -1924,22 +1924,21 @@ DEFUN (clear_ip_pim_interface_traffic, return CMD_SUCCESS; } -DEFUN (clear_ip_pim_oil, +DEFPY (clear_ip_pim_oil, clear_ip_pim_oil_cmd, - "clear ip pim [vrf NAME] oil", + "clear ip pim [vrf NAME]$name oil", CLEAR_STR IP_STR CLEAR_IP_PIM_STR VRF_CMD_HELP_STR "Rescan PIM OIL (output interface list)\n") { - int idx = 2; - struct vrf *vrf = pim_cmd_lookup_vrf(vty, argv, argc, &idx); + struct vrf *v = pim_cmd_lookup(vty, name); - if (!vrf) + if (!v) return CMD_WARNING; - pim_scan_oil(vrf->info); + pim_scan_oil(v->info); return CMD_SUCCESS; } From 4e65109c7f318bb8cfc4deca2c47fe824951cbdb Mon Sep 17 00:00:00 2001 From: Sai Gomathi N Date: Wed, 13 Apr 2022 08:31:45 -0700 Subject: [PATCH 6/7] pim6d: Add 'clear ipv6 mroute [vrf NAME] count' CLI Adding clear ipv6 mroute count command for resetting multicast routes and count. Signed-off-by: Sai Gomathi N --- pimd/pim6_cmd.c | 13 +++++++++++++ pimd/pim_cmd.c | 37 +++---------------------------------- pimd/pim_cmd_common.c | 36 ++++++++++++++++++++++++++++++++++++ pimd/pim_cmd_common.h | 1 + 4 files changed, 53 insertions(+), 34 deletions(-) diff --git a/pimd/pim6_cmd.c b/pimd/pim6_cmd.c index 0a913f812d..5aa53d52f9 100644 --- a/pimd/pim6_cmd.c +++ b/pimd/pim6_cmd.c @@ -1992,6 +1992,18 @@ DEFPY (clear_ipv6_pim_oil, return CMD_SUCCESS; } +DEFPY (clear_ipv6_mroute_count, + clear_ipv6_mroute_count_cmd, + "clear ipv6 mroute [vrf NAME]$name count", + CLEAR_STR + IPV6_STR + MROUTE_STR + VRF_CMD_HELP_STR + "Route and packet count data\n") +{ + return clear_ip_mroute_count_command(vty, name); +} + void pim_cmd_init(void) { if_cmd_init(pim_interface_config_write); @@ -2102,4 +2114,5 @@ void pim_cmd_init(void) install_element(ENABLE_NODE, &clear_ipv6_pim_statistics_cmd); install_element(ENABLE_NODE, &clear_ipv6_mroute_cmd); install_element(ENABLE_NODE, &clear_ipv6_pim_oil_cmd); + install_element(ENABLE_NODE, &clear_ipv6_mroute_count_cmd); } diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index 60d2ec3e2f..34d646ec67 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -3786,47 +3786,16 @@ DEFPY (show_ip_mroute_vrf_all, return CMD_SUCCESS; } -DEFUN (clear_ip_mroute_count, +DEFPY (clear_ip_mroute_count, clear_ip_mroute_count_cmd, - "clear ip mroute [vrf NAME] count", + "clear ip mroute [vrf NAME]$name count", CLEAR_STR IP_STR MROUTE_STR VRF_CMD_HELP_STR "Route and packet count data\n") { - int idx = 2; - struct listnode *node; - struct channel_oil *c_oil; - struct static_route *sr; - struct vrf *vrf = pim_cmd_lookup_vrf(vty, argv, argc, &idx); - struct pim_instance *pim; - - if (!vrf) - return CMD_WARNING; - - pim = vrf->info; - frr_each(rb_pim_oil, &pim->channel_oil_head, c_oil) { - if (!c_oil->installed) - continue; - - pim_mroute_update_counters(c_oil); - c_oil->cc.origpktcnt = c_oil->cc.pktcnt; - c_oil->cc.origbytecnt = c_oil->cc.bytecnt; - c_oil->cc.origwrong_if = c_oil->cc.wrong_if; - } - - for (ALL_LIST_ELEMENTS_RO(pim->static_routes, node, sr)) { - if (!sr->c_oil.installed) - continue; - - pim_mroute_update_counters(&sr->c_oil); - - sr->c_oil.cc.origpktcnt = sr->c_oil.cc.pktcnt; - sr->c_oil.cc.origbytecnt = sr->c_oil.cc.bytecnt; - sr->c_oil.cc.origwrong_if = sr->c_oil.cc.wrong_if; - } - return CMD_SUCCESS; + return clear_ip_mroute_count_command(vty, name); } DEFPY (show_ip_mroute_count, diff --git a/pimd/pim_cmd_common.c b/pimd/pim_cmd_common.c index 6f81862db4..b6cb3113ec 100644 --- a/pimd/pim_cmd_common.c +++ b/pimd/pim_cmd_common.c @@ -52,6 +52,7 @@ #include "pim_nht.h" #include "pim_sock.h" #include "pim_ssm.h" +#include "pim_static.h" #include "pim_addr.h" #include "pim_static.h" @@ -3564,6 +3565,41 @@ void show_mroute_summary(struct pim_instance *pim, struct vty *vty, } } +int clear_ip_mroute_count_command(struct vty *vty, const char *name) +{ + struct listnode *node; + struct channel_oil *c_oil; + struct static_route *sr; + struct vrf *v = pim_cmd_lookup(vty, name); + struct pim_instance *pim; + + if (!v) + return CMD_WARNING; + + pim = v->info; + frr_each (rb_pim_oil, &pim->channel_oil_head, c_oil) { + if (!c_oil->installed) + continue; + + pim_mroute_update_counters(c_oil); + c_oil->cc.origpktcnt = c_oil->cc.pktcnt; + c_oil->cc.origbytecnt = c_oil->cc.bytecnt; + c_oil->cc.origwrong_if = c_oil->cc.wrong_if; + } + + for (ALL_LIST_ELEMENTS_RO(pim->static_routes, node, sr)) { + if (!sr->c_oil.installed) + continue; + + pim_mroute_update_counters(&sr->c_oil); + + sr->c_oil.cc.origpktcnt = sr->c_oil.cc.pktcnt; + sr->c_oil.cc.origbytecnt = sr->c_oil.cc.bytecnt; + sr->c_oil.cc.origwrong_if = sr->c_oil.cc.wrong_if; + } + return CMD_SUCCESS; +} + struct vrf *pim_cmd_lookup(struct vty *vty, const char *name) { struct vrf *vrf; diff --git a/pimd/pim_cmd_common.h b/pimd/pim_cmd_common.h index b8264e24c4..283998592f 100644 --- a/pimd/pim_cmd_common.h +++ b/pimd/pim_cmd_common.h @@ -121,6 +121,7 @@ void show_mroute_count(struct pim_instance *pim, struct vty *vty, json_object *json); void show_mroute_summary(struct pim_instance *pim, struct vty *vty, json_object *json); +int clear_ip_mroute_count_command(struct vty *vty, const char *name); struct vrf *pim_cmd_lookup(struct vty *vty, const char *name); void clear_mroute(struct pim_instance *pim); void clear_pim_statistics(struct pim_instance *pim); From c9edfa3489715436f4f764946960169deca6ef0c Mon Sep 17 00:00:00 2001 From: Sai Gomathi N Date: Tue, 19 Apr 2022 22:12:43 -0700 Subject: [PATCH 7/7] doc: Updated the document for pimv6 clear commands Signed-off-by: Sai Gomathi N --- doc/user/pimv6.rst | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/doc/user/pimv6.rst b/doc/user/pimv6.rst index c4d32e8751..7567829c7c 100644 --- a/doc/user/pimv6.rst +++ b/doc/user/pimv6.rst @@ -339,3 +339,20 @@ configure CLI mode. If you specify debug commands in the configuration cli mode, the debug commands can be persistent across restarts of the FRR pim6d if the config was written out. +PIMv6 Clear Commands +==================== +Clear commands reset various variables. + +.. clicmd:: clear ipv6 mroute + + Reset multicast routes. + +.. clicmd:: clear ipv6 mroute [vrf NAME] count + + When this command is issued, reset the counts of data shown for + packet count, byte count and wrong interface to 0 and start count + up from this spot. + +.. clicmd:: clear ipv6 pim oil + + Rescan PIMv6 OIL (output interface list).