From ace5db70e858b8c114580e8b4f65a3994ee3c4e7 Mon Sep 17 00:00:00 2001
From: Hauke Petersen <hauke.petersen@fu-berlin.de>
Date: Thu, 22 Nov 2018 15:11:32 +0100
Subject: [PATCH] net/gnrc_netif: opt of _ipv6_get_iid()

---
 sys/net/gnrc/netif/gnrc_netif.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/sys/net/gnrc/netif/gnrc_netif.c b/sys/net/gnrc/netif/gnrc_netif.c
index f672ac4205..225663a850 100644
--- a/sys/net/gnrc/netif/gnrc_netif.c
+++ b/sys/net/gnrc/netif/gnrc_netif.c
@@ -826,6 +826,14 @@ int gnrc_netif_ipv6_get_iid(gnrc_netif_t *netif, eui64_t *eui64)
 {
 #if GNRC_NETIF_L2ADDR_MAXLEN > 0
     if (netif->flags & GNRC_NETIF_FLAGS_HAS_L2ADDR) {
+        /* the device driver abstraction should be able to provide us with the
+         * IPV6_IID, so we try this first */
+        int res = netif->dev->driver->get(netif->dev, NETOPT_IPV6_IID,
+                                          eui64, sizeof(eui64_t));
+        if (res == sizeof(eui64_t)) {
+            return 0;
+        }
+
         switch (netif->device_type) {
 #ifdef MODULE_NETDEV_ETH
             case NETDEV_TYPE_ETHERNET:
@@ -887,7 +895,8 @@ int gnrc_netif_ipv6_get_iid(gnrc_netif_t *netif, eui64_t *eui64)
                 break;
         }
     }
-#endif
+#endif /* GNRC_NETIF_L2ADDR_MAXLEN > 0 */
+
     return -ENOTSUP;
 }
 
-- 
GitLab