0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-12-22 01:31:55 +00:00

Nest: Fix crash in route reload when some channels are not up.

Only channels that are up can be reloaded.
This commit is contained in:
Ondrej Zajicek (work) 2019-08-13 18:57:40 +02:00
parent b7d7599ce3
commit a297a4f044

View File

@ -1952,7 +1952,7 @@ proto_cmd_reload(struct proto *p, uintptr_t dir, int cnt UNUSED)
/* All channels must support reload */ /* All channels must support reload */
if (dir != CMD_RELOAD_OUT) if (dir != CMD_RELOAD_OUT)
WALK_LIST(c, p->channels) WALK_LIST(c, p->channels)
if (!channel_reloadable(c)) if ((c->channel_state == CS_UP) && !channel_reloadable(c))
{ {
cli_msg(-8006, "%s: reload failed", p->name); cli_msg(-8006, "%s: reload failed", p->name);
return; return;
@ -1963,12 +1963,14 @@ proto_cmd_reload(struct proto *p, uintptr_t dir, int cnt UNUSED)
/* re-importing routes */ /* re-importing routes */
if (dir != CMD_RELOAD_OUT) if (dir != CMD_RELOAD_OUT)
WALK_LIST(c, p->channels) WALK_LIST(c, p->channels)
channel_request_reload(c); if (c->channel_state == CS_UP)
channel_request_reload(c);
/* re-exporting routes */ /* re-exporting routes */
if (dir != CMD_RELOAD_IN) if (dir != CMD_RELOAD_IN)
WALK_LIST(c, p->channels) WALK_LIST(c, p->channels)
channel_request_feeding(c); if (c->channel_state == CS_UP)
channel_request_feeding(c);
cli_msg(-15, "%s: reloading", p->name); cli_msg(-15, "%s: reloading", p->name);
} }