[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