From a4358bfdeea19f34bd459a83e9027d72b25bf204 Mon Sep 17 00:00:00 2001
From: haukepetersen <hauke.petersen@fu-berlin.de>
Date: Wed, 29 Apr 2015 21:17:07 +0200
Subject: [PATCH] sys/auto-init: added mechanism to init network ifs

---
 sys/Makefile.include           |  3 +++
 sys/auto_init/Makefile         |  2 ++
 sys/auto_init/Makefile.include | 13 +++++++++++++
 sys/auto_init/auto_init.c      |  5 +++++
 sys/include/auto_init.h        | 22 +++++++++++++++++++++-
 5 files changed, 44 insertions(+), 1 deletion(-)
 create mode 100644 sys/auto_init/Makefile.include

diff --git a/sys/Makefile.include b/sys/Makefile.include
index ee40a88f82..ca3bce1556 100644
--- a/sys/Makefile.include
+++ b/sys/Makefile.include
@@ -1,3 +1,6 @@
+ifneq (,$(filter auto_init,$(USEMODULE)))
+    include $(RIOTBASE)/sys/auto_init/Makefile.include
+endif
 ifneq (,$(filter nomac,$(USEMODULE)))
     USEMODULE_INCLUDES += $(RIOTBASE)/sys/net/include
 endif
diff --git a/sys/auto_init/Makefile b/sys/auto_init/Makefile
index 6579f361bc..68b09798d5 100644
--- a/sys/auto_init/Makefile
+++ b/sys/auto_init/Makefile
@@ -6,4 +6,6 @@ ifneq (,$(filter nomac,$(USEMODULE)))
 	INCLUDES += -I$(RIOTBASE)/sys/net/include/
 endif
 
+DIRS += $(AUTO_INIT_MODULES)
+
 include $(RIOTBASE)/Makefile.base
diff --git a/sys/auto_init/Makefile.include b/sys/auto_init/Makefile.include
new file mode 100644
index 0000000000..6a86833666
--- /dev/null
+++ b/sys/auto_init/Makefile.include
@@ -0,0 +1,13 @@
+# try to find the ng_netif auto init implementation in the application or in
+# the board, respectively. If it is not found, nothing is called.
+ifneq (,$(filter ng_netif,$(USEMODULE)))
+  ifneq (,$(wildcard $(APPDIR)/auto_init_ng_netif/*))
+    export AUTO_INIT_MODULES += $(APPDIR)/auto_init_ng_netif
+    export USEMODULE += auto_init_ng_netif
+  else
+    ifneq (,$(wildcard $(RIOTBOARD)/$(BOARD)/auto_init_ng_netif/*))
+      export AUTO_INIT_MODULES += $(RIOTBOARD)/$(BOARD)/auto_init_ng_netif
+      export USEMODULE += auto_init_ng_netif
+    endif
+  endif
+endif
diff --git a/sys/auto_init/auto_init.c b/sys/auto_init/auto_init.c
index 4e9010538f..c45879dd54 100644
--- a/sys/auto_init/auto_init.c
+++ b/sys/auto_init/auto_init.c
@@ -12,6 +12,7 @@
  * @file    auto_init_c
  * @brief   initializes any used module that has a trivial init function
  * @author  Oliver Hahm <oliver.hahm@inria.fr>
+ * @author  Hauke Petersen <hauke.petersen@fu-berlin.de>
  * @}
  */
 #include <stdint.h>
@@ -304,4 +305,8 @@ void auto_init(void)
     DEBUG("Auto init UDP module.\n");
     ng_udp_init();
 #endif
+#ifdef MODULE_AUTO_INIT_NG_NETIF
+    DEBUG("Auto init network interfaces.\n");
+    auto_init_ng_netif();
+#endif
 }
diff --git a/sys/include/auto_init.h b/sys/include/auto_init.h
index 93d4d30a82..d27e608b3a 100644
--- a/sys/include/auto_init.h
+++ b/sys/include/auto_init.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010 Freie Universität Berlin
+ * Copyright (C) 2010,2015 Freie Universität Berlin
  * Copyright (C) 2010 Kaspar Schleiser
  * Copyright (C) 2013 INRIA
  *
@@ -27,6 +27,10 @@
  * @{
  *
  * @file        auto_init.h
+ *
+ * @author      Kaspar Schleiser <kaspar@schleiser.de>
+ * @author      Oliver Hahm <oliver.hahm@inria.fr>
+ * @author      Hauke Petersen <hauke.petersen@fu-berlin.de>
  */
 
 #ifndef AUTO_INIT_H
@@ -45,6 +49,22 @@ extern "C" {
  */
 void auto_init(void);
 
+/**
+ * @brief Initialize network interfaces and register them with ng_netif
+ *
+ *        This function must be implemented in the board or in the application,
+ *        in a subfolder that must be named auto_init_ng_netif
+ *        This function is called under two conditions:
+ *          1. the ng_netif module is used (USEMODULE contains ng_netif)
+ *          2. the board or the application contains a subfolder called
+ *             auto_init_ng_netif
+ *        If the board and the application both contain the mentioned subfolder,
+ *        the contents from the applications subfolder have a higher priority
+ *        and will be compiled and linked, while the board's subfolder is then
+ *        ignored.
+ */
+void auto_init_ng_netif(void);
+
 #ifdef __cplusplus
 }
 #endif
-- 
GitLab