]> git.puffer.fish Git - matthieu/frr.git/commitdiff
ospfd: Added changes to track route-map usage
authorrgirada <rgirada@vmware.com>
Mon, 4 Feb 2019 13:22:39 +0000 (05:22 -0800)
committerrgirada <rgirada@vmware.com>
Mon, 4 Feb 2019 13:22:39 +0000 (05:22 -0800)
Made changes and updated the routemap applied counter in the following flows.
1.Increment the routemap applied counter when route map attached to a
  redistribution list. The counter will be updated if the routemap exists.
2.Decrement when route map removed / modified from a redistribution  list.
3.Increment/decrement when route map create/delete callback triggered.

Signed-off-by: RajeshGirada <rgirada@vmware.com>
ospfd/ospf_routemap.c
ospfd/ospf_zebra.c

index 54009639fc37ea03af10f486c15fbdb3b580182b..a15e605aca1f49b93dae44b4759be818feaf7f7a 100644 (file)
@@ -70,11 +70,19 @@ static void ospf_route_map_update(const char *name)
                                        /* Keep old route-map. */
                                        struct route_map *old = ROUTEMAP(red);
 
-                                       /* Update route-map. */
-                                       ROUTEMAP(red) =
-                                               route_map_lookup_by_name(
-                                                       ROUTEMAP_NAME(red));
-
+                                       if (!old) {
+                                               /* Route-map creation */
+                                               /* Update route-map. */
+                                               ROUTEMAP(red) =
+                                                       route_map_lookup_by_name(
+                                                               ROUTEMAP_NAME(red));
+
+                                                       route_map_counter_increment(
+                                                               ROUTEMAP(red));
+                                       } else {
+                                               /* Route-map deletion */
+                                               ROUTEMAP(red) = NULL;
+                                       }
                                        /* No update for this distribute type.
                                         */
                                        if (old == NULL
index a86800f901c3baf0e6750f14bfcc94ffde1799a4..ea2c492e183e6c64ab90db27fa2d778052388c4d 100644 (file)
@@ -983,17 +983,22 @@ int ospf_redistribute_check(struct ospf *ospf, struct external_info *ei,
 /* OSPF route-map set for redistribution */
 void ospf_routemap_set(struct ospf_redist *red, const char *name)
 {
-       if (ROUTEMAP_NAME(red))
+       if (ROUTEMAP_NAME(red)) {
+               route_map_counter_decrement(ROUTEMAP(red));
                free(ROUTEMAP_NAME(red));
+       }
 
        ROUTEMAP_NAME(red) = strdup(name);
        ROUTEMAP(red) = route_map_lookup_by_name(name);
+       route_map_counter_increment(ROUTEMAP(red));
 }
 
 void ospf_routemap_unset(struct ospf_redist *red)
 {
-       if (ROUTEMAP_NAME(red))
+       if (ROUTEMAP_NAME(red)) {
+               route_map_counter_decrement(ROUTEMAP(red));
                free(ROUTEMAP_NAME(red));
+       }
 
        ROUTEMAP_NAME(red) = NULL;
        ROUTEMAP(red) = NULL;