On Tue, May 14, 2019 at 11:20:43AM +0200, Mattias Rönnblom wrote: > Replace the use of rte_get_timer_cycles() with getentropy() for > seeding the pseudo-random number generator. getentropy() provides a > more truly random value. > > Suggested-by: Stephen Hemminger > Signed-off-by: Mattias Rönnblom > --- > lib/librte_eal/common/rte_random.c | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) > > diff --git a/lib/librte_eal/common/rte_random.c b/lib/librte_eal/common/rte_random.c > index 4d3cf5226..aafc2f7ad 100644 > --- a/lib/librte_eal/common/rte_random.c > +++ b/lib/librte_eal/common/rte_random.c > @@ -3,6 +3,7 @@ > */ > > #include > +#include > > #include > #include > @@ -135,5 +136,14 @@ rte_rand(void) > > RTE_INIT(rte_rand_init) > { > - rte_srand(rte_get_timer_cycles()); > + uint64_t seed; > + int rc; > + > + rc = getentropy(&seed, sizeof(seed)); This API was only introduced in FreeBSD in v12, so you may want to have a define for enabling it, and (for meson) but in a check for cc.has_function(get_entropy). > + > + /* fall back to rdtsc in case of failure */ > + if (rc < 0) > + seed = rte_get_timer_cycles(); Rather than fallback immediately to time, what about putting in a call to HW random number generator support if available, e.g. rdseed instruction. > + > + rte_srand(seed); > } > -- > 2.17.1 >