From: Donald Sharp Date: Tue, 25 Sep 2018 19:02:51 +0000 (-0400) Subject: lib: Allow some usage statistics for route-maps X-Git-Tag: frr-7.1-dev~319^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=refs%2Fpull%2F3091%2Fhead;p=mirror%2Ffrr.git lib: Allow some usage statistics for route-maps Keep track of how often route-maps are applied and how often each clause of a route-map is applied. This change showed that `show route-map` was outputting odd data so fix that output and add in the applied times too. Signed-off-by: Donald Sharp --- 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)