struct at86rf230_local *lp = dev->priv;
 
        if (changed & IEEE802515_AFILT_SADDR_CHANGED) {
+               u16 addr = le16_to_cpu(filt->short_addr);
+
                dev_vdbg(&lp->spi->dev,
                        "at86rf230_set_hw_addr_filt called for saddr\n");
-               __at86rf230_write(lp, RG_SHORT_ADDR_0, filt->short_addr);
-               __at86rf230_write(lp, RG_SHORT_ADDR_1, filt->short_addr >> 8);
+               __at86rf230_write(lp, RG_SHORT_ADDR_0, addr);
+               __at86rf230_write(lp, RG_SHORT_ADDR_1, addr >> 8);
        }
 
        if (changed & IEEE802515_AFILT_PANID_CHANGED) {
+               u16 pan = le16_to_cpu(filt->pan_id);
+
                dev_vdbg(&lp->spi->dev,
                        "at86rf230_set_hw_addr_filt called for pan id\n");
-               __at86rf230_write(lp, RG_PAN_ID_0, filt->pan_id);
-               __at86rf230_write(lp, RG_PAN_ID_1, filt->pan_id >> 8);
+               __at86rf230_write(lp, RG_PAN_ID_0, pan);
+               __at86rf230_write(lp, RG_PAN_ID_1, pan >> 8);
        }
 
        if (changed & IEEE802515_AFILT_IEEEADDR_CHANGED) {
+               u8 i, addr[8];
+
+               memcpy(addr, &filt->ieee_addr, 8);
                dev_vdbg(&lp->spi->dev,
                        "at86rf230_set_hw_addr_filt called for IEEE addr\n");
-               at86rf230_write_subreg(lp, SR_IEEE_ADDR_0, filt->ieee_addr[7]);
-               at86rf230_write_subreg(lp, SR_IEEE_ADDR_1, filt->ieee_addr[6]);
-               at86rf230_write_subreg(lp, SR_IEEE_ADDR_2, filt->ieee_addr[5]);
-               at86rf230_write_subreg(lp, SR_IEEE_ADDR_3, filt->ieee_addr[4]);
-               at86rf230_write_subreg(lp, SR_IEEE_ADDR_4, filt->ieee_addr[3]);
-               at86rf230_write_subreg(lp, SR_IEEE_ADDR_5, filt->ieee_addr[2]);
-               at86rf230_write_subreg(lp, SR_IEEE_ADDR_6, filt->ieee_addr[1]);
-               at86rf230_write_subreg(lp, SR_IEEE_ADDR_7, filt->ieee_addr[0]);
+               for (i = 0; i < 8; i++)
+                       __at86rf230_write(lp, RG_IEEE_ADDR_0 + i, addr[i]);
        }
 
        if (changed & IEEE802515_AFILT_PANC_CHANGED) {
 
  *
  * Return the ID of the PAN from the PIB.
  */
-static u16 fake_get_pan_id(const struct net_device *dev)
+static __le16 fake_get_pan_id(const struct net_device *dev)
 {
        BUG_ON(dev->type != ARPHRD_IEEE802154);
 
-       return 0xeba1;
+       return cpu_to_le16(0xeba1);
 }
 
 /**
  * device. If the device has not yet had a short address assigned
  * then this should return 0xFFFF to indicate a lack of association.
  */
-static u16 fake_get_short_addr(const struct net_device *dev)
+static __le16 fake_get_short_addr(const struct net_device *dev)
 {
        BUG_ON(dev->type != ARPHRD_IEEE802154);
 
-       return 0x1;
+       return cpu_to_le16(0x1);
 }
 
 /**
  *       802.15.4-2006 document.
  */
 static int fake_assoc_resp(struct net_device *dev,
-               struct ieee802154_addr_sa *addr, u16 short_addr, u8 status)
+               struct ieee802154_addr_sa *addr, __le16 short_addr, u8 status)
 {
        return 0;
 }
        switch (cmd) {
        case SIOCGIFADDR:
                /* FIXME: fixed here, get from device IRL */
-               pan_id = fake_get_pan_id(dev);
-               short_addr = fake_get_short_addr(dev);
+               pan_id = le16_to_cpu(fake_get_pan_id(dev));
+               short_addr = le16_to_cpu(fake_get_short_addr(dev));
                if (pan_id == IEEE802154_PANID_BROADCAST ||
                    short_addr == IEEE802154_ADDR_BROADCAST)
                        return -EADDRNOTAVAIL;
 
        if (changed & IEEE802515_AFILT_SADDR_CHANGED) {
                /* Short Addr */
                u8 addrh, addrl;
-               addrh = filt->short_addr >> 8 & 0xff;
-               addrl = filt->short_addr & 0xff;
+               addrh = le16_to_cpu(filt->short_addr) >> 8 & 0xff;
+               addrl = le16_to_cpu(filt->short_addr) & 0xff;
 
                write_short_reg(devrec, REG_SADRH, addrh);
                write_short_reg(devrec, REG_SADRL, addrl);
 
        if (changed & IEEE802515_AFILT_IEEEADDR_CHANGED) {
                /* Device Address */
-               int i;
+               u8 i, addr[8];
+
+               memcpy(addr, &filt->ieee_addr, 8);
                for (i = 0; i < 8; i++)
-                       write_short_reg(devrec, REG_EADR0+i,
-                                       filt->ieee_addr[7-i]);
+                       write_short_reg(devrec, REG_EADR0 + i, addr[i]);
 
 #ifdef DEBUG
                printk(KERN_DEBUG "Set long addr to: ");
                for (i = 0; i < 8; i++)
-                       printk("%02hhx ", filt->ieee_addr[i]);
+                       printk("%02hhx ", addr[7 - i]);
                printk(KERN_DEBUG "\n");
 #endif
        }
        if (changed & IEEE802515_AFILT_PANID_CHANGED) {
                /* PAN ID */
                u8 panidl, panidh;
-               panidh = filt->pan_id >> 8 & 0xff;
-               panidl = filt->pan_id & 0xff;
+               panidh = le16_to_cpu(filt->pan_id) >> 8 & 0xff;
+               panidl = le16_to_cpu(filt->pan_id) & 0xff;
                write_short_reg(devrec, REG_PANIDH, panidh);
                write_short_reg(devrec, REG_PANIDL, panidl);
 
 
                        u8 channel, u8 page, u8 cap);
        int (*assoc_resp)(struct net_device *dev,
                        struct ieee802154_addr_sa *addr,
-                       u16 short_addr, u8 status);
+                       __le16 short_addr, u8 status);
        int (*disassoc_req)(struct net_device *dev,
                        struct ieee802154_addr_sa *addr,
                        u8 reason);
         * FIXME: these should become the part of PIB/MIB interface.
         * However we still don't have IB interface of any kind
         */
-       u16 (*get_pan_id)(const struct net_device *dev);
-       u16 (*get_short_addr)(const struct net_device *dev);
+       __le16 (*get_pan_id)(const struct net_device *dev);
+       __le16 (*get_short_addr)(const struct net_device *dev);
        u8 (*get_dsn)(const struct net_device *dev);
 };
 
 
                                 * devices across independent networks.
                                 */
        __le16  short_addr;
