summaryrefslogtreecommitdiff
path: root/nest
diff options
context:
space:
mode:
authorOndrej Zajicek (work) <santiago@crfreenet.org>2020-01-07 18:35:03 +0100
committerOndrej Zajicek (work) <santiago@crfreenet.org>2020-01-07 18:35:03 +0100
commit7d767c5a3d001a6a1a5c3e800553202fd492190c (patch)
tree6a0758ae4bdd2b4cbecefec9ed329b43d038a270 /nest
parentef8c45749c82e246d477ea4d7f749668a9c7e9ee (diff)
KRT: Improve syncer code to avoid using temporary data in rtable
The old code stored route verdicts and temporary routes directly in rtable. The new code do not store received routes (it immediately compares them with exported routes and resolves conflicts) and uses internal bitmap to keep track of which routes were received and which needs to be reinstalled. By not putting 'invalid' temporary routes to rtable, we keep rtable in consistent state, therefore scan no longer needs to be atomic operation and could be splitted to multiple events.
Diffstat (limited to 'nest')
-rw-r--r--nest/route.h1
-rw-r--r--nest/rt-fib.c1
-rw-r--r--nest/rt-table.c2
3 files changed, 1 insertions, 3 deletions
diff --git a/nest/route.h b/nest/route.h
index eaaa5c3f..d2a07f09 100644
--- a/nest/route.h
+++ b/nest/route.h
@@ -37,7 +37,6 @@ struct cli;
struct fib_node {
struct fib_node *next; /* Next in hash chain */
struct fib_iterator *readers; /* List of readers of this node */
- byte flags; /* User-defined, will be removed */
net_addr addr[0];
};
diff --git a/nest/rt-fib.c b/nest/rt-fib.c
index a8800b65..76a86e6e 100644
--- a/nest/rt-fib.c
+++ b/nest/rt-fib.c
@@ -327,7 +327,6 @@ fib_get(struct fib *f, const net_addr *a)
struct fib_node *e = fib_user_to_node(f, b);
e->readers = NULL;
- e->flags = 0;
fib_insert(f, a, e);
memset(b, 0, f->node_offset);
diff --git a/nest/rt-table.c b/nest/rt-table.c
index 4adc278e..f95afccd 100644
--- a/nest/rt-table.c
+++ b/nest/rt-table.c
@@ -1687,7 +1687,7 @@ rte_dump(rte *e)
{
net *n = e->net;
debug("%-1N ", n->n.addr);
- debug("KF=%02x PF=%02x pref=%d ", n->n.flags, e->pflags, e->pref);
+ debug("PF=%02x pref=%d ", e->pflags, e->pref);
rta_dump(e->attrs);
if (e->attrs->src->proto->proto->dump_attrs)
e->attrs->src->proto->proto->dump_attrs(e);