]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Added fib_route() which does (although very slow) lookup of longest-match
authorMartin Mares <mj@ucw.cz>
Sat, 13 May 2000 11:42:06 +0000 (11:42 +0000)
committerMartin Mares <mj@ucw.cz>
Sat, 13 May 2000 11:42:06 +0000 (11:42 +0000)
routing in a FIB.

nest/route.h
nest/rt-fib.c

index fac5b3848fc2041afbac0f731d6c56a727cf39c7..20709e94a08042c2cc6ac6fff299fdac9f897024 100644 (file)
@@ -63,6 +63,7 @@ struct fib {
 void fib_init(struct fib *, pool *, unsigned node_size, unsigned hash_order, void (*init)(struct fib_node *));
 void *fib_find(struct fib *, ip_addr *, int);  /* Find or return NULL if doesn't exist */
 void *fib_get(struct fib *, ip_addr *, int);   /* Find or create new if nonexistent */
+void *fib_route(struct fib *, ip_addr, int);   /* Longest-match routing lookup */
 void fib_delete(struct fib *, void *); /* Remove fib entry */
 void fib_free(struct fib *);           /* Destroy the fib */
 void fib_check(struct fib *);          /* Consistency check for debugging */
@@ -212,7 +213,7 @@ struct rt_show_data {
   int import_mode, primary_only;
   struct config *running_on_config;
   int net_counter, rt_counter, show_counter;
-  int stats;
+  int stats, show_for;
 };
 void rt_show(struct rt_show_data *);
 
index 22ba2ff63d00c99fd7980e154ffa853489eedb9c..6a5d1361f53e9b2a6570535fbcbfcda20b0fe0b9 100644 (file)
@@ -152,6 +152,23 @@ fib_get(struct fib *f, ip_addr *a, int len)
   return e;
 }
 
+void *
+fib_route(struct fib *f, ip_addr a, int len)
+{
+  ip_addr a0;
+  void *t;
+
+  while (len >= 0)
+    {
+      a0 = ipa_and(a, ipa_mkmask(len));
+      t = fib_find(f, &a0, len);
+      if (t)
+       return t;
+      len--;
+    }
+  return NULL;
+}
+
 static inline void
 fib_merge_readers(struct fib_iterator *i, struct fib_node *to)
 {