]> git.meshlink.io Git - meshlink/blobdiff - src/meshlink_internal.h
Replace rand() by xoshiro256** with per-mesh state.
[meshlink] / src / meshlink_internal.h
index a856180686de947c494e164ab47252a58aafb4cd..f32e87e65b18a20959b26dcd1404fc4a46473437 100644 (file)
@@ -32,6 +32,7 @@
 #include "meshlink_queue.h"
 #include "sockaddr.h"
 #include "sptps.h"
+#include "xoshiro.h"
 
 #include <pthread.h>
 
@@ -130,6 +131,7 @@ struct meshlink_handle {
        timeout_t periodictimer;
 
        struct connection_t *everyone;
+       uint64_t prng_state[4];
 
        int next_pit;
        int pits[10];
@@ -255,4 +257,12 @@ extern meshlink_log_cb_t global_log_cb;
 extern void handle_duplicate_node(meshlink_handle_t *mesh, struct node_t *n);
 extern void handle_network_change(meshlink_handle_t *mesh, bool online);
 
+/// Per-instance PRNG
+static inline int prng(meshlink_handle_t *mesh, uint64_t max) {
+       return xoshiro(mesh->prng_state) % max;
+}
+
+/// Fudge value of ~0.1 seconds, in microseconds.
+static const unsigned int TIMER_FUDGE = 0x20000;
+
 #endif