[mc1322x] [PATCH 2/4] this forces a header that contiki is expecting.

Mariano Alvira mar at devl.org
Mon Mar 29 19:52:28 EDT 2010


---
 net/mac802154/dev.c |   67 +++++++++++++++++---------------------------------
 1 files changed, 23 insertions(+), 44 deletions(-)

diff --git a/net/mac802154/dev.c b/net/mac802154/dev.c
index 9f6f655..6f8bd90 100644
--- a/net/mac802154/dev.c
+++ b/net/mac802154/dev.c
@@ -263,59 +263,38 @@ static int ieee802154_header_create(struct sk_buff *skb,
 	if (!daddr)
 		return -EINVAL;
 
-	if (!saddr) {
+	/* force long address mode */
+	if(!saddr) {
 		spin_lock_bh(&priv->mib_lock);
-		if (priv->short_addr == IEEE802154_ADDR_BROADCAST ||
-		    priv->short_addr == IEEE802154_ADDR_UNDEF ||
-		    priv->pan_id == IEEE802154_PANID_BROADCAST) {
-			dev_addr.addr_type = IEEE802154_ADDR_LONG;
-			memcpy(dev_addr.hwaddr, dev->dev_addr,
-					IEEE802154_ADDR_LEN);
-		} else {
-			dev_addr.addr_type = IEEE802154_ADDR_SHORT;
-			dev_addr.short_addr = priv->short_addr;
-		}
+		dev_addr.addr_type = IEEE802154_ADDR_LONG;
+		memcpy(dev_addr.hwaddr, dev->dev_addr,
+		       IEEE802154_ADDR_LEN);
+		spin_unlock_bh(&priv->mib_lock);
 
-		dev_addr.pan_id = priv->pan_id;
 		saddr = &dev_addr;
-
-		spin_unlock_bh(&priv->mib_lock);
 	}
 
-	if (daddr->addr_type != IEEE802154_ADDR_NONE) {
-		fc |= (daddr->addr_type << IEEE802154_FC_DAMODE_SHIFT);
-
-		head[pos++] = daddr->pan_id & 0xff;
-		head[pos++] = daddr->pan_id >> 8;
-
-		if (daddr->addr_type == IEEE802154_ADDR_SHORT) {
-			head[pos++] = daddr->short_addr & 0xff;
-			head[pos++] = daddr->short_addr >> 8;
-		} else {
-			ieee802154_haddr_copy_swap(head + pos, daddr->hwaddr);
-			pos += IEEE802154_ADDR_LEN;
-		}
+ 	if (daddr->addr_type != IEEE802154_ADDR_NONE) {
+		fc |= (IEEE802154_ADDR_SHORT << IEEE802154_FC_DAMODE_SHIFT);
+		
+		/* set in contiki */
+ 		head[pos++] = 0xcd;
+		head[pos++] = 0xab;
+		
+		/* FIXME: broadcasts are always short */
+		
+		head[pos++] = daddr->short_addr & 0xff;
+		head[pos++] = daddr->short_addr >> 8;
+		
 	}
 
 	if (saddr->addr_type != IEEE802154_ADDR_NONE) {
-		fc |= (saddr->addr_type << IEEE802154_FC_SAMODE_SHIFT);
-
-		if ((saddr->pan_id == daddr->pan_id) &&
-		    (saddr->pan_id != IEEE802154_PANID_BROADCAST))
-			/* PANID compression/ intra PAN */
-			fc |= IEEE802154_FC_INTRA_PAN;
-		else {
-			head[pos++] = saddr->pan_id & 0xff;
-			head[pos++] = saddr->pan_id >> 8;
-		}
+		fc |= (IEEE802154_ADDR_LONG << IEEE802154_FC_SAMODE_SHIFT);
 
-		if (saddr->addr_type == IEEE802154_ADDR_SHORT) {
-			head[pos++] = saddr->short_addr & 0xff;
-			head[pos++] = saddr->short_addr >> 8;
-		} else {
-			ieee802154_haddr_copy_swap(head + pos, saddr->hwaddr);
-			pos += IEEE802154_ADDR_LEN;
-		}
+		fc |= IEEE802154_FC_INTRA_PAN;
+
+		ieee802154_haddr_copy_swap(head + pos, saddr->hwaddr);
+		pos += IEEE802154_ADDR_LEN;	     
 	}
 
 	head[0] = fc;
-- 
1.7.0.3




More information about the mc1322x mailing list