From: Donald Sharp Date: Wed, 20 Jun 2018 01:00:39 +0000 (-0400) Subject: zebra: Add initial framework to keep track of changed route-maps X-Git-Tag: frr-6.1-dev~285^2~2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=75a2b29dd6b25725274bb8d8bd145e198a37d5f5;p=matthieu%2Ffrr.git zebra: Add initial framework to keep track of changed route-maps 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 --- diff --git a/zebra/zebra_routemap.c b/zebra/zebra_routemap.c index 10ba88880a..8e368c257e 100644 --- a/zebra/zebra_routemap.c +++ b/zebra/zebra_routemap.c @@ -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 + * 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); }