aboutsummaryrefslogtreecommitdiffstats
path: root/proto/babel
diff options
context:
space:
mode:
authorOndrej Zajicek (work) <santiago@crfreenet.org>2016-07-19 14:28:53 +0200
committerOndrej Zajicek (work) <santiago@crfreenet.org>2016-07-19 14:28:53 +0200
commit0f673666017bfc9c05c9495ae53bc323b9dc6660 (patch)
tree83b12ce02f96e82f311cbb46b1b4a12abe081fc2 /proto/babel
parent5d6ca220850c615126ea6820f8c05528269feec6 (diff)
downloadbird-0f673666017bfc9c05c9495ae53bc323b9dc6660.tar.gz
Babel: Do not keep an infeasible route as selected
When a route becomes infeasible it should not be kept as selected; this is forbidden by section 3.6 of the RFC and prevents subsequent updates from the same router ID from replacing it. Signed-off-by: Toke Høiland-Jørgensen <toke@toke.dk>
Diffstat (limited to 'proto/babel')
-rw-r--r--proto/babel/babel.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/proto/babel/babel.c b/proto/babel/babel.c
index 67e1d8be..3b3b9870 100644
--- a/proto/babel/babel.c
+++ b/proto/babel/babel.c
@@ -565,6 +565,11 @@ babel_select_route(struct babel_entry *e)
babel_send_seqno_request(e);
babel_announce_rte(p, e);
+
+ /* Section 3.6 of the RFC forbids an infeasible from being selected. This
+ is cleared after announcing the route to the core to make sure an
+ unreachable route is propagated first. */
+ e->selected_in = NULL;
}
else
{