-       u8      ieee_addr[IEEE802154_ADDR_LEN];
+       __le64  ieee_addr;
        u8      pan_coord;
 };
 
        int             (*set_hw_addr_filt)(struct ieee802154_dev *dev,
                                          struct ieee802154_hw_addr_filt *filt,
                                            unsigned long changed);
-       int             (*ieee_addr)(struct ieee802154_dev *dev,
-                                    u8 addr[IEEE802154_ADDR_LEN]);
+       int             (*ieee_addr)(struct ieee802154_dev *dev, __le64 addr);
        int             (*set_txpower)(struct ieee802154_dev *dev, int db);
        int             (*set_lbt)(struct ieee802154_dev *dev, bool on);
        int             (*set_cca_mode)(struct ieee802154_dev *dev, u8 mode);
 
  * Note: This is in section 7.3.2 of the IEEE 802.15.4 document.
  */
 int ieee802154_nl_assoc_confirm(struct net_device *dev,
-               u16 short_addr, u8 status);
+               __le16 short_addr, u8 status);
 
 /**
  * ieee802154_nl_disassoc_indic - Notify userland of disassociation.
  * Note: This API cannot indicate a beacon frame for a coordinator
  *       operating in long addressing mode.
  */
-int ieee802154_nl_beacon_indic(struct net_device *dev, u16 panid,
-               u16 coord_addr);
+int ieee802154_nl_beacon_indic(struct net_device *dev, __le16 panid,
+               __le16 coord_addr);
 
 /**
  * ieee802154_nl_start_confirm - Notify userland of completion of start.
 
 
        /* prepare wpan address data */
        sa.addr_type = IEEE802154_ADDR_LONG;
