summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ospfd/ospf_routemap.c18
-rw-r--r--ospfd/ospf_zebra.c9
2 files changed, 20 insertions, 7 deletions
diff --git a/ospfd/ospf_routemap.c b/ospfd/ospf_routemap.c
index 54009639fc..a15e605aca 100644
--- a/ospfd/ospf_routemap.c
+++ b/ospfd/ospf_routemap.c
@@ -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
diff --git a/ospfd/ospf_zebra.c b/ospfd/ospf_zebra.c
index a86800f901..ea2c492e18 100644
--- a/ospfd/ospf_zebra.c
+++ b/ospfd/ospf_zebra.c
@@ -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;