]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Nest: Fix route lookup
authorJan Moskyto Matejka <mq@ucw.cz>
Wed, 5 Apr 2017 13:11:10 +0000 (15:11 +0200)
committerJan Moskyto Matejka <mq@ucw.cz>
Wed, 12 Apr 2017 14:05:56 +0000 (16:05 +0200)
nest/route.h
nest/rt-table.c

index 4d7848582d4a11e8c8dea9074bd52b1a24b126e5..12968cb8ec3951904188c023674e14dc92867d4f 100644 (file)
@@ -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);
index 73cfc9e2d12feb07754a1410ac6228dbbd3729eb..41f0f6492ffee477cc2b06b8a9f5a85a4adc9cc9 100644 (file)
@@ -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;