-       sa.pan_id = ieee802154_mlme_ops(dev)->get_pan_id(dev);
+       sa.pan_id = le16_to_cpu(ieee802154_mlme_ops(dev)->get_pan_id(dev));
 
        memcpy(&(sa.hwaddr), saddr, 8);
        /* intra-PAN communications */
-       da.pan_id = ieee802154_mlme_ops(dev)->get_pan_id(dev);
+       da.pan_id = sa.pan_id;
 
        /* if the destination address is the broadcast address, use the
         * corresponding short address
        return ieee802154_mlme_ops(real_dev)->get_phy(real_dev);
 }
 
-static u16 lowpan_get_pan_id(const struct net_device *dev)
+static __le16 lowpan_get_pan_id(const struct net_device *dev)
 {
        struct net_device *real_dev = lowpan_dev_info(dev)->real_dev;
        return ieee802154_mlme_ops(real_dev)->get_pan_id(real_dev);
 }
 
-static u16 lowpan_get_short_addr(const struct net_device *dev)
+static __le16 lowpan_get_short_addr(const struct net_device *dev)
 {
        struct net_device *real_dev = lowpan_dev_info(dev)->real_dev;
        return ieee802154_mlme_ops(real_dev)->get_short_addr(real_dev);
 
 6lowpan-y := 6lowpan_rtnl.o reassembly.o
 ieee802154-y := netlink.o nl-mac.o nl-phy.o nl_policy.o wpan-class.o
 af_802154-y := af_ieee802154.o raw.o dgram.o
+
+ccflags-y += -D__CHECK_ENDIAN__
 
 {
        struct net_device *dev = NULL;
        struct net_device *tmp;
-       u16 pan_id, short_addr;
+       __le16 pan_id, short_addr;
 
        switch (addr->addr_type) {
        case IEEE802154_ADDR_LONG:
                rcu_read_unlock();
                break;
        case IEEE802154_ADDR_SHORT:
-               if (addr->pan_id == 0xffff ||
+               if (addr->pan_id == IEEE802154_PANID_BROADCAST ||
                    addr->short_addr == IEEE802154_ADDR_UNDEF ||
-                   addr->short_addr == 0xffff)
+                   addr->short_addr == IEEE802154_ADDR_UNDEF)
                        break;
 
                rtnl_lock();
                        short_addr =
                                ieee802154_mlme_ops(tmp)->get_short_addr(tmp);
 
-                       if (pan_id == addr->pan_id &&
-                           short_addr == addr->short_addr) {
+                       if (le16_to_cpu(pan_id) == addr->pan_id &&
+                           le16_to_cpu(short_addr) == addr->short_addr) {
                                dev = tmp;
                                dev_hold(dev);
                                break;
 
        /* Data frame processing */
        BUG_ON(dev->type != ARPHRD_IEEE802154);
 
