summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSai Gomathi N <nsaigomathi@vmware.com>2022-04-13 08:31:45 -0700
committerSai Gomathi N <nsaigomathi@vmware.com>2022-05-17 00:05:19 -0700
commit4e65109c7f318bb8cfc4deca2c47fe824951cbdb (patch)
treec0138d03555a8b5b9eb33c79ee3cb7b10e580e62
parent09a754ead1fed57665ff802d6a8e3ccdcdd337cb (diff)
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 <nsaigomathi@vmware.com>
-rw-r--r--pimd/pim6_cmd.c13
-rw-r--r--pimd/pim_cmd.c37
-rw-r--r--pimd/pim_cmd_common.c36
-rw-r--r--pimd/pim_cmd_common.h1
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);