]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ieee802154: fix byteorder for short address and panid
authorAlexander Aring <alex.aring@gmail.com>
Mon, 17 Nov 2014 07:20:55 +0000 (08:20 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Mon, 17 Nov 2014 08:49:17 +0000 (09:49 +0100)
This patch changes the byteorder handling for short and panid handling.
We now except to get little endian in nl802154 for these attributes.

Signed-off-by: Alexander Aring <alex.aring@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
include/net/cfg802154.h
net/ieee802154/nl802154.c
net/ieee802154/rdev-ops.h
net/mac802154/cfg.c

index 228f1f7668f778c566b4aec15e824d74818e9e0b..7f713acfa106c9bd564b4c748a1d9b7b8978d8ae 100644 (file)
@@ -40,9 +40,9 @@ struct cfg802154_ops {
                                    struct wpan_dev *wpan_dev);
        int     (*set_channel)(struct wpan_phy *wpan_phy, u8 page, u8 channel);
        int     (*set_pan_id)(struct wpan_phy *wpan_phy,
-                             struct wpan_dev *wpan_dev, u16 pan_id);
+                             struct wpan_dev *wpan_dev, __le16 pan_id);
        int     (*set_short_addr)(struct wpan_phy *wpan_phy,
-                                 struct wpan_dev *wpan_dev, u16 short_addr);
+                                 struct wpan_dev *wpan_dev, __le16 short_addr);
        int     (*set_backoff_exponent)(struct wpan_phy *wpan_phy,
                                        struct wpan_dev *wpan_dev, u8 min_be,
                                        u8 max_be);
index b82b01669a67f2bcdf5333e6f03ecc77955747f5..8896477446977a7b4fdab732aec1308c60a46d8b 100644 (file)
@@ -627,7 +627,7 @@ static int nl802154_set_pan_id(struct sk_buff *skb, struct genl_info *info)
        struct cfg802154_registered_device *rdev = info->user_ptr[0];
        struct net_device *dev = info->user_ptr[1];
        struct wpan_dev *wpan_dev = dev->ieee802154_ptr;
-       u16 pan_id;
+       __le16 pan_id;
 
        /* conflict here while tx/rx calls */
        if (netif_running(dev))
@@ -640,7 +640,7 @@ static int nl802154_set_pan_id(struct sk_buff *skb, struct genl_info *info)
        if (!info->attrs[NL802154_ATTR_PAN_ID])
                return -EINVAL;
 
-       pan_id = nla_get_u16(info->attrs[NL802154_ATTR_PAN_ID]);
+       pan_id = nla_get_le16(info->attrs[NL802154_ATTR_PAN_ID]);
 
        return rdev_set_pan_id(rdev, wpan_dev, pan_id);
 }
@@ -650,7 +650,7 @@ static int nl802154_set_short_addr(struct sk_buff *skb, struct genl_info *info)
        struct cfg802154_registered_device *rdev = info->user_ptr[0];
        struct net_device *dev = info->user_ptr[1];
        struct wpan_dev *wpan_dev = dev->ieee802154_ptr;
-       u16 short_addr;
+       __le16 short_addr;
 
        /* conflict here while tx/rx calls */
        if (netif_running(dev))
@@ -663,7 +663,7 @@ static int nl802154_set_short_addr(struct sk_buff *skb, struct genl_info *info)
        if (!info->attrs[NL802154_ATTR_SHORT_ADDR])
                return -EINVAL;
 
-       short_addr = nla_get_u16(info->attrs[NL802154_ATTR_SHORT_ADDR]);
+       short_addr = nla_get_le16(info->attrs[NL802154_ATTR_SHORT_ADDR]);
 
        return rdev_set_short_addr(rdev, wpan_dev, short_addr);
 }
index 40ffbc0d8b855bc70e60ac2df2c13e158c5115bd..aff54fbd9264e92fd03578d6ecb5298d53226a42 100644 (file)
@@ -43,14 +43,14 @@ rdev_set_channel(struct cfg802154_registered_device *rdev, u8 page, u8 channel)
 
 static inline int
 rdev_set_pan_id(struct cfg802154_registered_device *rdev,
-               struct wpan_dev *wpan_dev, u16 pan_id)
+               struct wpan_dev *wpan_dev, __le16 pan_id)
 {
        return rdev->ops->set_pan_id(&rdev->wpan_phy, wpan_dev, pan_id);
 }
 
 static inline int
 rdev_set_short_addr(struct cfg802154_registered_device *rdev,
-                   struct wpan_dev *wpan_dev, u16 short_addr)
+                   struct wpan_dev *wpan_dev, __le16 short_addr)
 {
        return rdev->ops->set_short_addr(&rdev->wpan_phy, wpan_dev, short_addr);
 }
index 7def2625eacaf494e35a9a4220405444e3bb6360..c035708ada160d5364417db8a4c3179819016d49 100644 (file)
@@ -88,7 +88,7 @@ ieee802154_set_channel(struct wpan_phy *wpan_phy, u8 page, u8 channel)
 
 static int
 ieee802154_set_pan_id(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev,
-                     u16 pan_id)
+                     __le16 pan_id)
 {
        ASSERT_RTNL();
 
@@ -99,10 +99,10 @@ ieee802154_set_pan_id(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev,
         *
         * This could useful to simple deassociate an device.
         */
-       if (pan_id == IEEE802154_PAN_ID_BROADCAST)
+       if (pan_id == cpu_to_le16(IEEE802154_PAN_ID_BROADCAST))
                return -EINVAL;
 
-       wpan_dev->pan_id = cpu_to_le16(pan_id);
+       wpan_dev->pan_id = pan_id;
        return 0;
 }
 
@@ -125,7 +125,7 @@ ieee802154_set_backoff_exponent(struct wpan_phy *wpan_phy,
 
 static int
 ieee802154_set_short_addr(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev,
-                         u16 short_addr)
+                         __le16 short_addr)
 {
        ASSERT_RTNL();
 
@@ -140,11 +140,11 @@ ieee802154_set_short_addr(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev,
         * I think we should allow to set these settings but
         * don't allow to allow socket communication with it.
         */
-       if (short_addr == IEEE802154_ADDR_SHORT_UNSPEC ||
-           short_addr == IEEE802154_ADDR_SHORT_BROADCAST)
+       if (short_addr == cpu_to_le16(IEEE802154_ADDR_SHORT_UNSPEC) ||
+           short_addr == cpu_to_le16(IEEE802154_ADDR_SHORT_BROADCAST))
                return -EINVAL;
 
-       wpan_dev->short_addr = cpu_to_le16(short_addr);
+       wpan_dev->short_addr = short_addr;
        return 0;
 }