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

rt-show.c: fixed OBSREF_SET after cf_error(), changed message when 'show route export' called on static protocol

This commit is contained in:
Katerina Kubecova 2024-11-19 10:33:49 +01:00
parent dda37842dc
commit 8ac4877b5d
3 changed files with 23 additions and 6 deletions

View File

@ -267,6 +267,8 @@ cli_event(void *data)
if (c->tx_pos)
cli_write_trigger(c);
else
ev_schedule(c->event);
}
cli *

View File

@ -734,7 +734,6 @@ r_args:
$$ = cfg_allocz(sizeof(struct rt_show_data));
init_list(&($$->tables));
$$->filter = FILTER_ACCEPT;
OBSREF_SET($$->running_on_config, this_cli->main_config);
$$->cli = this_cli;
$$->tf_route = this_cli->main_config->tf_route;
}

View File

@ -361,14 +361,25 @@ rt_show_get_default_tables(struct rt_show_data *d)
if (d->export_protocol)
{
int only_static = 1; // if all seen tabs were from static protocol(s), used to error message if no export tabs found
int tab_found = 0;
WALK_LIST(c, d->export_protocol->channels)
{
tab_found = 1;
if (rt_export_get_state(&c->out_req) == TES_DOWN)
{
if (c->proto->proto != &proto_static)
only_static = 0;
continue;
}
only_static = 0;
tab = rt_show_add_table(d, c->table);
tab->export_channel = c;
}
if (only_static && tab_found){
cf_error("'show route export' command makes no sence with static protocols.");
return;
}
return;
}
@ -460,6 +471,11 @@ rt_show(struct rt_show_data *d)
d->tab = HEAD(d->tables);
/* OBSREF_SET should not be called sooner than the last cf_error() may occur.
If cf_error() called after OBSREF_SET, the crreated obstacle may not be removed at all.
(cf_error() contains long jump.) */
OBSREF_SET(d->running_on_config, this_cli->main_config);
this_cli->cleanup = rt_show_cleanup;
this_cli->rover = d;
this_cli->cont = rt_show_cont;