Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
void byteorder_test_mem_swap(void)
{
	uint8_t buf_orig_1[8] = { 0x00, 0x01, 0x02, 0x03,
				  0x04, 0x05, 0x06, 0x07 };
	uint8_t buf_orig_2[11] = { 0x00, 0x01, 0x02, 0x03,
				   0x04, 0x05, 0x06, 0x07,
				   0x08, 0x09, 0xa0 };
	uint8_t buf_chk_1[8] = { 0x07, 0x06, 0x05, 0x04,
				 0x03, 0x02, 0x01, 0x00 };
	uint8_t buf_chk_2[11] = { 0xa0, 0x09, 0x08, 0x07,
				  0x06, 0x05, 0x04, 0x03,
				  0x02, 0x01, 0x00 };

	sys_mem_swap(buf_orig_1, 8);
	assert_true((memcmp(buf_orig_1, buf_chk_1, 8) == 0),
		    "Swapping buffer failed");

	sys_mem_swap(buf_orig_2, 11);
	assert_true((memcmp(buf_orig_2, buf_chk_2, 11) == 0),
		    "Swapping buffer failed");
}