diff --git a/sys/include/net/gnrc/netif/hdr.h b/sys/include/net/gnrc/netif/hdr.h
index 7ff617de0d6c54c2512445ed2f80eda2107ba8af..76a2bcb45ba769befcec128cbcbcf3d4c535adf1 100644
--- a/sys/include/net/gnrc/netif/hdr.h
+++ b/sys/include/net/gnrc/netif/hdr.h
@@ -26,6 +26,7 @@
 
 #include "net/gnrc/pkt.h"
 #include "net/gnrc/pktbuf.h"
+#include "net/gnrc/netif.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -212,6 +213,23 @@ static inline void gnrc_netif_hdr_set_dst_addr(gnrc_netif_hdr_t *hdr, uint8_t *a
  */
 gnrc_pktsnip_t *gnrc_netif_hdr_build(uint8_t *src, uint8_t src_len, uint8_t *dst, uint8_t dst_len);
 
+/**
+ * @brief   Convenience function to get the corresponding interface struct for
+ *          a given interface header
+ *
+ * @pre `hdr != NULL`
+ *
+ * @param[in] hdr   Header to read interface from.
+ *
+ * @return  The @ref gnrc_netif_t representation of the interface on success
+ * @return  NULL, on error.
+ */
+static inline gnrc_netif_t *gnrc_netif_hdr_get_netif(const gnrc_netif_hdr_t *hdr)
+{
+    assert(hdr != NULL);
+    return gnrc_netif_get_by_pid(hdr->if_pid);
+}
+
 /**
  * @brief   Outputs a generic interface header to stdout.
  *
diff --git a/sys/net/gnrc/network_layer/icmpv6/error/gnrc_icmpv6_error.c b/sys/net/gnrc/network_layer/icmpv6/error/gnrc_icmpv6_error.c
index cb8b6b588a1741acce0723a17aa04185b50c7b6a..b2f7f308c0825959db4be01194d3312b1f8f3f7f 100644
--- a/sys/net/gnrc/network_layer/icmpv6/error/gnrc_icmpv6_error.c
+++ b/sys/net/gnrc/network_layer/icmpv6/error/gnrc_icmpv6_error.c
@@ -49,8 +49,7 @@ static size_t _fit(const gnrc_pktsnip_t *orig_pkt)
                      sizeof(ipv6_hdr_t);
 
     if (netif_hdr) {
-        gnrc_netif_hdr_t *data = netif_hdr->data;
-        gnrc_netif_t *netif = gnrc_netif_get_by_pid(data->if_pid);
+        gnrc_netif_t *netif = gnrc_netif_hdr_get_netif(netif_hdr->data);
 
         pkt_len -= netif_hdr->size;
         DEBUG("gnrc_icmpv6_error: fitting to MTU of iface %u (%u)\n",
diff --git a/sys/net/gnrc/network_layer/ipv6/gnrc_ipv6.c b/sys/net/gnrc/network_layer/ipv6/gnrc_ipv6.c
index f21a10f8b301ef2b26cb67baec980f64592135fe..64f6f621969e412222ac3d6810a9879241ed3ab0 100644
--- a/sys/net/gnrc/network_layer/ipv6/gnrc_ipv6.c
+++ b/sys/net/gnrc/network_layer/ipv6/gnrc_ipv6.c
@@ -639,7 +639,7 @@ static void _send(gnrc_pktsnip_t *pkt, bool prep_hdr)
          * higher layers wants to provide flags to the interface ) */
         const gnrc_netif_hdr_t *netif_hdr = pkt->data;
 
-        netif = gnrc_netif_get_by_pid(((gnrc_netif_hdr_t *)pkt->data)->if_pid);
+        netif = gnrc_netif_hdr_get_netif(pkt->data);
         /* discard broadcast and multicast flags because those could be
          * potentially wrong (dst is later checked to assure that multicast is
          * set if dst is a multicast address) */
diff --git a/sys/net/gnrc/network_layer/sixlowpan/gnrc_sixlowpan.c b/sys/net/gnrc/network_layer/sixlowpan/gnrc_sixlowpan.c
index 0aeb901220fd886ca11f629a38334a7a2b1b4171..258a292a38177e3438f07ed81d10274d9a667d72 100644
--- a/sys/net/gnrc/network_layer/sixlowpan/gnrc_sixlowpan.c
+++ b/sys/net/gnrc/network_layer/sixlowpan/gnrc_sixlowpan.c
@@ -246,7 +246,6 @@ static inline bool _add_uncompr_disp(gnrc_pktsnip_t *pkt)
 
 static void _send(gnrc_pktsnip_t *pkt)
 {
-    gnrc_netif_hdr_t *hdr;
     gnrc_pktsnip_t *tmp;
     gnrc_netif_t *netif;
     /* datagram_size: pure IPv6 packet without 6LoWPAN dispatches or compression */
@@ -272,8 +271,7 @@ static void _send(gnrc_pktsnip_t *pkt)
         return;
     }
     pkt = tmp;
-    hdr = pkt->data;
-    netif = gnrc_netif_get_by_pid(hdr->if_pid);
+    netif = gnrc_netif_hdr_get_netif(pkt->data);
     datagram_size = gnrc_pkt_len(pkt->next);
 
     if (netif == NULL) {
diff --git a/sys/net/gnrc/network_layer/sixlowpan/iphc/gnrc_sixlowpan_iphc.c b/sys/net/gnrc/network_layer/sixlowpan/iphc/gnrc_sixlowpan_iphc.c
index a765cb8bf530428ae539cf30e83831ea38f0821b..c06ceaef19329730c5fab803c36250d588240e54 100644
--- a/sys/net/gnrc/network_layer/sixlowpan/iphc/gnrc_sixlowpan_iphc.c
+++ b/sys/net/gnrc/network_layer/sixlowpan/iphc/gnrc_sixlowpan_iphc.c
@@ -1011,7 +1011,7 @@ void gnrc_sixlowpan_iphc_send(gnrc_pktsnip_t *pkt, void *ctx, unsigned page)
     dispatch->next = pkt->next;
     pkt->next = dispatch;
 
-    gnrc_netif_t *netif = gnrc_netif_get_by_pid(netif_hdr->if_pid);
+    gnrc_netif_t *netif = gnrc_netif_hdr_get_netif(netif_hdr);
     assert(netif != NULL);
     gnrc_sixlowpan_multiplex_by_size(pkt, orig_datagram_size, netif, page);
 }