]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Babel: Set onlink flag for IPv4 routes with unreachable next hop
authorOndrej Zajicek (work) <santiago@crfreenet.org>
Tue, 26 May 2020 21:43:13 +0000 (23:43 +0200)
committerOndrej Zajicek (work) <santiago@crfreenet.org>
Tue, 26 May 2020 21:43:13 +0000 (23:43 +0200)
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.

Thanks to Toke Hoiland-Jorgensen for the patch.

proto/babel/babel.c

index ebd5f7cc437368f9939371824f3471f62f3c9094..ba98598ba8d33eb8791e98ebd047fe4c4c0f5529 100644 (file)
@@ -640,6 +640,14 @@ 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;