diff --git a/openair1/SIMULATION/TOOLS/rangen_double.c b/openair1/SIMULATION/TOOLS/rangen_double.c index dc3ef20466..df45199006 100644 --- a/openair1/SIMULATION/TOOLS/rangen_double.c +++ b/openair1/SIMULATION/TOOLS/rangen_double.c @@ -29,33 +29,32 @@ static unsigned int urseed, iy, ir[98]; /// uniformrandom static bool tableNordDone = false; /// gaussZiggurat -#define a 1664525lu -#define mod 4294967296.0 /* is 2**32 */ - /*!\brief Generate a random number form `/dev/urandom`. */ -unsigned long get_random_seed(void) +void fill_random(void *buf, size_t sz) { - unsigned long seed; const char* fn = "/dev/urandom"; FILE* f = fopen(fn, "rb"); if (f == NULL) { fprintf(stderr, "could not open %s for seed generation: %d %s\n", fn, errno, strerror(errno)); abort(); } - int rc = fread(&seed, sizeof(seed), 1, f); + int rc = fread(buf, sz, 1, f); if (rc < 0) { fprintf(stderr, "could not read %s for seed generation: %d %s\n", fn, errno, strerror(errno)); abort(); } fclose(f); - return seed; } +static const unsigned int a = 1664525lu; + /*!\brief Initialization routine for Uniform/Gaussian random number generators. */ void randominit(unsigned long seed_init) { - unsigned long seed = seed_init != 0 ? seed_init : get_random_seed(); + unsigned long seed = seed_init; + if (seed_init == 0) + fill_random(&seed, sizeof(seed)); printf("Initializing random number generator, seed %ld\n", seed); // initialize uniformrandom RNG @@ -82,9 +81,7 @@ void randominit(unsigned long seed_init) double uniformrandom(void) { -#define a 1664525lu -#define mod 4294967296.0 /* is 2**32 */ - + const double mod = 4294967296.0; /* is 2**32 */ int j = 1 + 97.0 * iy / mod; iy = ir[j]; urseed = a * urseed; /* mod 2**32 */ @@ -197,7 +194,9 @@ double __attribute__ ((no_sanitize_address)) gaussZiggurat(double mean, double v { if (!tableNordDone) { // let's make reasonnable constant tables - tableNor(get_random_seed()); + unsigned long seed; + fill_random(&seed, sizeof(seed)); + tableNor(seed); } hz = SHR3; iz = hz & 127; diff --git a/openair1/SIMULATION/TOOLS/sim.h b/openair1/SIMULATION/TOOLS/sim.h index 7f9aa05f41..b23aaac4b5 100644 --- a/openair1/SIMULATION/TOOLS/sim.h +++ b/openair1/SIMULATION/TOOLS/sim.h @@ -523,7 +523,7 @@ the value \f$\mathrm{sgn}(u)i\f$. The search requires at most \f$Nbits-1\f$ com */ int gauss(unsigned int *gauss_LUT,unsigned char Nbits); -unsigned long get_random_seed(void); +void fill_random(void *buf, size_t sz); double gaussdouble(double,double); void randominit(unsigned long seed_init); double uniformrandom(void); diff --git a/openair1/SIMULATION/TOOLS/taus.c b/openair1/SIMULATION/TOOLS/taus.c index 7ea7a14a98..5280cceafb 100644 --- a/openair1/SIMULATION/TOOLS/taus.c +++ b/openair1/SIMULATION/TOOLS/taus.c @@ -52,9 +52,9 @@ void set_taus_seed(unsigned int seed_init) unsigned long result = 0; if (seed_init == 0) { - s0 = (unsigned int) get_random_seed(); - s1 = (unsigned int) get_random_seed(); - s2 = (unsigned int) get_random_seed(); + fill_random(&s0, sizeof(s0)); + fill_random(&s1, sizeof(s1)); + fill_random(&s2, sizeof(s2)); } else { /* Use reentrant version of rand48 to ensure that no conflicts with other generators occur */ srand48_r((long int)seed_init, &buffer); diff --git a/openair3/ocp-gtpu/gtp_itf.cpp b/openair3/ocp-gtpu/gtp_itf.cpp index 10418c996a..5a2a7fd591 100644 --- a/openair3/ocp-gtpu/gtp_itf.cpp +++ b/openair3/ocp-gtpu/gtp_itf.cpp @@ -144,7 +144,9 @@ class gtpEndPoints { map instances; gtpEndPoints() { - srandom(get_random_seed()); + unsigned int seed; + fill_random(&seed, sizeof(seed)); + srandom(seed); } ~gtpEndPoints() {