-       pan_id = ieee802154_mlme_ops(dev)->get_pan_id(dev);
-       short_addr = ieee802154_mlme_ops(dev)->get_short_addr(dev);
+       pan_id = le16_to_cpu(ieee802154_mlme_ops(dev)->get_pan_id(dev));
+       short_addr = le16_to_cpu(ieee802154_mlme_ops(dev)->get_short_addr(dev));
 
        read_lock(&dgram_lock);
        sk_for_each(sk, &dgram_head) {
 
 }
 EXPORT_SYMBOL(ieee802154_nl_assoc_indic);
 
-int ieee802154_nl_assoc_confirm(struct net_device *dev, u16 short_addr,
+int ieee802154_nl_assoc_confirm(struct net_device *dev, __le16 short_addr,
                u8 status)
 {
        struct sk_buff *msg;
            nla_put_u32(msg, IEEE802154_ATTR_DEV_INDEX, dev->ifindex) ||
            nla_put(msg, IEEE802154_ATTR_HW_ADDR, IEEE802154_ADDR_LEN,
                    dev->dev_addr) ||
-           nla_put_u16(msg, IEEE802154_ATTR_SHORT_ADDR, short_addr) ||
+           nla_put_u16(msg, IEEE802154_ATTR_SHORT_ADDR,
+                       le16_to_cpu(short_addr)) ||
            nla_put_u8(msg, IEEE802154_ATTR_STATUS, status))
                goto nla_put_failure;
        return ieee802154_nl_mcast(msg, IEEE802154_COORD_MCGRP);
 }
 EXPORT_SYMBOL(ieee802154_nl_disassoc_confirm);
 
-int ieee802154_nl_beacon_indic(struct net_device *dev,
-               u16 panid, u16 coord_addr)
+int ieee802154_nl_beacon_indic(struct net_device *dev, __le16 panid,
+                              __le16 coord_addr)
 {
        struct sk_buff *msg;
 
            nla_put_u32(msg, IEEE802154_ATTR_DEV_INDEX, dev->ifindex) ||
            nla_put(msg, IEEE802154_ATTR_HW_ADDR, IEEE802154_ADDR_LEN,
                    dev->dev_addr) ||
-           nla_put_u16(msg, IEEE802154_ATTR_COORD_SHORT_ADDR, coord_addr) ||
-           nla_put_u16(msg, IEEE802154_ATTR_COORD_PAN_ID, panid))
+           nla_put_u16(msg, IEEE802154_ATTR_COORD_SHORT_ADDR,
+                       le16_to_cpu(coord_addr)) ||
+           nla_put_u16(msg, IEEE802154_ATTR_COORD_PAN_ID,
+                       le16_to_cpu(panid)))
                goto nla_put_failure;
        return ieee802154_nl_mcast(msg, IEEE802154_COORD_MCGRP);
 
 {
        void *hdr;
        struct wpan_phy *phy;
+       u16 short_addr, pan_id;
 
        pr_debug("%s\n", __func__);
 
        phy = ieee802154_mlme_ops(dev)->get_phy(dev);
        BUG_ON(!phy);
 
+       short_addr = le16_to_cpu(ieee802154_mlme_ops(dev)->get_short_addr(dev));
+       pan_id = le16_to_cpu(ieee802154_mlme_ops(dev)->get_pan_id(dev));
+
        if (nla_put_string(msg, IEEE802154_ATTR_DEV_NAME, dev->name) ||
            nla_put_string(msg, IEEE802154_ATTR_PHY_NAME, wpan_phy_name(phy)) ||
            nla_put_u32(msg, IEEE802154_ATTR_DEV_INDEX, dev->ifindex) ||
            nla_put(msg, IEEE802154_ATTR_HW_ADDR, IEEE802154_ADDR_LEN,
                    dev->dev_addr) ||
-           nla_put_u16(msg, IEEE802154_ATTR_SHORT_ADDR,
-                       ieee802154_mlme_ops(dev)->get_short_addr(dev)) ||
-           nla_put_u16(msg, IEEE802154_ATTR_PAN_ID,
-                       ieee802154_mlme_ops(dev)->get_pan_id(dev)))
+           nla_put_u16(msg, IEEE802154_ATTR_SHORT_ADDR, short_addr) ||
+           nla_put_u16(msg, IEEE802154_ATTR_PAN_ID, pan_id))
                goto nla_put_failure;
        wpan_phy_put(phy);
        return genlmsg_end(msg, hdr);
        addr.addr_type = IEEE802154_ADDR_LONG;
        nla_memcpy(addr.hwaddr, info->attrs[IEEE802154_ATTR_DEST_HW_ADDR],
                        IEEE802154_ADDR_LEN);
