eal: simplify meson build of common directory
[dpdk.git] / lib / librte_eal / common / include / rte_random.h
index b2ca1c2..2b30ec8 100644 (file)
@@ -16,7 +16,8 @@ extern "C" {
 #endif
 
 #include <stdint.h>
-#include <stdlib.h>
+
+#include <rte_compat.h>
 
 /**
  * Seed the pseudo-random generator.
@@ -25,34 +26,45 @@ extern "C" {
  * value. It may need to be re-seeded by the user with a real random
  * value.
  *
+ * This function is not multi-thread safe in regards to other
+ * rte_srand() calls, nor is it in relation to concurrent rte_rand()
+ * calls.
+ *
  * @param seedval
  *   The value of the seed.
  */
-static inline void
-rte_srand(uint64_t seedval)
-{
-       srand48((long)seedval);
-}
+void
+rte_srand(uint64_t seedval);
 
 /**
  * Get a pseudo-random value.
  *
- * This function generates pseudo-random numbers using the linear
- * congruential algorithm and 48-bit integer arithmetic, called twice
- * to generate a 64-bit value.
+ * The generator is not cryptographically secure.
+ *
+ * If called from lcore threads, this function is thread-safe.
  *
  * @return
  *   A pseudo-random value between 0 and (1<<64)-1.
  */
-static inline uint64_t
-rte_rand(void)
-{
-       uint64_t val;
-       val = (uint64_t)lrand48();
-       val <<= 32;
-       val += (uint64_t)lrand48();
-       return val;
-}
+uint64_t
+rte_rand(void);
+
+/**
+ * Generates a pseudo-random number with an upper bound.
+ *
+ * This function returns an uniformly distributed (unbiased) random
+ * number less than a user-specified maximum value.
+ *
+ * If called from lcore threads, this function is thread-safe.
+ *
+ * @param upper_bound
+ *   The upper bound of the generated number.
+ * @return
+ *   A pseudo-random value between 0 and (upper_bound-1).
+ */
+__rte_experimental
+uint64_t
+rte_rand_max(uint64_t upper_bound);
 
 #ifdef __cplusplus
 }