provide rtable_empty(), returns 1 if the rtable doesn't contain any routes
authorhenning <henning@openbsd.org>
Sun, 9 Sep 2018 10:07:38 +0000 (10:07 +0000)
committerhenning <henning@openbsd.org>
Sun, 9 Sep 2018 10:07:38 +0000 (10:07 +0000)
ok bluhm

sys/net/rtable.c
sys/net/rtable.h

index b16499c..9dd3e2e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: rtable.c,v 1.63 2017/09/05 11:15:39 mpi Exp $ */
+/*     $OpenBSD: rtable.c,v 1.64 2018/09/09 10:07:38 henning Exp $ */
 
 /*
  * Copyright (c) 2014-2016 Martin Pieuchot
@@ -278,6 +278,27 @@ rtable_exists(unsigned int rtableid)
        return (0);
 }
 
+int
+rtable_empty(unsigned int rtableid)
+{
+       struct domain   *dp;
+       int              i;
+       struct art_root *tbl;
+
+       for (i = 0; (dp = domains[i]) != NULL; i++) {
+               if (dp->dom_rtoffset == 0)
+                       continue;
+
+               tbl = rtable_get(rtableid, dp->dom_family);
+               if (tbl == NULL)
+                       continue;
+               if (tbl->ar_root.ref != NULL)
+                       return (0);
+       }
+
+       return (1);
+}
+
 unsigned int
 rtable_l2(unsigned int rtableid)
 {
index 6df75dd..5709372 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: rtable.h,v 1.20 2017/08/02 08:38:28 mpi Exp $ */
+/*     $OpenBSD: rtable.h,v 1.21 2018/09/09 10:07:38 henning Exp $ */
 
 /*
  * Copyright (c) 2014-2016 Martin Pieuchot
@@ -49,6 +49,7 @@ int            rtable_satoplen(sa_family_t, struct sockaddr *);
 
 void            rtable_init(void);
 int             rtable_exists(unsigned int);
+int             rtable_empty(unsigned int);
 int             rtable_add(unsigned int);
 unsigned int    rtable_l2(unsigned int);
 unsigned int    rtable_loindex(unsigned int);