random.h File Reference

Thread safe random functions. More...

Functions

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

Detailed Description

Thread safe random functions.

Similar to arc4random() with an explicit initialisation routine.

Function Documentation

◆ ub_initstate()

struct ub_randstate* ub_initstate ( struct ub_randstate *  from)

Initialize a random generator state for use.

Parameters
fromif 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.

Referenced by daemon_create_workers(), init_cookie_secret(), libworker_setup(), rnd_test(), tcpid_test(), ub_ctx_create_nopipe(), and worker_create().

◆ ub_random()

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
statemust have been initialised with ub_initstate.
Returns
: random 31 bit value.

Referenced by libworker_setup(), rnd_test(), and serviced_perturb_qname().

◆ 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
statemust have been initialised with ub_initstate.
xan 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.

Referenced by calc_next_probe(), fd_for_dest(), iter_filter_order(), iter_ns_probability(), iter_server_selection(), outnet_serviced_query(), pick_outgoing_tcp(), reuse_tcp_select_id(), rnd_test(), select_ifport(), and validate_suspend_setup_timer().

◆ ub_randfree()

void ub_randfree ( struct ub_randstate *  state)

Delete the random state.

Parameters
stateto delete.

Referenced by daemon_delete(), libworker_delete_env(), rnd_test(), tcpid_test(), ub_ctx_create(), ub_ctx_create_nopipe(), and worker_delete().