unbound  0.1
Functions
random.h File Reference

Thread safe random functions. More...

Functions

void ub_systemseed (unsigned int seed)
 Initialize the system randomness.
struct ub_randstateub_initstate (unsigned int seed, struct ub_randstate *from)
 Initialize a random generator state for use.
long int ub_random (struct ub_randstate *state)
 Generate next random number from the state passed along.
long int ub_random_max (struct ub_randstate *state, long int x)
 Generate random number between 0 and x-1.
void ub_randfree (struct ub_randstate *state)
 Delete the random state.

Detailed Description

Thread safe random functions.

Similar to arc4random() with an explicit initialisation routine.

Function Documentation

void ub_systemseed ( unsigned int  seed)

Initialize the system randomness.

Obtains entropy from the system before a chroot or privilege makes it unavailable. You do not have to call this, otherwise ub_initstate does so.

Parameters
seed,:seed value to create state (if no good entropy is found).

References log_err(), VERB_OPS, and verbose().

Referenced by daemon_init(), ub_arc4random_stir(), and ub_initstate().

struct ub_randstate* ub_initstate ( unsigned int  seed,
struct ub_randstate from 
)
read

Initialize a random generator state for use.

Parameters
seed,:seed value to create state contents. (ignored for arc4random).
from,:if not NULL, the seed is taken from this random structure. can be used to seed random states via a parent-random-state that is itself seeded with entropy.
Returns
new state or NULL alloc failure.

References log_err(), ub_arc4random_stir(), and ub_systemseed().

Referenced by daemon_create_workers(), libworker_setup(), rnd_test(), ub_ctx_create(), and worker_create().

long int ub_random ( struct ub_randstate state)

Generate next random number from the state passed along.

Thread safe, so random numbers are repeatable.

Parameters
state,:must have been initialised with ub_initstate.
Returns
: random 31 bit value.

References MAX_VALUE, ub_randstate::rc4, ub_randstate::rc4_ready, and ub_arc4random_stir().

Referenced by daemon_create_workers(), libworker_setup(), pending_tcp_query(), rnd_test(), select_id(), serviced_perturb_qname(), ub_arc4random_stir(), and ub_random_max().

long int ub_random_max ( struct ub_randstate state,
long int  x 
)

Generate random number between 0 and x-1.

No modulo bias.

Parameters
state,:must have been initialised with ub_initstate.
x,:an upper limit. not (negative or zero). must be smaller than 2**31.
Returns
: random value between 0..x-1. Possibly more than one random number is picked from the random stream to satisfy this.

References MAX_VALUE, and ub_random().

Referenced by calc_next_probe(), daemon_get_shufport(), iter_ns_probability(), iter_server_selection(), pick_outgoing_tcp(), rnd_test(), and select_ifport().

void ub_randfree ( struct ub_randstate state)

Delete the random state.

Parameters
state,:to delete.

Referenced by daemon_delete(), libworker_delete(), rnd_test(), ub_ctx_create(), ub_ctx_delete(), and worker_delete().