mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-12-31 14:11:54 +00:00
BGP refeed and reload with Adj-RIB-In/Out is done without route refresh
This commit is contained in:
parent
c1cb2dc31c
commit
fdacb89a53
@ -661,6 +661,7 @@ channel_schedule_reload(struct channel *c)
|
||||
{
|
||||
ASSERT(c->in_req.hook);
|
||||
|
||||
rt_refresh_begin(&c->in_req);
|
||||
rt_request_export(c->table, &c->reload_req);
|
||||
}
|
||||
|
||||
@ -677,8 +678,13 @@ channel_reload_stopped(struct rt_export_request *req)
|
||||
static void
|
||||
channel_reload_log_state_change(struct rt_export_request *req, u8 state)
|
||||
{
|
||||
struct channel *c = SKIP_BACK(struct channel, reload_req, req);
|
||||
|
||||
if (state == TES_READY)
|
||||
{
|
||||
rt_refresh_end(&c->in_req);
|
||||
rt_stop_export(req, channel_reload_stopped);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1464,6 +1464,12 @@ bgp_feed_begin(struct channel *C, int initial)
|
||||
if (initial && p->cf->gr_mode)
|
||||
c->feed_state = BFS_LOADING;
|
||||
|
||||
if (!initial && C->out_table)
|
||||
{
|
||||
c->feed_out_table = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
/* It is refeed and both sides support enhanced route refresh */
|
||||
if (!initial && p->enhanced_refresh)
|
||||
{
|
||||
@ -1482,6 +1488,12 @@ bgp_feed_end(struct channel *C)
|
||||
struct bgp_proto *p = (void *) C->proto;
|
||||
struct bgp_channel *c = (void *) C;
|
||||
|
||||
if (c->feed_out_table)
|
||||
{
|
||||
c->feed_out_table = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
/* This should not happen */
|
||||
if (!p->conn)
|
||||
return;
|
||||
|
@ -383,6 +383,8 @@ struct bgp_channel {
|
||||
|
||||
u8 feed_state; /* Feed state (TX) for EoR, RR packets, see BFS_* */
|
||||
u8 load_state; /* Load state (RX) for EoR, RR packets, see BFS_* */
|
||||
|
||||
u8 feed_out_table; /* Refeed into out_table */
|
||||
};
|
||||
|
||||
struct bgp_prefix {
|
||||
|
Loading…
Reference in New Issue
Block a user