From: Jan Moskyto Matejka Date: Wed, 5 Apr 2017 13:11:10 +0000 (+0200) Subject: Nest: Fix route lookup X-Git-Tag: v2.0.0-pre1~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7ee07a3c3966ec787bcb7e5100c1add4abef9213;p=thirdparty%2Fbird.git Nest: Fix route lookup --- diff --git a/nest/route.h b/nest/route.h index 4d7848582..12968cb8e 100644 --- a/nest/route.h +++ b/nest/route.h @@ -284,6 +284,8 @@ void rt_lock_table(rtable *); void rt_unlock_table(rtable *); void rt_setup(pool *, rtable *, char *, struct rtable_config *); static inline net *net_find(rtable *tab, const net_addr *addr) { return (net *) fib_find(&tab->fib, addr); } +static inline net *net_find_valid(rtable *tab, const net_addr *addr) +{ net *n = net_find(tab, addr); return (n && rte_is_valid(n->routes)) ? n : NULL; } static inline net *net_get(rtable *tab, const net_addr *addr) { return (net *) fib_get(&tab->fib, addr); } void *net_route(rtable *tab, const net_addr *n); int net_roa_check(rtable *tab, const net_addr *n, u32 asn); diff --git a/nest/rt-table.c b/nest/rt-table.c index 73cfc9e2d..41f0f6492 100644 --- a/nest/rt-table.c +++ b/nest/rt-table.c @@ -68,12 +68,11 @@ make_tmp_attrs(struct rte *rt, struct linpool *pool) /* Like fib_route(), but skips empty net entries */ static inline void * -net_route_ip4(struct fib *f, net_addr_ip4 *n) +net_route_ip4(rtable *t, net_addr_ip4 *n) { net *r; - while (r = fib_find(f, (net_addr *) n), - !(r && rte_is_valid(r->routes)) && (n->pxlen > 0)) + while (r = net_find_valid(t, (net_addr *) n), (!r) && (n->pxlen > 0)) { n->pxlen--; ip4_clrbit(&n->prefix, n->pxlen); @@ -83,12 +82,11 @@ net_route_ip4(struct fib *f, net_addr_ip4 *n) } static inline void * -net_route_ip6(struct fib *f, net_addr_ip6 *n) +net_route_ip6(rtable *t, net_addr_ip6 *n) { net *r; - while (r = fib_find(f, (net_addr *) n), - !(r && rte_is_valid(r->routes)) && (n->pxlen > 0)) + while (r = net_find_valid(t, (net_addr *) n), (!r) && (n->pxlen > 0)) { n->pxlen--; ip6_clrbit(&n->prefix, n->pxlen); @@ -110,12 +108,12 @@ net_route(rtable *tab, const net_addr *n) case NET_IP4: case NET_VPN4: case NET_ROA4: - return net_route_ip4(&tab->fib, (net_addr_ip4 *) n0); + return net_route_ip4(tab, (net_addr_ip4 *) n0); case NET_IP6: case NET_VPN6: case NET_ROA6: - return net_route_ip6(&tab->fib, (net_addr_ip6 *) n0); + return net_route_ip6(tab, (net_addr_ip6 *) n0); default: return NULL;