-       addr.pan_id = ieee802154_mlme_ops(dev)->get_pan_id(dev);
-
+       addr.pan_id = le16_to_cpu(ieee802154_mlme_ops(dev)->get_pan_id(dev));
 
        ret = ieee802154_mlme_ops(dev)->assoc_resp(dev, &addr,
-               nla_get_u16(info->attrs[IEEE802154_ATTR_DEST_SHORT_ADDR]),
+               cpu_to_le16(nla_get_u16(info->attrs[IEEE802154_ATTR_DEST_SHORT_ADDR])),
                nla_get_u8(info->attrs[IEEE802154_ATTR_STATUS]));
 
 out:
                addr.short_addr = nla_get_u16(
                                info->attrs[IEEE802154_ATTR_DEST_SHORT_ADDR]);
        }
-       addr.pan_id = ieee802154_mlme_ops(dev)->get_pan_id(dev);
+       addr.pan_id = le16_to_cpu(ieee802154_mlme_ops(dev)->get_pan_id(dev));
 
        ret = ieee802154_mlme_ops(dev)->disassoc_req(dev, &addr,
                        nla_get_u8(info->attrs[IEEE802154_ATTR_REASON]));
 
 obj-$(CONFIG_MAC802154)        += mac802154.o
 mac802154-objs         := ieee802154_dev.o rx.o tx.o mac_cmd.o mib.o monitor.o wpan.o
+
+ccflags-y += -D__CHECK_ENDIAN__
 
 #include <net/netlink.h>
 #include <linux/nl802154.h>
 #include <net/mac802154.h>
+#include <net/ieee802154_netdev.h>
 #include <net/route.h>
 #include <net/wpan-phy.h>
 
        }
 
        if (ipriv->ops->ieee_addr) {
-               res = ipriv->ops->ieee_addr(&ipriv->hw, dev->dev_addr);
+               __le64 addr = ieee802154_devaddr_from_raw(dev->dev_addr);
+
+               res = ipriv->ops->ieee_addr(&ipriv->hw, addr);
                WARN_ON(res);
                if (res)
                        goto err;
 
 
        __le16 pan_id;
        __le16 short_addr;
+       __le64 extended_addr;
 
        u8 chan;
        u8 page;
                         u8 page, u8 chan);
 
 /* MIB callbacks */
-void mac802154_dev_set_short_addr(struct net_device *dev, u16 val);
-u16 mac802154_dev_get_short_addr(const struct net_device *dev);
+void mac802154_dev_set_short_addr(struct net_device *dev, __le16 val);
+__le16 mac802154_dev_get_short_addr(const struct net_device *dev);
 void mac802154_dev_set_ieee_addr(struct net_device *dev);
