summaryrefslogtreecommitdiff
path: root/proto
diff options
context:
space:
mode:
authorOndrej Zajicek <santiago@crfreenet.org>2023-01-01 20:10:23 +0100
committerOndrej Zajicek <santiago@crfreenet.org>2023-01-01 20:10:23 +0100
commit6d1ae197d189d50e60279796441c6e74272ddc54 (patch)
tree15ee0c85132678db20042b9d07d75a412da93031 /proto
parent8b06a4d8af46511f0f8dbb8905afa88590a831b6 (diff)
Nest: Fix several issues with pflags
There were some confusion about validity and usage of pflags, which caused incorrect usage after some flags from (now removed) protocol- specific area were moved to pflags. We state that pflags: - Are secondary data used by protocol-specific hooks - Can be changed on an existing route (in contrast to copy-on-write for primary data) - Are irrelevant for propagation (not propagated when changed) - Are specific to a routing table (not propagated by pipe) The patch did these fixes: - Do not compare pflags in rte_same(), as they may keep cached values like BGP_REF_STALE, causing spurious propagation. - Initialize pflags to zero in rte_get_temp(), avoid initialization in protocol code, fixing at least two forgotten initializations (krt and one case in babel). - Improve documentation about pflags
Diffstat (limited to 'proto')
-rw-r--r--proto/babel/babel.c1
-rw-r--r--proto/bgp/packets.c1
-rw-r--r--proto/perf/perf.c1
-rw-r--r--proto/pipe/pipe.c7
-rw-r--r--proto/rpki/rpki.c2
-rw-r--r--proto/static/static.c1
6 files changed, 0 insertions, 13 deletions
diff --git a/proto/babel/babel.c b/proto/babel/babel.c
index 23cb6774..86cec63b 100644
--- a/proto/babel/babel.c
+++ b/proto/babel/babel.c
@@ -715,7 +715,6 @@ babel_announce_rte(struct babel_proto *p, struct babel_entry *e)
rta *a = rta_lookup(&a0);
rte *rte = rte_get_temp(a, p->p.main_source);
- rte->pflags = 0;
e->unreachable = 1;
rte_update2(c, e->n.addr, rte, p->p.main_source);
diff --git a/proto/bgp/packets.c b/proto/bgp/packets.c
index 7ce2fd63..ddbc9226 100644
--- a/proto/bgp/packets.c
+++ b/proto/bgp/packets.c
@@ -1464,7 +1464,6 @@ bgp_rte_update(struct bgp_parse_state *s, const net_addr *n, u32 path_id, rta *a
rta *a = rta_clone(s->cached_rta);
rte *e = rte_get_temp(a, s->last_src);
- e->pflags = 0;
rte_update3(&s->channel->c, n, e, s->last_src);
}
diff --git a/proto/perf/perf.c b/proto/perf/perf.c
index 5d228045..75e405f0 100644
--- a/proto/perf/perf.c
+++ b/proto/perf/perf.c
@@ -162,7 +162,6 @@ perf_loop(void *data)
for (uint i=0; i<N; i++) {
rte *e = rte_get_temp(p->data[i].a, p->p.main_source);
- e->pflags = 0;
rte_update(P, &(p->data[i].net), e);
}
diff --git a/proto/pipe/pipe.c b/proto/pipe/pipe.c
index 1f1ad857..a4c5b1d4 100644
--- a/proto/pipe/pipe.c
+++ b/proto/pipe/pipe.c
@@ -77,13 +77,6 @@ pipe_rt_notify(struct proto *P, struct channel *src_ch, net *n, rte *new, rte *o
a->cached = 0;
a->hostentry = NULL;
e = rte_get_temp(a, src);
- e->pflags = new->pflags;
-
-#ifdef CONFIG_BGP
- /* Hack to cleanup cached value */
- if (e->src->proto->proto == &proto_bgp)
- e->pflags &= ~(BGP_REF_STALE | BGP_REF_NOT_STALE);
-#endif
}
else
{
diff --git a/proto/rpki/rpki.c b/proto/rpki/rpki.c
index 3c27aa1a..3e321627 100644
--- a/proto/rpki/rpki.c
+++ b/proto/rpki/rpki.c
@@ -130,8 +130,6 @@ rpki_table_add_roa(struct rpki_cache *cache, struct channel *channel, const net_
rta *a = rta_lookup(&a0);
rte *e = rte_get_temp(a, p->p.main_source);
- e->pflags = 0;
-
rte_update2(channel, &pfxr->n, e, e->src);
}
diff --git a/proto/static/static.c b/proto/static/static.c
index cd31afd3..bb93305e 100644
--- a/proto/static/static.c
+++ b/proto/static/static.c
@@ -104,7 +104,6 @@ static_announce_rte(struct static_proto *p, struct static_route *r)
/* We skip rta_lookup() here */
rte *e = rte_get_temp(a, src);
- e->pflags = 0;
if (r->cmds)
{