mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-12-22 17:51:53 +00:00
CLI: Show symbols, route and mpls explicitly passes the actual config to the show function
This commit is contained in:
parent
c4fbc5592d
commit
73ad0e2dcb
@ -51,7 +51,7 @@ cmd_show_symbols(struct sym_show_data *sd)
|
|||||||
cli_msg(1010, "%-8s\t%s", sd->sym->name, cf_symbol_class_name(sd->sym));
|
cli_msg(1010, "%-8s\t%s", sd->sym->name, cf_symbol_class_name(sd->sym));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (const struct sym_scope *scope = config->root_scope; scope; scope = scope->next)
|
for (const struct sym_scope *scope = sd->config->root_scope; scope; scope = scope->next)
|
||||||
HASH_WALK(scope->hash, next, sym)
|
HASH_WALK(scope->hash, next, sym)
|
||||||
{
|
{
|
||||||
if (sd->type && (sym->class != sd->type))
|
if (sd->type && (sym->class != sd->type))
|
||||||
|
@ -7,8 +7,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
struct sym_show_data {
|
struct sym_show_data {
|
||||||
int type; /* Symbols type to show */
|
int type; /* Symbols type to show */
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
|
struct config *config; /* The actual configuration to dump */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct f_inst;
|
struct f_inst;
|
||||||
|
@ -734,8 +734,9 @@ 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;
|
||||||
$$->running_on_config = config;
|
$$->running_on_config = this_cli->main_config;
|
||||||
$$->cli = this_cli;
|
$$->cli = this_cli;
|
||||||
|
$$->tf_route = this_cli->main_config->tf_route;
|
||||||
}
|
}
|
||||||
| r_args net_any {
|
| r_args net_any {
|
||||||
$$ = $1;
|
$$ = $1;
|
||||||
@ -766,7 +767,7 @@ r_args:
|
|||||||
| r_args TABLE ALL {
|
| r_args TABLE ALL {
|
||||||
struct rtable_config *t;
|
struct rtable_config *t;
|
||||||
$$ = $1;
|
$$ = $1;
|
||||||
WALK_LIST(t, config->tables)
|
WALK_LIST(t, this_cli->main_config->tables)
|
||||||
rt_show_add_table($$, t->table);
|
rt_show_add_table($$, t->table);
|
||||||
$$->tables_defined_by = RSD_TDB_ALL;
|
$$->tables_defined_by = RSD_TDB_ALL;
|
||||||
}
|
}
|
||||||
@ -934,6 +935,7 @@ CF_CLI_OPT(SHOW SYMBOLS TEMPLATE)
|
|||||||
sym_args:
|
sym_args:
|
||||||
/* empty */ {
|
/* empty */ {
|
||||||
$$ = cfg_allocz(sizeof(struct sym_show_data));
|
$$ = cfg_allocz(sizeof(struct sym_show_data));
|
||||||
|
$$->config = this_cli->main_config;
|
||||||
}
|
}
|
||||||
| sym_args TABLE { $$ = $1; $$->type = SYM_TABLE; }
|
| sym_args TABLE { $$ = $1; $$->type = SYM_TABLE; }
|
||||||
| sym_args FILTER { $$ = $1; $$->type = SYM_FILTER; }
|
| sym_args FILTER { $$ = $1; $$->type = SYM_FILTER; }
|
||||||
|
@ -147,7 +147,7 @@ mpls_channel_end: { mpls_channel_postconfig(this_channel); } channel_end;
|
|||||||
show_mpls_ranges_args:
|
show_mpls_ranges_args:
|
||||||
/* empty */
|
/* empty */
|
||||||
{
|
{
|
||||||
if (EMPTY_LIST(config->mpls_domains))
|
if (EMPTY_LIST(this_cli->main_config->mpls_domains))
|
||||||
cf_error("No MPLS domain defined");
|
cf_error("No MPLS domain defined");
|
||||||
|
|
||||||
$$ = cfg_allocz(sizeof(struct mpls_show_ranges_cmd));
|
$$ = cfg_allocz(sizeof(struct mpls_show_ranges_cmd));
|
||||||
@ -180,7 +180,7 @@ show_mpls_ranges_args:
|
|||||||
if ($$->range)
|
if ($$->range)
|
||||||
cf_error("Only one MPLS label range expected");
|
cf_error("Only one MPLS label range expected");
|
||||||
|
|
||||||
$$->domain = $$->domain ?: cf_default_mpls_domain(config);
|
$$->domain = $$->domain ?: cf_default_mpls_domain(this_cli->main_config);
|
||||||
$$->range = $$->domain->static_range;
|
$$->range = $$->domain->static_range;
|
||||||
}
|
}
|
||||||
| show_mpls_ranges_args DYNAMIC
|
| show_mpls_ranges_args DYNAMIC
|
||||||
@ -188,7 +188,7 @@ show_mpls_ranges_args:
|
|||||||
if ($$->range)
|
if ($$->range)
|
||||||
cf_error("Only one MPLS label range expected");
|
cf_error("Only one MPLS label range expected");
|
||||||
|
|
||||||
$$->domain = $$->domain ?: cf_default_mpls_domain(config);
|
$$->domain = $$->domain ?: cf_default_mpls_domain(this_cli->main_config);
|
||||||
$$->range = $$->domain->dynamic_range;
|
$$->range = $$->domain->dynamic_range;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
@ -789,6 +789,7 @@ struct rt_show_data {
|
|||||||
struct rt_show_data_rtable *tab; /* Iterator over table list */
|
struct rt_show_data_rtable *tab; /* Iterator over table list */
|
||||||
struct rt_show_data_rtable *last_table; /* Last table in output */
|
struct rt_show_data_rtable *last_table; /* Last table in output */
|
||||||
int verbose, tables_defined_by;
|
int verbose, tables_defined_by;
|
||||||
|
struct timeformat tf_route;
|
||||||
const struct filter *filter;
|
const struct filter *filter;
|
||||||
struct proto *show_protocol;
|
struct proto *show_protocol;
|
||||||
struct proto *export_protocol;
|
struct proto *export_protocol;
|
||||||
|
@ -50,7 +50,7 @@ rt_show_rte(struct cli *c, byte *ia, rte *e, struct rt_show_data *d, int primary
|
|||||||
int dest = nhad ? (NEXTHOP_IS_REACHABLE(nhad) ? RTD_UNICAST : nhad->dest) : RTD_NONE;
|
int dest = nhad ? (NEXTHOP_IS_REACHABLE(nhad) ? RTD_UNICAST : nhad->dest) : RTD_NONE;
|
||||||
int flowspec_valid = net_is_flow(e->net) ? rt_get_flowspec_valid(e) : FLOWSPEC_UNKNOWN;
|
int flowspec_valid = net_is_flow(e->net) ? rt_get_flowspec_valid(e) : FLOWSPEC_UNKNOWN;
|
||||||
|
|
||||||
tm_format_time(tm, &config->tf_route, e->lastmod);
|
tm_format_time(tm, &d->tf_route, e->lastmod);
|
||||||
ip_addr a_from = ea_get_ip(a, &ea_gen_from, IPA_NONE);
|
ip_addr a_from = ea_get_ip(a, &ea_gen_from, IPA_NONE);
|
||||||
if (ipa_nonzero(a_from) && (!nhad || !ipa_equal(a_from, nhad->nh.gw)))
|
if (ipa_nonzero(a_from) && (!nhad || !ipa_equal(a_from, nhad->nh.gw)))
|
||||||
bsprintf(from, " from %I", a_from);
|
bsprintf(from, " from %I", a_from);
|
||||||
@ -260,7 +260,7 @@ rt_show_cont(struct cli *c)
|
|||||||
{
|
{
|
||||||
struct rt_show_data *d = c->rover;
|
struct rt_show_data *d = c->rover;
|
||||||
|
|
||||||
if (d->running_on_config && (d->running_on_config != config))
|
if (OBSREF_GET(d->running_on_config) != OBSREF_GET(config))
|
||||||
{
|
{
|
||||||
cli_printf(c, 8004, "Stopped due to reconfiguration");
|
cli_printf(c, 8004, "Stopped due to reconfiguration");
|
||||||
return rt_show_done(d);
|
return rt_show_done(d);
|
||||||
@ -376,9 +376,10 @@ rt_show_get_default_tables(struct rt_show_data *d)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct symbol **def_tables = d->cli->main_config->def_tables;
|
||||||
for (int i=1; i<NET_MAX; i++)
|
for (int i=1; i<NET_MAX; i++)
|
||||||
if (config->def_tables[i] && config->def_tables[i]->table && config->def_tables[i]->table->table)
|
if (def_tables[i] && def_tables[i]->table && def_tables[i]->table->table)
|
||||||
rt_show_add_table(d, config->def_tables[i]->table->table);
|
rt_show_add_table(d, def_tables[i]->table->table);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
@ -431,7 +432,7 @@ rt_show_prepare_tables(struct rt_show_data *d)
|
|||||||
.addr = d->addr,
|
.addr = d->addr,
|
||||||
.mode = d->addr_mode,
|
.mode = d->addr_mode,
|
||||||
},
|
},
|
||||||
.trace_routes = config->show_route_debug,
|
.trace_routes = d->cli->main_config->show_route_debug,
|
||||||
};
|
};
|
||||||
|
|
||||||
rt_feeder_subscribe(ex, &tab->req);
|
rt_feeder_subscribe(ex, &tab->req);
|
||||||
|
Loading…
Reference in New Issue
Block a user