diff options
Diffstat (limited to 'lib/routemap.c')
| -rw-r--r-- | lib/routemap.c | 46 |
1 files changed, 44 insertions, 2 deletions
diff --git a/lib/routemap.c b/lib/routemap.c index 47cc2e294a..b666852bee 100644 --- a/lib/routemap.c +++ b/lib/routemap.c @@ -960,12 +960,12 @@ static void vty_show_route_map_entry(struct vty *vty, struct route_map *map) struct route_map_rule *rule; vty_out(vty, "route-map: %s Invoked: %" PRIu64 "\n", - map->name, map->applied); + map->name, map->applied - map->applied_clear); for (index = map->head; index; index = index->next) { vty_out(vty, " %s, sequence %d Invoked %" PRIu64 "\n", route_map_type_str(index->type), index->pref, - index->applied); + index->applied - index->applied_clear); /* Description */ if (index->description) @@ -2956,6 +2956,46 @@ DEFUN (no_rmap_continue, return no_rmap_onmatch_goto(self, vty, argc, argv); } +static void clear_route_map_helper(struct route_map *map) +{ + struct route_map_index *index; + + map->applied_clear = map->applied; + for (index = map->head; index; index = index->next) + index->applied_clear = index->applied; +} + +DEFUN (rmap_clear_counters, + rmap_clear_counters_cmd, + "clear route-map counters [WORD]", + CLEAR_STR + "route-map information\n" + "counters associated with the specified route-map\n" + "route-map name\n") +{ + int idx_word = 2; + struct route_map *map; + + const char *name = (argc == 3 ) ? argv[idx_word]->arg : NULL; + + if (name) { + map = route_map_lookup_by_name(name); + + if (map) + clear_route_map_helper(map); + else { + vty_out(vty, "%s: 'route-map %s' not found\n", + frr_protonameinst, name); + return CMD_SUCCESS; + } + } else { + for (map = route_map_master.head; map; map = map->next) + clear_route_map_helper(map); + } + + return CMD_SUCCESS; + +} DEFUN (rmap_show_name, rmap_show_name_cmd, @@ -3291,6 +3331,8 @@ void route_map_init(void) install_element(RMAP_NODE, &no_rmap_description_cmd); /* Install show command */ + install_element(ENABLE_NODE, &rmap_clear_counters_cmd); + install_element(ENABLE_NODE, &rmap_show_name_cmd); install_element(ENABLE_NODE, &rmap_show_unused_cmd); |
