summaryrefslogtreecommitdiff
path: root/nest
diff options
context:
space:
mode:
Diffstat (limited to 'nest')
-rw-r--r--nest/config.Y4
-rw-r--r--nest/route.h2
-rw-r--r--nest/rt-table.c3
3 files changed, 8 insertions, 1 deletions
diff --git a/nest/config.Y b/nest/config.Y
index 6bd08481..d9778473 100644
--- a/nest/config.Y
+++ b/nest/config.Y
@@ -114,7 +114,7 @@ proto_postconfig(void)
CF_DECLS
CF_KEYWORDS(ROUTER, ID, HOSTNAME, PROTOCOL, TEMPLATE, PREFERENCE, DISABLED, DEBUG, ALL, OFF, DIRECT)
-CF_KEYWORDS(INTERFACE, IMPORT, EXPORT, FILTER, NONE, VRF, DEFAULT, TABLE, STATES, ROUTES, FILTERS)
+CF_KEYWORDS(INTERFACE, IMPORT, EXPORT, FILTER, NONE, VRF, DEFAULT, TABLE, TABLES, STATES, ROUTES, FILTERS)
CF_KEYWORDS(IPV4, IPV6, VPN4, VPN6, ROA4, ROA6, FLOW4, FLOW6, SADR, MPLS)
CF_KEYWORDS(RECEIVE, LIMIT, ACTION, WARN, BLOCK, RESTART, DISABLE, KEEP, FILTERED, RPKI)
CF_KEYWORDS(PASSWORD, KEY, FROM, PASSIVE, TO, ID, EVENTS, PACKETS, PROTOCOLS, CHANNELS, INTERFACES)
@@ -230,6 +230,7 @@ table_sorted:
table_opt:
SORTED bool { this_table->sorted = $2; }
+ | DEBUG debug_mask { this_table->debug = $2; }
| TRIE bool {
if (!net_val_match(this_table->addr_type, NB_IP | NB_VPN | NB_ROA | NB_IP6_SADR))
cf_error("Trie option not supported for %s table", net_label[this_table->addr_type]);
@@ -380,6 +381,7 @@ conf: debug_default ;
debug_default:
DEBUG PROTOCOLS debug_mask { new_config->proto_default_debug = $3; }
| DEBUG CHANNELS debug_mask { new_config->channel_default_debug = $3; }
+ | DEBUG TABLES debug_mask { new_config->table_default_debug = $3; }
| DEBUG COMMANDS expr { new_config->cli_debug = $3; }
;
diff --git a/nest/route.h b/nest/route.h
index f83a5b33..782bbac9 100644
--- a/nest/route.h
+++ b/nest/route.h
@@ -150,6 +150,7 @@ struct rtable_config {
uint addr_type; /* Type of address data stored in table (NET_*) */
uint gc_threshold; /* Maximum number of operations before GC is run */
uint gc_period; /* Approximate time between two consecutive GC runs */
+ u32 debug; /* Debugging flags (D_*) */
byte sorted; /* Routes of network are sorted according to rte_better() */
byte internal; /* Internal table of a protocol */
byte trie_used; /* Rtable has attached trie */
@@ -166,6 +167,7 @@ typedef struct rtable {
char *name; /* Name of this table */
list channels; /* List of attached channels (struct channel) */
uint addr_type; /* Type of address data stored in table (NET_*) */
+ u32 debug; /* Debugging flags (D_*) */
int pipe_busy; /* Pipe loop detection */
int use_count; /* Number of protocols using this table */
u32 rt_count; /* Number of routes in the table */
diff --git a/nest/rt-table.c b/nest/rt-table.c
index 985b68e1..5b561483 100644
--- a/nest/rt-table.c
+++ b/nest/rt-table.c
@@ -2040,6 +2040,7 @@ rt_setup(pool *pp, struct rtable_config *cf)
t->name = cf->name;
t->config = cf;
t->addr_type = cf->addr_type;
+ t->debug = cf->debug;
fib_init(&t->fib, p, t->addr_type, sizeof(net), OFFSETOF(net, n), 0, NULL);
@@ -2752,6 +2753,7 @@ rt_new_table(struct symbol *s, uint addr_type)
c->gc_period = (uint) -1; /* set in rt_postconfig() */
c->min_settle_time = 1 S;
c->max_settle_time = 20 S;
+ c->debug = new_config->table_default_debug;
add_tail(&new_config->tables, &c->n);
@@ -2809,6 +2811,7 @@ rt_reconfigure(rtable *tab, struct rtable_config *new, struct rtable_config *old
new->table = tab;
tab->name = new->name;
tab->config = new;
+ tab->debug = new->debug;
return 1;
}