Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 58ef67c3 authored by Tony Cheneau's avatar Tony Cheneau Committed by David S. Miller
Browse files

6lowpan: use short IEEE 802.15.4 addresses for broadcast destination



The IEEE 802.15.4 standard uses the 0xFFFF short address (2 bytes) for message
broadcasting.

Signed-off-by: default avatarTony Cheneau <tony.cheneau@amnesiak.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent cf692061
Loading
Loading
Loading
Loading
+15 −8
Original line number Diff line number Diff line
@@ -572,21 +572,28 @@ static int lowpan_header_create(struct sk_buff *skb,
	 * this isn't implemented in mainline yet, so currently we assign 0xff
	 */
	{
		mac_cb(skb)->flags = IEEE802154_FC_TYPE_DATA;

		/* prepare wpan address data */
		sa.addr_type = IEEE802154_ADDR_LONG;
		sa.pan_id = 0xff;
		memcpy(&(sa.hwaddr), saddr, 8);

		da.addr_type = IEEE802154_ADDR_LONG;
		da.pan_id = 0xff;

		/*
		 * if the destination address is the broadcast address, use the
		 * corresponding short address
		 */
		if (lowpan_is_addr_broadcast(daddr)) {
			da.addr_type = IEEE802154_ADDR_SHORT;
			da.short_addr = IEEE802154_ADDR_BROADCAST;
		} else {
			da.addr_type = IEEE802154_ADDR_LONG;
			memcpy(&(da.hwaddr), daddr, 8);
		memcpy(&(sa.hwaddr), saddr, 8);

		mac_cb(skb)->flags = IEEE802154_FC_TYPE_DATA;

		/* request acknowledgment when possible */
		if (!lowpan_is_addr_broadcast(daddr))
			/* request acknowledgment */
			mac_cb(skb)->flags |= MAC_CB_FLAG_ACKREQ;
		}

		return dev_hard_header(skb, lowpan_dev_info(dev)->real_dev,
				type, (void *)&da, (void *)&sa, skb->len);