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

Toke Høiland-Jørgensen toke at toke.dk
Tue May 26 13:26:22 CEST 2020


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.

This patch has been carried in the OpenWrt package for Bird since the v1
submission two years ago. The behaviour introduced here is essential for
common deployments of Babel and matches the behaviour of babeld.

Signed-off-by: Toke Høiland-Jørgensen <toke at toke.dk>
---
v2:
  - Rebase to current master (using neigh_find() instead of neigh_find2())
 proto/babel/babel.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/proto/babel/babel.c b/proto/babel/babel.c
index ebd5f7cc4..b75392d97 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_find(&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.26.2



More information about the Bird-users mailing list