]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: Add initial framework to keep track of changed route-maps
authorDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 20 Jun 2018 01:00:39 +0000 (21:00 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 20 Jun 2018 01:22:46 +0000 (21:22 -0400)
Add some basic code for zebra to start to keep track
of route-maps that have changed.  At this point we
are not doing anything.  As we fix code to handle
route-maps better, code will be shifted around.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
zebra/zebra_routemap.c

index 10ba88880a8935363f93d59715a9aecc6181371e..8e368c257eb317ffe4ea4953c1fdd9d7c3d0ff65 100644 (file)
@@ -1282,6 +1282,15 @@ static struct route_map_rule_cmd route_set_src_cmd = {
        "src", route_set_src, route_set_src_compile, route_set_src_free,
 };
 
+static int zebra_route_map_process_update_cb(char *rmap_name)
+{
+       if (IS_ZEBRA_DEBUG_EVENT)
+               zlog_debug("Event handler for route-map: %s",
+                          rmap_name);
+
+       return 0;
+}
+
 static int zebra_route_map_update_timer(struct thread *thread)
 {
        zebra_t_rmap_update = NULL;
@@ -1294,6 +1303,13 @@ static int zebra_route_map_update_timer(struct thread *thread)
                        "%u: Routemap update-timer fired, scheduling RIB processing",
                        VRF_DEFAULT);
 
+       route_map_walk_update_list(zebra_route_map_process_update_cb);
+
+       /*
+        * This code needs to be updated to be:
+        * 1) VRF Aware <sigh>
+        * 2) Route-map aware
+        */
        zebra_import_table_rm_update();
        rib_update(VRF_DEFAULT, RIB_UPDATE_RMAP_CHANGE);
        zebra_evaluate_rnh(0, AF_INET, 1, RNH_NEXTHOP_TYPE, NULL);
@@ -1433,20 +1449,26 @@ static void zebra_route_map_mark_update(const char *rmap_name)
 
 static void zebra_route_map_add(const char *rmap_name)
 {
-       zebra_route_map_mark_update(rmap_name);
+       if (route_map_mark_updated(rmap_name) == 0)
+               zebra_route_map_mark_update(rmap_name);
+
        route_map_notify_dependencies(rmap_name, RMAP_EVENT_MATCH_ADDED);
 }
 
 static void zebra_route_map_delete(const char *rmap_name)
 {
-       zebra_route_map_mark_update(rmap_name);
+       if (route_map_mark_updated(rmap_name) == 0)
+               zebra_route_map_mark_update(rmap_name);
+
        route_map_notify_dependencies(rmap_name, RMAP_EVENT_MATCH_DELETED);
 }
 
 static void zebra_route_map_event(route_map_event_t event,
                                  const char *rmap_name)
 {
-       zebra_route_map_mark_update(rmap_name);
+       if (route_map_mark_updated(rmap_name) == 0)
+               zebra_route_map_mark_update(rmap_name);
+
        route_map_notify_dependencies(rmap_name, RMAP_EVENT_MATCH_ADDED);
 }