ieee802154: don't allow to change addr while netif_running
authorAlexander Aring <alex.aring@gmail.com>
Sun, 2 Nov 2014 03:18:39 +0000 (04:18 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Sun, 2 Nov 2014 03:51:07 +0000 (04:51 +0100)
This patch changes the actual behaviour for setting address attributes.
We should not change addresses while netif_running is true. Furthermore
when netif_running is running the address attributes becomes read only
and we can remove locking mechanism in receive and transmit hothpaths
of 802.15.4 subsystem.

Signed-off-by: Alexander Aring <alex.aring@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/ieee802154/nl-mac.c

index abd0f31bdc665d40145340ec343dad06d47f8a43..cc2919dbe5e01c8b9edae3a069bd804d6447e88d 100644 (file)
@@ -477,7 +477,7 @@ int ieee802154_start_req(struct sk_buff *skb, struct genl_info *info)
        u8 channel, bcn_ord, sf_ord;
        u8 page;
        int pan_coord, blx, coord_realign;
-       int ret = -EOPNOTSUPP;
+       int ret = -EBUSY;
 
        if (!info->attrs[IEEE802154_ATTR_COORD_PAN_ID] ||
            !info->attrs[IEEE802154_ATTR_COORD_SHORT_ADDR] ||
@@ -493,9 +493,15 @@ int ieee802154_start_req(struct sk_buff *skb, struct genl_info *info)
        dev = ieee802154_nl_get_dev(info);
        if (!dev)
                return -ENODEV;
-       if (!ieee802154_mlme_ops(dev)->start_req)
+
+       if (netif_running(dev))
                goto out;
 
+       if (!ieee802154_mlme_ops(dev)->start_req) {
+               ret = -EOPNOTSUPP;
+               goto out;
+       }
+
        addr.mode = IEEE802154_ADDR_SHORT;
        addr.short_addr = nla_get_shortaddr(
                        info->attrs[IEEE802154_ATTR_COORD_SHORT_ADDR]);