mac802154: set extended address filter on ifup
authorAlexander Aring <alex.aring@gmail.com>
Sun, 2 Nov 2014 03:18:41 +0000 (04:18 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Sun, 2 Nov 2014 03:51:07 +0000 (04:51 +0100)
This patch moves the setting of hardware extended address filtering
inside of interface up instead doing it directly inside of netlink interface.
Also we don't need to set the sdata extended attribute in netlink. This
is already done by ndo_set_mac_address of net_device_ops.

Signed-off-by: Alexander Aring <alex.aring@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/mac802154/ieee802154_i.h
net/mac802154/iface.c
net/mac802154/mac_cmd.c
net/mac802154/mib.c

index 39af6eaec410a6d3c902810b78c426c49e4422f7..27e17e6bcf185fe50cc9fd15ac962e44e9f3e37c 100644 (file)
@@ -135,7 +135,6 @@ ieee802154_subif_start_xmit(struct sk_buff *skb, struct net_device *dev);
 /* MIB callbacks */
 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);
 __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);
index f7a6f83301e2096d679ccd6a2d65243c2921d591..a509a7151be9ea88dcb462750b44a73927a0ef1e 100644 (file)
@@ -110,6 +110,7 @@ mac802154_wpan_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
 
 static int mac802154_wpan_mac_addr(struct net_device *dev, void *p)
 {
+       struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
        struct sockaddr *addr = p;
 
        if (netif_running(dev))
@@ -117,7 +118,8 @@ static int mac802154_wpan_mac_addr(struct net_device *dev, void *p)
 
        /* FIXME: validate addr */
        memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
-       mac802154_dev_set_ieee_addr(dev);
+       sdata->extended_addr = ieee802154_netdev_to_extended_addr(dev->dev_addr);
+
        return mac802154_wpan_update_llsec(dev);
 }
 
@@ -202,6 +204,12 @@ static int mac802154_wpan_open(struct net_device *dev)
                        goto out;
        }
 
+       if (local->hw.flags & IEEE802154_HW_AFILT) {
+               rc = drv_set_extended_addr(local, sdata->extended_addr);
+               if (rc < 0)
+                       goto out;
+       }
+
        if (local->hw.flags & IEEE802154_HW_TXPOWER) {
                rc = drv_set_tx_power(local, sdata->mac_params.transmit_power);
                if (rc < 0)
index fc261ab333477d167f972d5a8120db9366dd1862..90c1ad80a67da4bf15565a7064708a5fd1e8717b 100644 (file)
@@ -43,7 +43,6 @@ static int mac802154_mlme_start_req(struct net_device *dev,
 
        mac802154_dev_set_pan_id(dev, addr->pan_id);
        mac802154_dev_set_short_addr(dev, addr->short_addr);
-       mac802154_dev_set_ieee_addr(dev);
        mac802154_dev_set_page_channel(dev, page, channel);
 
        if (ops->llsec) {
index 0184fced2f62372aed120c8e248dfefa6079a53e..cfd4f657a24e7b413c8e53f38435cb86fb0fa97d 100644 (file)
@@ -102,20 +102,6 @@ __le16 mac802154_dev_get_short_addr(const struct net_device *dev)
        return ret;
 }
 
-void mac802154_dev_set_ieee_addr(struct net_device *dev)
-{
-       struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
-       struct ieee802154_local *local = sdata->local;
-
-       sdata->extended_addr = ieee802154_devaddr_from_raw(dev->dev_addr);
-
-       if (local->ops->set_hw_addr_filt &&
-           local->hw.hw_filt.ieee_addr != sdata->extended_addr) {
-               local->hw.hw_filt.ieee_addr = sdata->extended_addr;
-               set_hw_addr_filt(dev, IEEE802154_AFILT_IEEEADDR_CHANGED);
-       }
-}
-
 __le16 mac802154_dev_get_pan_id(const struct net_device *dev)
 {
        struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);