diff options
author | Thomas Gschwantner <tharre3@gmail.com> | 2019-02-25 09:41:19 +0100 |
---|---|---|
committer | Thomas Gschwantner <tharre3@gmail.com> | 2019-02-25 14:46:42 +0100 |
commit | eb3ec870ba48f4be7bbfe30a2a722e53e5f25e1f (patch) | |
tree | 4f5c0ce1e42a21c8ca067ea69726d061edd1eb30 /radix-trie.h | |
parent | Move the google doc into the git repository (diff) | |
download | wg-dynamic-eb3ec870ba48f4be7bbfe30a2a722e53e5f25e1f.tar.xz wg-dynamic-eb3ec870ba48f4be7bbfe30a2a722e53e5f25e1f.zip |
Implement a radix-trie for storing ip=pubkey
Diffstat (limited to 'radix-trie.h')
-rw-r--r-- | radix-trie.h | 35 |
1 files changed, 35 insertions, 0 deletions
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 <arpa/inet.h> +#include <stdbool.h> +#include <stdint.h> + +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 |