From 1ea70be0e86b88a2d1bd2835231ad7f5760a16c4 Mon Sep 17 00:00:00 2001 From: Martine Lenders Date: Sat, 7 Mar 2015 16:53:52 +0100 Subject: [PATCH] netif: add convinience function for header building --- sys/include/net/ng_netif/hdr.h | 41 ++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/sys/include/net/ng_netif/hdr.h b/sys/include/net/ng_netif/hdr.h index 09904f15ff50..a7510b2a0836 100644 --- a/sys/include/net/ng_netif/hdr.h +++ b/sys/include/net/ng_netif/hdr.h @@ -15,6 +15,7 @@ * @brief Generic network interface header * * @author Hauke Petersen + * @author Martine Lenders */ #ifndef NETIF_HDR_H_ @@ -24,6 +25,8 @@ #include #include "kernel.h" +#include "net/ng_pkt.h" +#include "net/ng_pktbuf.h" #ifdef __cplusplus extern "C" { @@ -134,6 +137,44 @@ static inline void ng_netif_hdr_set_dst_addr(ng_netif_hdr_t *hdr, uint8_t *addr, memcpy(((uint8_t *)(hdr + 1)) + hdr->src_l2addr_len, addr, addr_len); } +/** + * @brief Builds a generic network interface header for sending and + * adds it to the packet buffer. + * + * @param[in] src Source address for the header. Can be NULL if not + * known or required. + * @param[in] src_len Length of @p src. Can be 0 if not known or required. + * @param[in] dst Destination address for the header. Can be NULL if not + * known or required. + * @param[in] dst_len Length of @p dst. Can be 0 if not known or required. + * + * @return The generic network layer header on success. + * @return NULL on error. + */ +static inline ng_pktsnip_t *ng_netif_hdr_build(uint8_t *src, uint8_t src_len, + uint8_t *dst, uint8_t dst_len) +{ + ng_pktsnip_t *pkt = ng_pktbuf_add(NULL, NULL, + sizeof(ng_netif_hdr_t) + src_len + dst_len, + NG_NETTYPE_NETIF); + + if (pkt == NULL) { + return NULL; + } + + ng_netif_hdr_init(pkt->data, src_len, dst_len); + + if (src != NULL && src_len > 0) { + ng_netif_hdr_set_src_addr(pkt->data, src, src_len); + } + + if (dst != NULL && dst_len > 0) { + ng_netif_hdr_set_dst_addr(pkt->data, dst, dst_len); + } + + return pkt; +} + #ifdef __cplusplus } #endif