[PATCH] babel: Set onlink flag for IPv4 routes with unreachable next hop

Toke Høiland-Jørgensen toke at toke.dk
Mon Apr 30 11:15:20 CEST 2018


If the next hop of a route is not a reachable address, the route should be
installed as onlink. This enables a configuration common in mesh networks
where the mesh interface is assigned a /32 and babel handles the routing by
installing onlink routes.

Signed-off-by: Toke Høiland-Jørgensen <toke at toke.dk>
---
 proto/babel/babel.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/proto/babel/babel.c b/proto/babel/babel.c
index 88c4711e..4fd88042 100644
--- a/proto/babel/babel.c
+++ b/proto/babel/babel.c
@@ -640,6 +640,13 @@ babel_announce_rte(struct babel_proto *p, struct babel_entry *e)
       .nh.iface = r->neigh->ifa->iface,
     };
 
+    /* If we cannot find a reachable neighbour, set the entry to be onlink. This
+     * makes it possible to, e.g., assign /32 addresses on a mesh interface and
+     * have routing work.
+     */
+    if (!neigh_find2(&p->p, &r->next_hop, r->neigh->ifa->iface, 0))
+	    a0.nh.flags = RNF_ONLINK;
+
     rta *a = rta_lookup(&a0);
     rte *rte = rte_get_temp(a);
     rte->u.babel.seqno = r->seqno;
-- 
2.17.0



More information about the Bird-users mailing list