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); }