static enum net_verdict net_bt_recv(struct net_if *iface, struct net_buf *buf) { uint32_t src; uint32_t dst; NET_DBG("iface %p buf %p len %u", iface, buf, net_buf_frags_len(buf)); /* Uncompress will drop the current fragment. Buf ll src/dst address * will then be wrong and must be updated according to the new fragment. */ src = net_nbuf_ll_src(buf)->addr ? net_nbuf_ll_src(buf)->addr - net_nbuf_ll(buf) : 0; dst = net_nbuf_ll_dst(buf)->addr ? net_nbuf_ll_dst(buf)->addr - net_nbuf_ll(buf) : 0; if (!net_6lo_uncompress(buf)) { NET_DBG("Packet decompression failed"); return NET_DROP; } net_nbuf_ll_src(buf)->addr = src ? net_nbuf_ll(buf) + src : NULL; net_nbuf_ll_dst(buf)->addr = dst ? net_nbuf_ll(buf) + dst : NULL; return NET_CONTINUE; }
static enum net_verdict net_bt_recv(struct net_if *iface, struct net_pkt *pkt) { NET_DBG("iface %p pkt %p len %zu", iface, pkt, net_pkt_get_len(pkt)); if (!net_6lo_uncompress(pkt)) { NET_DBG("Packet decompression failed"); return NET_DROP; } return NET_CONTINUE; }
static inline enum net_verdict ieee802154_manage_recv_packet(struct net_if *iface, struct net_pkt *pkt) { enum net_verdict verdict = NET_CONTINUE; u32_t src; u32_t dst; /* Upper IP stack expects the link layer address to be in * big endian format so we must swap it here. */ if (net_pkt_ll_src(pkt)->addr && net_pkt_ll_src(pkt)->len == IEEE802154_EXT_ADDR_LENGTH) { sys_mem_swap(net_pkt_ll_src(pkt)->addr, net_pkt_ll_src(pkt)->len); } if (net_pkt_ll_dst(pkt)->addr && net_pkt_ll_dst(pkt)->len == IEEE802154_EXT_ADDR_LENGTH) { sys_mem_swap(net_pkt_ll_dst(pkt)->addr, net_pkt_ll_dst(pkt)->len); } /** Uncompress will drop the current fragment. Pkt ll src/dst address * will then be wrong and must be updated according to the new fragment. */ src = net_pkt_ll_src(pkt)->addr ? net_pkt_ll_src(pkt)->addr - net_pkt_ll(pkt) : 0; dst = net_pkt_ll_dst(pkt)->addr ? net_pkt_ll_dst(pkt)->addr - net_pkt_ll(pkt) : 0; #ifdef CONFIG_NET_L2_IEEE802154_FRAGMENT verdict = ieee802154_reassemble(pkt); if (verdict == NET_DROP) { goto out; } #else if (!net_6lo_uncompress(pkt)) { NET_DBG("Packet decompression failed"); verdict = NET_DROP; goto out; } #endif net_pkt_ll_src(pkt)->addr = src ? net_pkt_ll(pkt) + src : NULL; net_pkt_ll_dst(pkt)->addr = dst ? net_pkt_ll(pkt) + dst : NULL; pkt_hexdump(pkt, false); out: return verdict; }