#include <config.h>#include <isc/mem.h>#include <isc/types.h>#include <isc/util.h>#include <isc/radix.h>Go to the source code of this file.
Functions | |
| static isc_result_t | _new_prefix (isc_mem_t *mctx, isc_prefix_t **target, int family, void *dest, int bitlen) |
| static void | _deref_prefix (isc_prefix_t *prefix) |
| static isc_result_t | _ref_prefix (isc_mem_t *mctx, isc_prefix_t **target, isc_prefix_t *prefix) |
| static int | _comp_with_mask (void *addr, void *dest, u_int mask) |
| static void | _clear_radix (isc_radix_tree_t *radix, isc_radix_destroyfunc_t func) |
| isc_result_t | isc_radix_create (isc_mem_t *mctx, isc_radix_tree_t **target, int maxbits) |
| Create a radix tree with a maximum depth of 'maxbits';. | |
| void | isc_radix_destroy (isc_radix_tree_t *radix, isc_radix_destroyfunc_t func) |
| Destroy a radix tree optionally calling 'func' to clean up node data. | |
| void | isc_radix_process (isc_radix_tree_t *radix, isc_radix_processfunc_t func) |
| Walk a radix tree calling 'func' to process node data. | |
| isc_result_t | isc_radix_search (isc_radix_tree_t *radix, isc_radix_node_t **target, isc_prefix_t *prefix) |
| Search 'radix' for the best match to 'prefix'. Return the node found in '*target'. | |
| isc_result_t | isc_radix_insert (isc_radix_tree_t *radix, isc_radix_node_t **target, isc_radix_node_t *source, isc_prefix_t *prefix) |
| Insert 'source' or 'prefix' into the radix tree 'radix'. Return the node added in 'target'. | |
| void | isc_radix_remove (isc_radix_tree_t *radix, isc_radix_node_t *node) |
| Remove the node 'node' from the radix tree 'radix'. | |
| static isc_result_t _new_prefix | ( | isc_mem_t * | mctx, | |
| isc_prefix_t ** | target, | |||
| int | family, | |||
| void * | dest, | |||
| int | bitlen | |||
| ) | [static] |
Definition at line 49 of file radix.c.
References isc_prefix::add, AF_INET6, isc_prefix::bitlen, isc_prefix::ecs, isc_prefix::family, ISC_FALSE, isc_mem_attach(), isc_mem_get, ISC_R_NOMEMORY, ISC_R_NOTIMPLEMENTED, ISC_R_SUCCESS, isc_refcount_init(), isc_prefix::mctx, isc_prefix::refcount, REQUIRE, isc_prefix::sin, and isc_prefix::sin6.
Referenced by _ref_prefix().
| static void _deref_prefix | ( | isc_prefix_t * | prefix | ) | [static] |
Definition at line 84 of file radix.c.
References isc_mem_putanddetach, isc_refcount_decrement, isc_refcount_destroy, isc_prefix::mctx, and isc_prefix::refcount.
Referenced by _clear_radix(), and isc_radix_remove().
| static isc_result_t _ref_prefix | ( | isc_mem_t * | mctx, | |
| isc_prefix_t ** | target, | |||
| isc_prefix_t * | prefix | |||
| ) | [static] |
Definition at line 100 of file radix.c.
References _new_prefix(), isc_prefix::add, AF_INET6, isc_prefix::bitlen, isc_prefix::family, INSIST, ISC_R_SUCCESS, isc_refcount_current, isc_refcount_increment, isc_prefix::refcount, and REQUIRE.
Referenced by isc_radix_insert().
| static int _comp_with_mask | ( | void * | addr, | |
| void * | dest, | |||
| u_int | mask | |||
| ) | [static] |
| static void _clear_radix | ( | isc_radix_tree_t * | radix, | |
| isc_radix_destroyfunc_t | func | |||
| ) | [static] |
Definition at line 171 of file radix.c.
References _deref_prefix(), isc_radix_node::data, isc_radix_tree::head, INSIST, isc_mem_put, isc_radix_node::l, isc_radix_tree::mctx, isc_radix_tree::num_active_node, isc_radix_node::prefix, isc_radix_node::r, r, RADIX_MAXBITS, REQUIRE, and RUNTIME_CHECK.
Referenced by isc_radix_destroy().
| isc_result_t isc_radix_create | ( | isc_mem_t * | mctx, | |
| isc_radix_tree_t ** | target, | |||
| int | maxbits | |||
| ) |
Create a radix tree with a maximum depth of 'maxbits';.
Requires:
Definition at line 144 of file radix.c.
References isc_radix_tree::head, isc_mem_attach(), isc_mem_get, ISC_R_NOMEMORY, ISC_R_SUCCESS, isc_radix_tree::magic, isc_radix_tree::maxbits, isc_radix_tree::mctx, isc_radix_tree::num_active_node, isc_radix_tree::num_added_node, RADIX_MAXBITS, RADIX_TREE_MAGIC, REQUIRE, and RUNTIME_CHECK.
Referenced by ATF_TC_BODY(), and dns_iptable_create().
| void isc_radix_destroy | ( | isc_radix_tree_t * | radix, | |
| isc_radix_destroyfunc_t | func | |||
| ) |
Destroy a radix tree optionally calling 'func' to clean up node data.
Requires:
Definition at line 217 of file radix.c.
References _clear_radix(), isc_mem_putanddetach, isc_radix_tree::mctx, and REQUIRE.
Referenced by ATF_TC_BODY(), and destroy_iptable().
| void isc_radix_process | ( | isc_radix_tree_t * | radix, | |
| isc_radix_processfunc_t | func | |||
| ) |
Walk a radix tree calling 'func' to process node data.
Requires:
Definition at line 228 of file radix.c.
References isc_radix_node::data, isc_radix_tree::head, isc_radix_node::prefix, RADIX_WALK, RADIX_WALK_END, and REQUIRE.
Referenced by dns_acl_isinsecure().
| isc_result_t isc_radix_search | ( | isc_radix_tree_t * | radix, | |
| isc_radix_node_t ** | target, | |||
| isc_prefix_t * | prefix | |||
| ) |
Search 'radix' for the best match to 'prefix'. Return the node found in '*target'.
Requires:
Definition at line 240 of file radix.c.
References _comp_with_mask(), isc_radix_node::bit, BIT_TEST, isc_prefix::bitlen, isc_radix_tree::head, isc_prefix_tochar, isc_prefix_touchar, ISC_R_NOTFOUND, ISC_R_SUCCESS, ISC_RADIX_OFF, isc_radix_node::l, isc_radix_tree::maxbits, isc_radix_node::node_num, isc_radix_node::prefix, isc_radix_node::r, RADIX_MAXBITS, REQUIRE, and RUNTIME_CHECK.
Referenced by ATF_TC_BODY(), ATF_TP_ADD_TCS(), and dns_acl_match2().
| isc_result_t isc_radix_insert | ( | isc_radix_tree_t * | radix, | |
| isc_radix_node_t ** | target, | |||
| isc_radix_node_t * | source, | |||
| isc_prefix_t * | prefix | |||
| ) |
Insert 'source' or 'prefix' into the radix tree 'radix'. Return the node added in 'target'.
Requires:
Definition at line 309 of file radix.c.
References _ref_prefix(), isc_radix_node::bit, BIT_TEST, isc_prefix::bitlen, isc_radix_node::data, isc_prefix::family, isc_radix_tree::head, INSIST, isc_mem_get, isc_mem_put, isc_prefix_touchar, ISC_R_NOMEMORY, ISC_R_SUCCESS, ISC_RADIX_OFF, isc_radix_node::l, isc_radix_tree::maxbits, isc_radix_tree::mctx, new_node(), isc_radix_node::node_num, isc_radix_tree::num_active_node, isc_radix_tree::num_added_node, isc_radix_node::parent, isc_radix_node::prefix, isc_radix_node::r, r, REQUIRE, and RUNTIME_CHECK.
Referenced by ATF_TC_BODY(), dns_iptable_addprefix2(), and dns_iptable_merge().
| void isc_radix_remove | ( | isc_radix_tree_t * | radix, | |
| isc_radix_node_t * | node | |||
| ) |
Remove the node 'node' from the radix tree 'radix'.
Requires:
Definition at line 619 of file radix.c.
References _deref_prefix(), isc_radix_node::data, isc_radix_tree::head, INSIST, isc_mem_put, isc_radix_node::l, isc_radix_tree::mctx, isc_radix_tree::num_active_node, isc_radix_node::parent, isc_radix_node::prefix, isc_radix_node::r, and REQUIRE.