summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@diac24.net>2018-09-27 12:04:24 +0200
committerGitHub <noreply@github.com>2018-09-27 12:04:24 +0200
commit979ee884911aeeda2b1dd0942e07d68d4b32e955 (patch)
tree725d784dbf1ad18fe9cebc60d4f6c32cca2b0803
parent8b09ab40d4f97d383162e8e91035d70065191c59 (diff)
parent279b060775ae01fc09593cca5faaf371e4dae40e (diff)
Merge pull request #3091 from donaldsharp/routemap_countemup
lib: Allow some usage statistics for route-maps
-rw-r--r--lib/routemap.c12
-rw-r--r--lib/routemap.h6
2 files changed, 15 insertions, 3 deletions
diff --git a/lib/routemap.c b/lib/routemap.c
index bec6d389e5..028351f6c6 100644
--- a/lib/routemap.c
+++ b/lib/routemap.c
@@ -854,11 +854,13 @@ static void vty_show_route_map_entry(struct vty *vty, struct route_map *map)
struct route_map_index *index;
struct route_map_rule *rule;
- vty_out(vty, "%s:\n", frr_protonameinst);
+ vty_out(vty, "route-map: %s Invoked: %" PRIu64 "\n",
+ map->name, map->applied);
for (index = map->head; index; index = index->next) {
- vty_out(vty, "route-map %s, %s, sequence %d\n", map->name,
- route_map_type_str(index->type), index->pref);
+ vty_out(vty, " %s, sequence %d Invoked %" PRIu64 "\n",
+ route_map_type_str(index->type), index->pref,
+ index->applied);
/* Description */
if (index->description)
@@ -904,6 +906,8 @@ static int vty_show_route_map(struct vty *vty, const char *name)
{
struct route_map *map;
+ vty_out(vty, "%s:\n", frr_protonameinst);
+
if (name) {
map = route_map_lookup_by_name(name);
@@ -1457,8 +1461,10 @@ route_map_result_t route_map_apply(struct route_map *map,
if (map == NULL)
return RMAP_DENYMATCH;
+ map->applied++;
for (index = map->head; index; index = index->next) {
/* Apply this index. */
+ index->applied++;
ret = route_map_apply_match(&index->match_list, prefix, type,
object);
diff --git a/lib/routemap.h b/lib/routemap.h
index a193e32536..1914563687 100644
--- a/lib/routemap.h
+++ b/lib/routemap.h
@@ -142,6 +142,9 @@ struct route_map_index {
struct route_map_index *next;
struct route_map_index *prev;
+ /* Keep track how many times we've try to apply */
+ uint64_t applied;
+
QOBJ_FIELDS
};
DECLARE_QOBJ_TYPE(route_map_index)
@@ -163,6 +166,9 @@ struct route_map {
bool to_be_processed; /* True if modification isn't acted on yet */
bool deleted; /* If 1, then this node will be deleted */
+ /* How many times have we applied this route-map */
+ uint64_t applied;
+
QOBJ_FIELDS
};
DECLARE_QOBJ_TYPE(route_map)