Electroneum
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.