mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-14 15:18:44 +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);
|
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 *
|
static struct rte *
|
||||||
krt_export_net(struct krt_proto *p, net *net)
|
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
|
#endif
|
||||||
/* The rest is for KRT_SRC_BIRD (or KRT_SRC_UNKNOWN) */
|
/* 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 */
|
/* We wait for the initial feed to have correct installed state */
|
||||||
if (!p->ready)
|
if (!p->ready)
|
||||||
@ -729,6 +715,17 @@ krt_prune(struct krt_proto *p)
|
|||||||
p->initialized = 1;
|
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
|
void
|
||||||
krt_got_route_async(struct krt_proto *p, rte *e, int new, s8 src)
|
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 ready; /* Initial feed has been finished */
|
||||||
byte initialized; /* First scan has been finished */
|
byte initialized; /* First scan has been finished */
|
||||||
byte reload; /* Next scan is doing reload */
|
byte reload; /* Next scan is doing reload */
|
||||||
|
byte flush_routes; /* Scanning to flush */
|
||||||
};
|
};
|
||||||
|
|
||||||
extern pool *krt_pool;
|
extern pool *krt_pool;
|
||||||
|
Loading…
Reference in New Issue
Block a user