mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-13 22:58:42 +00:00
Kernel routes are flushed on shutdown by kernel scan, not by table scan
This commit is contained in:
parent
0767a0c288
commit
6d87cf4be7
@ -542,23 +542,6 @@ krt_is_installed(struct krt_proto *p, net *n)
|
||||
return n->routes && bmap_test(&p->p.main_channel->export_map, n->routes->rte.id);
|
||||
}
|
||||
|
||||
static void
|
||||
krt_flush_routes(struct krt_proto *p)
|
||||
{
|
||||
struct rtable *t = p->p.main_channel->table;
|
||||
|
||||
KRT_TRACE(p, D_EVENTS, "Flushing kernel routes");
|
||||
FIB_WALK(&t->fib, net, n)
|
||||
{
|
||||
if (krt_is_installed(p, n))
|
||||
{
|
||||
/* FIXME: this does not work if gw is changed in export filter */
|
||||
krt_replace_rte(p, n->n.addr, NULL, &n->routes->rte);
|
||||
}
|
||||
}
|
||||
FIB_WALK_END;
|
||||
}
|
||||
|
||||
static struct rte *
|
||||
krt_export_net(struct krt_proto *p, net *net)
|
||||
{
|
||||
@ -637,6 +620,9 @@ krt_got_route(struct krt_proto *p, rte *e, s8 src)
|
||||
#endif
|
||||
/* The rest is for KRT_SRC_BIRD (or KRT_SRC_UNKNOWN) */
|
||||
|
||||
/* Deleting all routes if flush is requested */
|
||||
if (p->flush_routes)
|
||||
goto delete;
|
||||
|
||||
/* We wait for the initial feed to have correct installed state */
|
||||
if (!p->ready)
|
||||
@ -729,6 +715,17 @@ krt_prune(struct krt_proto *p)
|
||||
p->initialized = 1;
|
||||
}
|
||||
|
||||
static void
|
||||
krt_flush_routes(struct krt_proto *p)
|
||||
{
|
||||
KRT_TRACE(p, D_EVENTS, "Flushing kernel routes");
|
||||
p->flush_routes = 1;
|
||||
krt_init_scan(p);
|
||||
krt_do_scan(p);
|
||||
/* No prune! */
|
||||
p->flush_routes = 0;
|
||||
}
|
||||
|
||||
void
|
||||
krt_got_route_async(struct krt_proto *p, rte *e, int new, s8 src)
|
||||
{
|
||||
|
@ -66,6 +66,7 @@ struct krt_proto {
|
||||
byte ready; /* Initial feed has been finished */
|
||||
byte initialized; /* First scan has been finished */
|
||||
byte reload; /* Next scan is doing reload */
|
||||
byte flush_routes; /* Scanning to flush */
|
||||
};
|
||||
|
||||
extern pool *krt_pool;
|
||||
|
Loading…
Reference in New Issue
Block a user