net/cnxk: remove restriction on VF for PFC config
[dpdk.git] / lib / eal / include / rte_random.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2010-2014 Intel Corporation
3  */
4
5 #ifndef _RTE_RANDOM_H_
6 #define _RTE_RANDOM_H_
7
8 /**
9  * @file
10  *
11  * Pseudo-random Generators in RTE
12  */
13
14 #ifdef __cplusplus
15 extern "C" {
16 #endif
17
18 #include <stdint.h>
19
20 #include <rte_compat.h>
21
22 /**
23  * Seed the pseudo-random generator.
24  *
25  * The generator is automatically seeded by the EAL init with a timer
26  * value. It may need to be re-seeded by the user with a real random
27  * value.
28  *
29  * This function is not multi-thread safe in regards to other
30  * rte_srand() calls, nor is it in relation to concurrent rte_rand()
31  * calls.
32  *
33  * @param seedval
34  *   The value of the seed.
35  */
36 void
37 rte_srand(uint64_t seedval);
38
39 /**
40  * Get a pseudo-random value.
41  *
42  * The generator is not cryptographically secure.
43  *
44  * If called from lcore threads, this function is thread-safe.
45  *
46  * @return
47  *   A pseudo-random value between 0 and (1<<64)-1.
48  */
49 uint64_t
50 rte_rand(void);
51
52 /**
53  * Generates a pseudo-random number with an upper bound.
54  *
55  * This function returns an uniformly distributed (unbiased) random
56  * number less than a user-specified maximum value.
57  *
58  * If called from lcore threads, this function is thread-safe.
59  *
60  * @param upper_bound
61  *   The upper bound of the generated number.
62  * @return
63  *   A pseudo-random value between 0 and (upper_bound-1).
64  */
65 uint64_t
66 rte_rand_max(uint64_t upper_bound);
67
68 /**
69  * @warning
70  * @b EXPERIMENTAL: this API may change without prior notice
71  *
72  * Generates a pseudo-random floating point number.
73  *
74  * This function returns a non-negative double-precision floating random
75  * number uniformly distributed over the interval [0.0, 1.0).
76  *
77  * The generator is not cryptographically secure.
78  * If called from lcore threads, this function is thread-safe.
79  *
80  * @return
81  *   A pseudo-random value between 0 and 1.0.
82  */
83 __rte_experimental
84 double rte_drand(void);
85
86 #ifdef __cplusplus
87 }
88 #endif
89
90
91 #endif /* _RTE_RANDOM_H_ */