diff options
| author | vivek <vivek@cumulusnetworks.com> | 2016-03-22 17:46:30 +0000 |
|---|---|---|
| committer | vivek <vivek@cumulusnetworks.com> | 2016-03-22 17:46:30 +0000 |
| commit | 5fe9f9631d3be324202667f26e93cddead762e8c (patch) | |
| tree | bcacc70da17637ef93f2e400ca8b0fc0a788aaa2 /lib/routemap.h | |
| parent | c23af4d3e6ea864774f0bedfccc9ed1acb2cfab2 (diff) | |
Quagga: Make routemap updates or deletes work for VRFs
Updates to routemaps and delete of the routemap were not working properly
for VRFs. This was because while routemaps are global, the routemap update
processing timer and the processing were at the per-instance level. This
approach was unable to handle processing for multiple instances as the
routemap has no tracking of which instances are still pending processing.
This lead to the processing happening correctly only for the first instance
- which could be the default instance or some other instance. It could also
result in reference to freed memory for an instance.
The fix done is to make the update/delete processing also global and not per
instance. This means that the route-map delay timer will be global and a global
thread will handle the change (or delete) for all instances instead of spawning
a separate thread for each instance. To support this, a global BGP command
"bgp route-map delay-timer <value>" has been implemented. The existing command
per-instance is not deleted but will update the global timer.
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
Ticket: CM-6970, CM-9918
Reviewed By: CCR-4320
Testing Done: Manual, bgpsmoke
Diffstat (limited to 'lib/routemap.h')
| -rw-r--r-- | lib/routemap.h | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/lib/routemap.h b/lib/routemap.h index 5c0626bae4..a90966b383 100644 --- a/lib/routemap.h +++ b/lib/routemap.h @@ -217,9 +217,7 @@ extern void route_map_event_hook (void (*func) (route_map_event_t, const char *)); extern int route_map_mark_updated (const char *name, int deleted); extern int route_map_clear_updated (struct route_map *rmap); -extern void route_map_walk_update_list (void *arg, - int (*update_fn) (void *arg, - char *name)); +extern void route_map_walk_update_list (int (*update_fn) (char *name)); extern void route_map_upd8_dependency (route_map_event_t type, const char *arg, const char *rmap_name); extern void route_map_notify_dependencies (const char *affected_name, |
