From ccf704bab83073b0094232f41a7839bc3754d23b Mon Sep 17 00:00:00 2001
From: Kaspar Schleiser <kaspar@schleiser.de>
Date: Thu, 31 Aug 2017 00:50:25 +0200
Subject: [PATCH] sys: random: use luid to generate random seed

---
 Makefile.dep              |  2 ++
 sys/auto_init/auto_init.c |  7 ++-----
 sys/random/Makefile       |  2 ++
 sys/random/seed.c         | 41 +++++++++++++++++++++++++++++++++++++++
 4 files changed, 47 insertions(+), 5 deletions(-)
 create mode 100644 sys/random/seed.c

diff --git a/Makefile.dep b/Makefile.dep
index 47f9d795bb..b5012a6f42 100644
--- a/Makefile.dep
+++ b/Makefile.dep
@@ -656,6 +656,8 @@ ifneq (,$(filter random,$(USEMODULE)))
   ifneq (,$(filter prng_tinymt32,$(USEMODULE)))
     USEMODULE += tinymt32
   endif
+
+  USEMODULE += luid
 endif
 
 ifneq (,$(filter openthread_contrib,$(USEMODULE)))
diff --git a/sys/auto_init/auto_init.c b/sys/auto_init/auto_init.c
index 726b673ab7..fa1248e3a6 100644
--- a/sys/auto_init/auto_init.c
+++ b/sys/auto_init/auto_init.c
@@ -80,10 +80,6 @@
 #include "net/fib.h"
 #endif
 
-#ifdef MODULE_PRNG
-#include "random.h"
-#endif
-
 #ifdef MODULE_GCOAP
 #include "net/gcoap.h"
 #endif
@@ -99,7 +95,8 @@
 void auto_init(void)
 {
 #ifdef MODULE_PRNG
-    random_init(0);
+    void auto_init_random(void);
+    auto_init_random();
 #endif
 #ifdef MODULE_XTIMER
     DEBUG("Auto init xtimer module.\n");
diff --git a/sys/random/Makefile b/sys/random/Makefile
index 372beceac5..1068de18a3 100644
--- a/sys/random/Makefile
+++ b/sys/random/Makefile
@@ -1,3 +1,5 @@
+SRC := seed.c
+
 BASE_MODULE := prng
 SUBMODULES := 1
 
diff --git a/sys/random/seed.c b/sys/random/seed.c
new file mode 100644
index 0000000000..b60f1285c7
--- /dev/null
+++ b/sys/random/seed.c
@@ -0,0 +1,41 @@
+/**
+ * Copyright (C) 2017 Kaspar Schleiser <kaspar@schleiser.de>
+ *
+ * This file is subject to the terms and conditions of the GNU Lesser
+ * General Public License v2.1. See the file LICENSE in the top level
+ * directory for more details.
+ */
+
+ /**
+ * @ingroup sys_random
+ * @{
+ * @file
+ *
+ * @brief PRNG seeding
+ *
+ * @author Kaspar Schleiser <kaspar@schleiser.de>
+ * @}
+ */
+
+#include <stdint.h>
+
+#include "log.h"
+#include "luid.h"
+#include "periph/cpuid.h"
+#include "random.h"
+
+#define ENABLE_DEBUG (0)
+#include "debug.h"
+
+void auto_init_random(void)
+{
+    uint32_t seed;
+#ifdef MODULE_PERIPH_CPUID
+    luid_get(&seed, 4);
+#else
+    LOG_WARNING("random: NO SEED AVAILABLE!\n");
+    seed = 1;
+#endif
+    DEBUG("random: using seed value %u\n", (unsigned)seed);
+    random_init(seed);
+}
-- 
GitLab