[MINOR] tools: add a new get_next_id() function

This function returns the next unused key in a tree. This will be
used to find spare IDs.
diff --git a/include/common/standard.h b/include/common/standard.h
index 00144cc..715ed24 100644
--- a/include/common/standard.h
+++ b/include/common/standard.h
@@ -27,6 +27,7 @@
 #include <sys/types.h>
 #include <netinet/in.h>
 #include <common/config.h>
+#include <common/eb32tree.h>
 #include <proto/fd.h>
 
 /****** string-specific macros and functions ******/
@@ -331,4 +332,9 @@
 /* copies at most <n> characters from <src> and always terminates with '\0' */
 char *my_strndup(const char *src, int n);
 
+/* This function returns the first unused key greater than or equal to <key> in
+ * ID tree <root>. Zero is returned if no place is found.
+ */
+unsigned int get_next_id(struct eb_root *root, unsigned int key);
+
 #endif /* _COMMON_STANDARD_H */
diff --git a/src/standard.c b/src/standard.c
index eecc360..6b0be2d 100644
--- a/src/standard.c
+++ b/src/standard.c
@@ -20,6 +20,7 @@
 #include <arpa/inet.h>
 
 #include <common/config.h>
+#include <common/eb32tree.h>
 #include <common/standard.h>
 #include <proto/log.h>
 
@@ -730,6 +731,23 @@
 	return ret;
 }
 
+/* This function returns the first unused key greater than or equal to <key> in
+ * ID tree <root>. Zero is returned if no place is found.
+ */
+unsigned int get_next_id(struct eb_root *root, unsigned int key)
+{
+	struct eb32_node *used;
+
+	do {
+		used = eb32_lookup_ge(root, key);
+		if (!used || used->key > key)
+			return key; /* key is available */
+		key++;
+	} while (key);
+	return key;
+}
+
+
 /*
  * Local variables:
  *  c-indent-level: 8