-u16 mac802154_dev_get_pan_id(const struct net_device *dev);
-void mac802154_dev_set_pan_id(struct net_device *dev, u16 val);
+__le16 mac802154_dev_get_pan_id(const struct net_device *dev);
+void mac802154_dev_set_pan_id(struct net_device *dev, __le16 val);
 void mac802154_dev_set_page_channel(struct net_device *dev, u8 page, u8 chan);
 u8 mac802154_dev_get_dsn(const struct net_device *dev);
 
 
 {
        BUG_ON(addr->addr_type != IEEE802154_ADDR_SHORT);
 
-       mac802154_dev_set_pan_id(dev, addr->pan_id);
-       mac802154_dev_set_short_addr(dev, addr->short_addr);
+       mac802154_dev_set_pan_id(dev, cpu_to_le16(addr->pan_id));
+       mac802154_dev_set_short_addr(dev, cpu_to_le16(addr->short_addr));
        mac802154_dev_set_ieee_addr(dev);
        mac802154_dev_set_page_channel(dev, page, channel);
 
 
 #include <linux/if_arp.h>
 
 #include <net/mac802154.h>
+#include <net/ieee802154_netdev.h>
 #include <net/wpan-phy.h>
 
 #include "mac802154.h"
        queue_work(priv->hw->dev_workqueue, &work->work);
 }
 
-void mac802154_dev_set_short_addr(struct net_device *dev, u16 val)
+void mac802154_dev_set_short_addr(struct net_device *dev, __le16 val)
 {
        struct mac802154_sub_if_data *priv = netdev_priv(dev);
 
        }
 }
 
