Electroneum
Loading...
Searching...
No Matches
dnstree.h File Reference
#include "util/rbtree.h"
Include dependency graph for dnstree.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  name_tree_node
struct  addr_tree_node

Functions

void name_tree_init (rbtree_type *tree)
int name_tree_insert (rbtree_type *tree, struct name_tree_node *node, uint8_t *name, size_t len, int labs, uint16_t dclass)
void name_tree_init_parents (rbtree_type *tree)
struct name_tree_nodename_tree_find (rbtree_type *tree, uint8_t *name, size_t len, int labs, uint16_t dclass)
struct name_tree_nodename_tree_lookup (rbtree_type *tree, uint8_t *name, size_t len, int labs, uint16_t dclass)
int name_tree_next_root (rbtree_type *tree, uint16_t *dclass)
void addr_tree_init (rbtree_type *tree)
int addr_tree_insert (rbtree_type *tree, struct addr_tree_node *node, struct sockaddr_storage *addr, socklen_t addrlen, int net)
void addr_tree_init_parents (rbtree_type *tree)
struct addr_tree_nodeaddr_tree_lookup (rbtree_type *tree, struct sockaddr_storage *addr, socklen_t addrlen)
struct addr_tree_nodeaddr_tree_find (rbtree_type *tree, struct sockaddr_storage *addr, socklen_t addrlen, int net)
int name_tree_compare (const void *k1, const void *k2)
int addr_tree_compare (const void *k1, const void *k2)

Detailed Description

This file contains structures combining types and functions to manipulate those structures that help building DNS lookup trees.

Definition in file dnstree.h.

Function Documentation

◆ addr_tree_compare()

int addr_tree_compare ( const void * k1,
const void * k2 )

compare addr tree nodes

◆ addr_tree_find()

struct addr_tree_node * addr_tree_find ( rbtree_type * tree,
struct sockaddr_storage * addr,
socklen_t addrlen,
int net )

Find element in addr tree. (search a netblock, not a match for an address)

Parameters
treeaddr tree
addrnetblock to lookup.
addrlenlength of addr
netsize of subnet
Returns
addr tree element, or NULL if not found.

◆ addr_tree_init()

void addr_tree_init ( rbtree_type * tree)

Init addr tree to be empty.

Parameters
treeto init.

◆ addr_tree_init_parents()

void addr_tree_init_parents ( rbtree_type * tree)

Initialize parent pointers in addr tree. Should be performed after insertions are done, before lookups

Parameters
treeaddr tree

◆ addr_tree_insert()

int addr_tree_insert ( rbtree_type * tree,
struct addr_tree_node * node,
struct sockaddr_storage * addr,
socklen_t addrlen,
int net )

insert element into addr tree.

Parameters
treeaddr tree
nodenode element (at start of a structure that caller has allocated).
addrto insert (copied).
addrlenlength of addr
netsize of subnet.
Returns
false on error (duplicate element).

◆ addr_tree_lookup()

struct addr_tree_node * addr_tree_lookup ( rbtree_type * tree,
struct sockaddr_storage * addr,
socklen_t addrlen )

Lookup closest encloser in addr tree.

Parameters
treeaddr tree
addrto lookup.
addrlenlength of addr
Returns
closest enclosing node (could be equal) or NULL if not found.

◆ name_tree_compare()

int name_tree_compare ( const void * k1,
const void * k2 )

compare name tree nodes

◆ name_tree_find()

struct name_tree_node * name_tree_find ( rbtree_type * tree,
uint8_t * name,
size_t len,
int labs,
uint16_t dclass )

Lookup exact match in name tree

Parameters
treename tree
namewireformat name
lenlength of name
labslabels in name
dclassclass of name
Returns
node or NULL if not found.

◆ name_tree_init()

void name_tree_init ( rbtree_type * tree)

Init a name tree to be empty

Parameters
treeto init.

◆ name_tree_init_parents()

void name_tree_init_parents ( rbtree_type * tree)

Initialize parent pointers in name tree. Should be performed after insertions are done, before lookups

Parameters
treename tree

◆ name_tree_insert()

int name_tree_insert ( rbtree_type * tree,
struct name_tree_node * node,
uint8_t * name,
size_t len,
int labs,
uint16_t dclass )

insert element into name tree.

Parameters
treename tree
nodenode element (at start of a structure that caller has allocated).
namename to insert (wireformat) this node has been allocated by the caller and it itself inserted.
lenlength of name
labslabels in name
dclassclass of name
Returns
false on error (duplicate element).

◆ name_tree_lookup()

struct name_tree_node * name_tree_lookup ( rbtree_type * tree,
uint8_t * name,
size_t len,
int labs,
uint16_t dclass )

Lookup closest encloser in name tree.

Parameters
treename tree
namewireformat name
lenlength of name
labslabels in name
dclassclass of name
Returns
closest enclosing node (could be equal) or NULL if not found.

◆ name_tree_next_root()

int name_tree_next_root ( rbtree_type * tree,
uint16_t * dclass )

Find next root item in name tree.

Parameters
treethe nametree.
dclassthe class to look for next (or higher).
Returns
false if no classes found, true means class put into c.