0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-12-22 09:41:54 +00:00

CLI: Show symbols, route and mpls explicitly passes the actual config to the show function

This commit is contained in:
Maria Matejka 2024-06-13 16:58:41 +02:00
parent c4fbc5592d
commit 73ad0e2dcb
6 changed files with 18 additions and 13 deletions

View File

@ -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))

View File

@ -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;

View File

@ -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; }

View File

@ -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;
} }
; ;

View File

@ -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;

View File

@ -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);