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:
parent
dda37842dc
commit
8ac4877b5d
@ -267,6 +267,8 @@ cli_event(void *data)
|
|||||||
|
|
||||||
if (c->tx_pos)
|
if (c->tx_pos)
|
||||||
cli_write_trigger(c);
|
cli_write_trigger(c);
|
||||||
|
else
|
||||||
|
ev_schedule(c->event);
|
||||||
}
|
}
|
||||||
|
|
||||||
cli *
|
cli *
|
||||||
|
@ -734,7 +734,6 @@ r_args:
|
|||||||
$$ = cfg_allocz(sizeof(struct rt_show_data));
|
$$ = cfg_allocz(sizeof(struct rt_show_data));
|
||||||
init_list(&($$->tables));
|
init_list(&($$->tables));
|
||||||
$$->filter = FILTER_ACCEPT;
|
$$->filter = FILTER_ACCEPT;
|
||||||
OBSREF_SET($$->running_on_config, this_cli->main_config);
|
|
||||||
$$->cli = this_cli;
|
$$->cli = this_cli;
|
||||||
$$->tf_route = this_cli->main_config->tf_route;
|
$$->tf_route = this_cli->main_config->tf_route;
|
||||||
}
|
}
|
||||||
|
@ -361,14 +361,25 @@ rt_show_get_default_tables(struct rt_show_data *d)
|
|||||||
|
|
||||||
if (d->export_protocol)
|
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)
|
WALK_LIST(c, d->export_protocol->channels)
|
||||||
{
|
{
|
||||||
|
tab_found = 1;
|
||||||
if (rt_export_get_state(&c->out_req) == TES_DOWN)
|
if (rt_export_get_state(&c->out_req) == TES_DOWN)
|
||||||
continue;
|
{
|
||||||
|
if (c->proto->proto != &proto_static)
|
||||||
|
only_static = 0;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
only_static = 0;
|
||||||
tab = rt_show_add_table(d, c->table);
|
tab = rt_show_add_table(d, c->table);
|
||||||
tab->export_channel = c;
|
tab->export_channel = c;
|
||||||
}
|
}
|
||||||
|
if (only_static && tab_found){
|
||||||
|
cf_error("'show route export' command makes no sence with static protocols.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -410,8 +421,8 @@ rt_show_prepare_tables(struct rt_show_data *d)
|
|||||||
|
|
||||||
if (!tab->export_channel)
|
if (!tab->export_channel)
|
||||||
{
|
{
|
||||||
if (d->tables_defined_by & RSD_TDB_NMN)
|
if (d->tables_defined_by & RSD_TDB_NMN)
|
||||||
cf_error("No export channel for table %s", tab->name);
|
cf_error("No export channel for table %s", tab->name);
|
||||||
|
|
||||||
rem_node(&(tab->n));
|
rem_node(&(tab->n));
|
||||||
continue;
|
continue;
|
||||||
@ -422,7 +433,7 @@ rt_show_prepare_tables(struct rt_show_data *d)
|
|||||||
if (d->addr && (ex->net_type != d->addr->type))
|
if (d->addr && (ex->net_type != d->addr->type))
|
||||||
{
|
{
|
||||||
if (d->tables_defined_by & RSD_TDB_NMN)
|
if (d->tables_defined_by & RSD_TDB_NMN)
|
||||||
cf_error("Incompatible type of prefix/ip for table %s", tab->name);
|
cf_error("Incompatible type of prefix/ip for table %s", tab->name);
|
||||||
|
|
||||||
rem_node(&(tab->n));
|
rem_node(&(tab->n));
|
||||||
continue;
|
continue;
|
||||||
@ -460,6 +471,11 @@ rt_show(struct rt_show_data *d)
|
|||||||
|
|
||||||
d->tab = HEAD(d->tables);
|
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->cleanup = rt_show_cleanup;
|
||||||
this_cli->rover = d;
|
this_cli->rover = d;
|
||||||
this_cli->cont = rt_show_cont;
|
this_cli->cont = rt_show_cont;
|
||||||
|
Loading…
Reference in New Issue
Block a user