24 RCSID(
"$Id: 4dcd6fd6ef3c59d7bea11c3935cfc625ae554d5f $")
26 #include <freeradius-devel/util/retry.h>
27 #include <freeradius-devel/util/rand.h>
28 #include <freeradius-devel/util/uint128.h>
42 memset(r, 0,
sizeof(*r));
65 scale += ((uint64_t) 1) << 32;
66 scale -= ((uint64_t) 1) << 31;
128 scale -= ((uint64_t) 1) << 31;
129 scale += ((uint64_t) 1) << 33;
142 scale -= ((uint64_t) 1) << 31;
143 scale += ((uint64_t) 1) << 32;
static const conf_parser_t config[]
uint32_t fr_rand(void)
Return a 32-bit random number.
static int64_t fr_time_delta_unwrap(fr_time_delta_t time)
#define fr_time_delta_wrap(_time)
#define fr_time_delta_ispos(_a)
#define fr_time_add(_a, _b)
Add a time/time delta together.
#define fr_time_gt(_a, _b)
#define fr_time_lt(_a, _b)
#define fr_time_delta_gt(_a, _b)
A time delta, a difference in time measured in nanoseconds.
static uint64_t uint128_to_64(uint128_t a)
Returns the low bits of a 128bit integer.
static uint128_t uint128_mul64(uint64_t u, uint64_t v)
Multiply two unsigned 64bit integers to get an unsigned 128bit integer.
static uint128_t uint128_rshift(uint128_t num, uint8_t bits)
Right shift 128 bit integer.
fr_retry_state_t fr_retry_next(fr_retry_t *r, fr_time_t now)
Initialize a retransmission counter.
void fr_retry_init(fr_retry_t *r, fr_time_t now, fr_retry_config_t const *config)
Initialize a retransmission counter.
fr_time_t start
when we started the retransmission
fr_time_delta_t irt
Initial transmission time.
fr_time_delta_t rt
retransmit interval
fr_time_delta_t mrt
Maximum retransmission time.
uint32_t mrc
Maximum retransmission count.
fr_retry_config_t const * config
master configuration
@ FR_RETRY_MRC
reached maximum retransmission count
@ FR_RETRY_MRD
reached maximum retransmission duration
uint32_t count
number of sent packets
fr_time_delta_t mrd
Maximum retransmission duration.
fr_time_t updated
last update, really a cached "now".
fr_time_t next
when the next timer should be set