-u16 mac802154_dev_get_short_addr(const struct net_device *dev)
+__le16 mac802154_dev_get_short_addr(const struct net_device *dev)
 {
        struct mac802154_sub_if_data *priv = netdev_priv(dev);
-       u16 ret;
+       __le16 ret;
 
        BUG_ON(dev->type != ARPHRD_IEEE802154);
 
 {
        struct mac802154_sub_if_data *priv = netdev_priv(dev);
        struct mac802154_priv *mac = priv->hw;
+       __le64 addr;
 
-       if (mac->ops->set_hw_addr_filt &&
-           memcmp(mac->hw.hw_filt.ieee_addr,
-                  dev->dev_addr, IEEE802154_ADDR_LEN)) {
-               memcpy(mac->hw.hw_filt.ieee_addr,
-                      dev->dev_addr, IEEE802154_ADDR_LEN);
+       addr = ieee802154_devaddr_from_raw(dev->dev_addr);
+       priv->extended_addr = addr;
+
+       if (mac->ops->set_hw_addr_filt && mac->hw.hw_filt.ieee_addr != addr) {
+               mac->hw.hw_filt.ieee_addr = addr;
                set_hw_addr_filt(dev, IEEE802515_AFILT_IEEEADDR_CHANGED);
        }
 }
 
-u16 mac802154_dev_get_pan_id(const struct net_device *dev)
+__le16 mac802154_dev_get_pan_id(const struct net_device *dev)
 {
        struct mac802154_sub_if_data *priv = netdev_priv(dev);
-       u16 ret;
+       __le16 ret;
 
        BUG_ON(dev->type != ARPHRD_IEEE802154);
 
        return ret;
 }
 
-void mac802154_dev_set_pan_id(struct net_device *dev, u16 val)
+void mac802154_dev_set_pan_id(struct net_device *dev, __le16 val)
 {
        struct mac802154_sub_if_data *priv = netdev_priv(dev);
 
 
 
        switch (cmd) {
        case SIOCGIFADDR:
-               if (priv->pan_id == IEEE802154_PANID_BROADCAST ||
-                   priv->short_addr == IEEE802154_ADDR_BROADCAST) {
+       {
+               u16 pan_id, short_addr;
+
+               pan_id = le16_to_cpu(priv->pan_id);
+               short_addr = le16_to_cpu(priv->short_addr);
+               if (pan_id == IEEE802154_PANID_BROADCAST ||
+                   short_addr == IEEE802154_ADDR_BROADCAST) {
                        err = -EADDRNOTAVAIL;
                        break;
                }
 
                sa->family = AF_IEEE802154;
                sa->addr.addr_type = IEEE802154_ADDR_SHORT;
-               sa->addr.pan_id = priv->pan_id;
-               sa->addr.short_addr = priv->short_addr;
+               sa->addr.pan_id = pan_id;
+               sa->addr.short_addr = short_addr;
 
                err = 0;
                break;
+       }
        case SIOCSIFADDR:
                dev_warn(&dev->dev,
                         "Using DEBUGing ioctl SIOCSIFADDR isn't recommened!\n");
                        break;
                }
 
-               priv->pan_id = sa->addr.pan_id;
-               priv->short_addr = sa->addr.short_addr;
+               priv->pan_id = cpu_to_le16(sa->addr.pan_id);
+               priv->short_addr = cpu_to_le16(sa->addr.short_addr);
 
                err = 0;
                break;
        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) {
+               if (priv->short_addr == cpu_to_le16(IEEE802154_ADDR_BROADCAST) ||
+                   priv->short_addr == cpu_to_le16(IEEE802154_ADDR_UNDEF) ||
+                   priv->pan_id == cpu_to_le16(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.short_addr = le16_to_cpu(priv->short_addr);
                }
 
-               dev_addr.pan_id = priv->pan_id;
+               dev_addr.pan_id = le16_to_cpu(priv->pan_id);
                saddr = &dev_addr;
 
                spin_unlock_bh(&priv->mib_lock);
        get_random_bytes(&priv->bsn, 1);
        get_random_bytes(&priv->dsn, 1);
 
-       priv->pan_id = IEEE802154_PANID_BROADCAST;
-       priv->short_addr = IEEE802154_ADDR_BROADCAST;
+       priv->pan_id = cpu_to_le16(IEEE802154_PANID_BROADCAST);
+       priv->short_addr = cpu_to_le16(IEEE802154_ADDR_BROADCAST);
 }
 
 static int mac802154_process_data(struct net_device *dev, struct sk_buff *skb)
 static int
 mac802154_subif_frame(struct mac802154_sub_if_data *sdata, struct sk_buff *skb)
 {
+       u16 span, sshort;
+
        pr_debug("getting packet via slave interface %s\n", sdata->dev->name);
 
        spin_lock_bh(&sdata->mib_lock);
 
+       span = le16_to_cpu(sdata->pan_id);
+       sshort = le16_to_cpu(sdata->short_addr);
+
        switch (mac_cb(skb)->da.addr_type) {
        case IEEE802154_ADDR_NONE:
                if (mac_cb(skb)->sa.addr_type != IEEE802154_ADDR_NONE)
                        skb->pkt_type = PACKET_HOST;
                break;
        case IEEE802154_ADDR_LONG:
-               if (mac_cb(skb)->da.pan_id != sdata->pan_id &&
+               if (mac_cb(skb)->da.pan_id != span &&
                    mac_cb(skb)->da.pan_id != IEEE802154_PANID_BROADCAST)
                        skb->pkt_type = PACKET_OTHERHOST;
                else if (!memcmp(mac_cb(skb)->da.hwaddr, sdata->dev->dev_addr,
                        skb->pkt_type = PACKET_OTHERHOST;
                break;
        case IEEE802154_ADDR_SHORT:
-               if (mac_cb(skb)->da.pan_id != sdata->pan_id &&
+               if (mac_cb(skb)->da.pan_id != span &&
                    mac_cb(skb)->da.pan_id != IEEE802154_PANID_BROADCAST)
                        skb->pkt_type = PACKET_OTHERHOST;
-               else if (mac_cb(skb)->da.short_addr == sdata->short_addr)
+               else if (mac_cb(skb)->da.short_addr == sshort)
                        skb->pkt_type = PACKET_HOST;
                else if (mac_cb(skb)->da.short_addr ==
                                        IEEE802154_ADDR_BROADCAST)