summaryrefslogtreecommitdiff
path: root/nest/rt-table.c
diff options
context:
space:
mode:
authorOndrej Zajicek (work) <santiago@crfreenet.org>2018-03-18 13:48:47 +0100
committerOndrej Zajicek (work) <santiago@crfreenet.org>2018-03-18 13:48:47 +0100
commitbcb4af81fc8ea0acf7c2fa5a6854cd3c23d92d9f (patch)
treed81feb14e245bc1e4cc6836b1ae2aec1a2a99cf7 /nest/rt-table.c
parent364d5823eac85178361bad188d89949b7e0d321c (diff)
Nest: Fix table reconfiguration when nettype changes
Thanks to Toke Hoiland-Jorgensen for the bugreport.
Diffstat (limited to 'nest/rt-table.c')
-rw-r--r--nest/rt-table.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/nest/rt-table.c b/nest/rt-table.c
index 686d0e84..b885c6e3 100644
--- a/nest/rt-table.c
+++ b/nest/rt-table.c
@@ -2076,6 +2076,13 @@ rt_unlock_table(rtable *r)
}
}
+static struct rtable_config *
+rt_find_table_config(struct config *cf, char *name)
+{
+ struct symbol *sym = cf_find_symbol(cf, name);
+ return (sym && (sym->class == SYM_TABLE)) ? sym->def : NULL;
+}
+
/**
* rt_commit - commit new routing table configuration
* @new: new configuration
@@ -2101,11 +2108,10 @@ rt_commit(struct config *new, struct config *old)
rtable *ot = o->table;
if (!ot->deleted)
{
- struct symbol *sym = cf_find_symbol(new, o->name);
- if (sym && sym->class == SYM_TABLE && !new->shutdown)
+ r = rt_find_table_config(new, o->name);
+ if (r && (r->addr_type == o->addr_type) && !new->shutdown)
{
DBG("\t%s: same\n", o->name);
- r = sym->def;
r->table = ot;
ot->name = r->name;
ot->config = r;