From 52ac53b4d987a74737d25902bf72e67e9c0043ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Nohlg=C3=A5rd?= Date: Sat, 27 Oct 2018 00:22:51 +0200 Subject: [PATCH] gnrc_netif_ieee802154: Provide LQI, RSSI in raw mode via netif_hdr Useful in sniffer situations to see the signal strength of a received packet. Also avoids the crash described in https://github.com/RIOT-OS/applications/pull/54 --- sys/net/gnrc/netif/gnrc_netif_ieee802154.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/sys/net/gnrc/netif/gnrc_netif_ieee802154.c b/sys/net/gnrc/netif/gnrc_netif_ieee802154.c index 7888c640bf..60036a4085 100644 --- a/sys/net/gnrc/netif/gnrc_netif_ieee802154.c +++ b/sys/net/gnrc/netif/gnrc_netif_ieee802154.c @@ -96,7 +96,23 @@ static gnrc_pktsnip_t *_recv(gnrc_netif_t *netif) gnrc_pktbuf_release(pkt); return NULL; } - if (!(netif->flags & GNRC_NETIF_FLAGS_RAWMODE)) { + if (netif->flags & GNRC_NETIF_FLAGS_RAWMODE) { + /* Raw mode, skip packet processing, but provide rx_info via + * GNRC_NETTYPE_NETIF */ + gnrc_pktsnip_t *netif_snip = gnrc_netif_hdr_build(NULL, 0, NULL, 0); + if (netif_snip == NULL) { + DEBUG("_recv_ieee802154: no space left in packet buffer\n"); + gnrc_pktbuf_release(pkt); + return NULL; + } + gnrc_netif_hdr_t *hdr = netif_snip->data; + hdr->lqi = rx_info.lqi; + hdr->rssi = rx_info.rssi; + hdr->if_pid = thread_getpid(); + LL_APPEND(pkt, netif_snip); + } + else { + /* Normal mode, try to parse the frame according to IEEE 802.15.4 */ gnrc_pktsnip_t *ieee802154_hdr, *netif_hdr; gnrc_netif_hdr_t *hdr; #if ENABLE_DEBUG