*       802.15.4-2006 document.
  */
 static int fake_assoc_req(struct net_device *dev,
-               struct ieee802154_addr *addr, u8 channel, u8 page, u8 cap)
+               struct ieee802154_addr_sa *addr, u8 channel, u8 page, u8 cap)
 {
        struct wpan_phy *phy = fake_to_phy(dev);
 
  *       802.15.4-2006 document.
  */
 static int fake_assoc_resp(struct net_device *dev,
-               struct ieee802154_addr *addr, u16 short_addr, u8 status)
+               struct ieee802154_addr_sa *addr, u16 short_addr, u8 status)
 {
        return 0;
 }
  *       document, with the reason described in 7.3.3.2.
  */
 static int fake_disassoc_req(struct net_device *dev,
-               struct ieee802154_addr *addr, u8 reason)
+               struct ieee802154_addr_sa *addr, u8 reason)
 {
        return ieee802154_nl_disassoc_confirm(dev, IEEE802154_SUCCESS);
 }
  * Note: This is in section 7.5.2.3 of the IEEE 802.15.4-2006
  * document, with 7.3.8 describing coordinator realignment.
  */
-static int fake_start_req(struct net_device *dev, struct ieee802154_addr *addr,
-                               u8 channel, u8 page,
-                               u8 bcn_ord, u8 sf_ord, u8 pan_coord, u8 blx,
-                               u8 coord_realign)
+static int fake_start_req(struct net_device *dev,
+                         struct ieee802154_addr_sa *addr, u8 channel, u8 page,
+                         u8 bcn_ord, u8 sf_ord, u8 pan_coord, u8 blx,
+                         u8 coord_realign)
 {
        struct wpan_phy *phy = fake_to_phy(dev);
 
 
 /* address length, octets */
 #define IEEE802154_ADDR_LEN    8
 
-struct ieee802154_addr {
+struct ieee802154_addr_sa {
        int addr_type;
        u16 pan_id;
        union {
 
 struct sockaddr_ieee802154 {
        sa_family_t family; /* AF_IEEE802154 */
-       struct ieee802154_addr addr;
+       struct ieee802154_addr_sa addr;
 };
 
 /* get/setsockopt */
 
  */
 struct ieee802154_mac_cb {
        u8 lqi;
-       struct ieee802154_addr sa;
-       struct ieee802154_addr da;
+       struct ieee802154_addr_sa sa;
+       struct ieee802154_addr_sa da;
        u8 flags;
        u8 seq;
        struct ieee802154_frag_info frag_info;
        /* The following fields are optional (can be NULL). */
 
        int (*assoc_req)(struct net_device *dev,
-                       struct ieee802154_addr *addr,
+                       struct ieee802154_addr_sa *addr,
                        u8 channel, u8 page, u8 cap);
        int (*assoc_resp)(struct net_device *dev,
-                       struct ieee802154_addr *addr,
+                       struct ieee802154_addr_sa *addr,
                        u16 short_addr, u8 status);
        int (*disassoc_req)(struct net_device *dev,
-                       struct ieee802154_addr *addr,
+                       struct ieee802154_addr_sa *addr,
                        u8 reason);
        int (*start_req)(struct net_device *dev,
-                       struct ieee802154_addr *addr,
+                       struct ieee802154_addr_sa *addr,
                        u8 channel, u8 page, u8 bcn_ord, u8 sf_ord,
                        u8 pan_coord, u8 blx, u8 coord_realign);
        int (*scan_req)(struct net_device *dev,
 
 #define IEEE802154_NL_H
 
 struct net_device;
-struct ieee802154_addr;
+struct ieee802154_addr_sa;
 
 /**
  * ieee802154_nl_assoc_indic - Notify userland of an association request.
  * Note: This is in section 7.3.1 of the IEEE 802.15.4-2006 document.
  */
 int ieee802154_nl_assoc_indic(struct net_device *dev,
-               struct ieee802154_addr *addr, u8 cap);
+               struct ieee802154_addr_sa *addr, u8 cap);
 
 /**
  * ieee802154_nl_assoc_confirm - Notify userland of association.
  * Note: This is in section 7.3.3 of the IEEE 802.15.4 document.
  */
 int ieee802154_nl_disassoc_indic(struct net_device *dev,
-               struct ieee802154_addr *addr, u8 reason);
+               struct ieee802154_addr_sa *addr, u8 reason);
 
 /**
  * ieee802154_nl_disassoc_confirm - Notify userland of disassociation
 
 {
        const u8 *saddr = _saddr;
        const u8 *daddr = _daddr;
-       struct ieee802154_addr sa, da;
+       struct ieee802154_addr_sa sa, da;
 
        /* TODO:
         * if this package isn't ipv6 one, where should it be routed?
 static int process_data(struct sk_buff *skb)
 {
        u8 iphc0, iphc1;
-       const struct ieee802154_addr *_saddr, *_daddr;
+       const struct ieee802154_addr_sa *_saddr, *_daddr;
 
        raw_dump_table(__func__, "raw skb data dump", skb->data, skb->len);
        /* at least two bytes will be used for the encoding */
 
 void ieee802154_raw_deliver(struct net_device *dev, struct sk_buff *skb);
 int ieee802154_dgram_deliver(struct net_device *dev, struct sk_buff *skb);
 struct net_device *ieee802154_get_dev(struct net *net,
-               struct ieee802154_addr *addr);
+               struct ieee802154_addr_sa *addr);
 
 #endif
 
  * Utility function for families
  */
 struct net_device *ieee802154_get_dev(struct net *net,
-               struct ieee802154_addr *addr)
+               struct ieee802154_addr_sa *addr)
 {
        struct net_device *dev = NULL;
        struct net_device *tmp;
 
 struct dgram_sock {
        struct sock sk;
 
-       struct ieee802154_addr src_addr;
-       struct ieee802154_addr dst_addr;
+       struct ieee802154_addr_sa src_addr;
+       struct ieee802154_addr_sa dst_addr;
 
        unsigned int bound:1;
        unsigned int want_ack:1;
                goto out_put;
        }
 
-       memcpy(&ro->src_addr, &addr->addr, sizeof(struct ieee802154_addr));
+       memcpy(&ro->src_addr, &addr->addr, sizeof(struct ieee802154_addr_sa));
 
        ro->bound = 1;
        err = 0;
                goto out;
        }
 
-       memcpy(&ro->dst_addr, &addr->addr, sizeof(struct ieee802154_addr));
+       memcpy(&ro->dst_addr, &addr->addr, sizeof(struct ieee802154_addr_sa));
 
 out:
        release_sock(sk);
 
 #include "ieee802154.h"
 
 int ieee802154_nl_assoc_indic(struct net_device *dev,
-               struct ieee802154_addr *addr, u8 cap)
+               struct ieee802154_addr_sa *addr, u8 cap)
 {
        struct sk_buff *msg;
 
 EXPORT_SYMBOL(ieee802154_nl_assoc_confirm);
 
 int ieee802154_nl_disassoc_indic(struct net_device *dev,
-               struct ieee802154_addr *addr, u8 reason)
+               struct ieee802154_addr_sa *addr, u8 reason)
 {
        struct sk_buff *msg;
 
 int ieee802154_associate_req(struct sk_buff *skb, struct genl_info *info)
 {
        struct net_device *dev;
-       struct ieee802154_addr addr;
+       struct ieee802154_addr_sa addr;
        u8 page;
        int ret = -EOPNOTSUPP;
 
 int ieee802154_associate_resp(struct sk_buff *skb, struct genl_info *info)
 {
        struct net_device *dev;
-       struct ieee802154_addr addr;
+       struct ieee802154_addr_sa addr;
        int ret = -EOPNOTSUPP;
 
        if (!info->attrs[IEEE802154_ATTR_STATUS] ||
 int ieee802154_disassociate_req(struct sk_buff *skb, struct genl_info *info)
 {
        struct net_device *dev;
-       struct ieee802154_addr addr;
+       struct ieee802154_addr_sa addr;
        int ret = -EOPNOTSUPP;
 
        if ((!info->attrs[IEEE802154_ATTR_DEST_HW_ADDR] &&
 int ieee802154_start_req(struct sk_buff *skb, struct genl_info *info)
 {
        struct net_device *dev;
-       struct ieee802154_addr addr;
+       struct ieee802154_addr_sa addr;
 
        u8 channel, bcn_ord, sf_ord;
        u8 page;
 
                             struct sk_buff *prev, struct net_device *dev);
 
 static unsigned int lowpan_hash_frag(__be16 tag, u16 d_size,
-                                    const struct ieee802154_addr *saddr,
-                                    const struct ieee802154_addr *daddr)
+                                    const struct ieee802154_addr_sa *saddr,
+                                    const struct ieee802154_addr_sa *daddr)
 {
        u32 c;
 
 
 static inline struct lowpan_frag_queue *
 fq_find(struct net *net, const struct ieee802154_frag_info *frag_info,
-       const struct ieee802154_addr *src, const struct ieee802154_addr *dst)
+       const struct ieee802154_addr_sa *src, const struct ieee802154_addr_sa *dst)
 {
        struct inet_frag_queue *q;
        struct lowpan_create_arg arg;
 
 struct lowpan_create_arg {
        __be16 tag;
        u16 d_size;
-       const struct ieee802154_addr *src;
-       const struct ieee802154_addr *dst;
+       const struct ieee802154_addr_sa *src;
+       const struct ieee802154_addr_sa *dst;
 };
 
 /* Equivalent of ipv4 struct ip
 
        __be16                  tag;
        u16                     d_size;
-       struct ieee802154_addr  saddr;
-       struct ieee802154_addr  daddr;
+       struct ieee802154_addr_sa       saddr;
+       struct ieee802154_addr_sa       daddr;
 };
 
-static inline u32 ieee802154_addr_hash(const struct ieee802154_addr *a)
+static inline u32 ieee802154_addr_hash(const struct ieee802154_addr_sa *a)
 {
        switch (a->addr_type) {
        case IEEE802154_ADDR_LONG:
        }
 }
 
-static inline bool ieee802154_addr_addr_equal(const struct ieee802154_addr *a1,
-                                  const struct ieee802154_addr *a2)
+static inline bool
+ieee802154_addr_addr_equal(const struct ieee802154_addr_sa *a1,
+                          const struct ieee802154_addr_sa *a2)
 {
        if (a1->pan_id != a2->pan_id)
                return false;
 
 #include "mac802154.h"
 
 static int mac802154_mlme_start_req(struct net_device *dev,
-                                   struct ieee802154_addr *addr,
+                                   struct ieee802154_addr_sa *addr,
                                    u8 channel, u8 page,
                                    u8 bcn_ord, u8 sf_ord,
                                    u8 pan_coord, u8 blx,
 
                                   const void *_saddr,
                                   unsigned len)
 {
-       const struct ieee802154_addr *saddr = _saddr;
-       const struct ieee802154_addr *daddr = _daddr;
-       struct ieee802154_addr dev_addr;
+       const struct ieee802154_addr_sa *saddr = _saddr;
+       const struct ieee802154_addr_sa *daddr = _daddr;
+       struct ieee802154_addr_sa dev_addr;
        struct mac802154_sub_if_data *priv = netdev_priv(dev);
        int pos = 2;
        u8 head[MAC802154_FRAME_HARD_HEADER_LEN];
 {
        const u8 *hdr = skb_mac_header(skb);
        const u8 *tail = skb_tail_pointer(skb);
-       struct ieee802154_addr *addr = (struct ieee802154_addr *)haddr;
+       struct ieee802154_addr_sa *addr = (struct ieee802154_addr_sa *)haddr;
        u16 fc;
        int da_type;
 
                goto malformed;
        }
 
-       return sizeof(struct ieee802154_addr);
+       return sizeof(struct ieee802154_addr_sa);
 
 malformed:
        pr_debug("malformed packet\n");