KRT: Fix removal of KRF_INSTALLED
Use route id from net->routes to check export_map. Route received from sysdep KRT code does not have proper id.
This commit is contained in:
parent
3dabf7b8d0
commit
90a9c97e38
1 changed files with 5 additions and 6 deletions
|
@ -540,9 +540,9 @@ krt_dump_attrs(rte *e)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
krt_is_installed(struct krt_proto *p, rte *e)
|
krt_is_installed(struct krt_proto *p, net *n)
|
||||||
{
|
{
|
||||||
return bmap_test(&p->p.main_channel->export_map, e->id);
|
return n->routes && bmap_test(&p->p.main_channel->export_map, n->routes->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -553,11 +553,10 @@ krt_flush_routes(struct krt_proto *p)
|
||||||
KRT_TRACE(p, D_EVENTS, "Flushing kernel routes");
|
KRT_TRACE(p, D_EVENTS, "Flushing kernel routes");
|
||||||
FIB_WALK(&t->fib, net, n)
|
FIB_WALK(&t->fib, net, n)
|
||||||
{
|
{
|
||||||
rte *e = n->routes;
|
if (krt_is_installed(p, n))
|
||||||
if (rte_is_valid(e) && krt_is_installed(p, e))
|
|
||||||
{
|
{
|
||||||
/* FIXME: this does not work if gw is changed in export filter */
|
/* FIXME: this does not work if gw is changed in export filter */
|
||||||
krt_replace_rte(p, e->net, NULL, e);
|
krt_replace_rte(p, n, NULL, n->routes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FIB_WALK_END;
|
FIB_WALK_END;
|
||||||
|
@ -668,7 +667,7 @@ krt_got_route(struct krt_proto *p, rte *e)
|
||||||
goto sentenced;
|
goto sentenced;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (krt_is_installed(p, e))
|
if (krt_is_installed(p, net))
|
||||||
{
|
{
|
||||||
rte *new, *rt_free;
|
rte *new, *rt_free;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue