From eb3ec870ba48f4be7bbfe30a2a722e53e5f25e1f Mon Sep 17 00:00:00 2001 From: Thomas Gschwantner Date: Mon, 25 Feb 2019 09:41:19 +0100 Subject: Implement a radix-trie for storing ip=pubkey --- radix-trie.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 radix-trie.h (limited to 'radix-trie.h') diff --git a/radix-trie.h b/radix-trie.h new file mode 100644 index 0000000..3d0b00f --- /dev/null +++ b/radix-trie.h @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: MIT + * + * Copyright (C) 2019 WireGuard LLC. All Rights Reserved. + */ + +#ifndef __RADIX_TRIE_H__ +#define __RADIX_TRIE_H__ + +#include +#include +#include + +struct radix_trie { + struct radix_node *ip4_root, *ip6_root; +}; + +void radix_init(struct radix_trie *trie); +void radix_free(struct radix_trie *trie); +void *radix_find_v4(struct radix_trie *trie, uint8_t bits, const void *be_ip); +void *radix_find_v6(struct radix_trie *trie, uint8_t bits, const void *be_ip); +int radix_insert_v4(struct radix_trie *root, const struct in_addr *ip, + uint8_t cidr, void *data); +int radix_insert_v6(struct radix_trie *root, const struct in6_addr *ip, + uint8_t cidr, void *data); +int radix_tryinsert_v4(struct radix_trie *root, const struct in_addr *ip, + uint8_t cidr, void *data); +int radix_tryinsert_v6(struct radix_trie *root, const struct in6_addr *ip, + uint8_t cidr, void *data); + +#ifdef DEBUG +void node_to_str(struct radix_node *node, char *buf); +void debug_print_trie(struct radix_node *root); +#endif + +#endif -- cgit v1.2.3-59-g8ed1b