Skip to content

Commit

Permalink
mac802154: set extended address filter on ifup
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
alexaring authored and holtmann committed Nov 2, 2014
1 parent ab24f50 commit 776e59d
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 17 deletions.
1 change: 0 additions & 1 deletion net/mac802154/ieee802154_i.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
10 changes: 9 additions & 1 deletion net/mac802154/iface.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,14 +110,16 @@ 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))
return -EBUSY;

/* 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);
}

Expand Down Expand Up @@ -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)
Expand Down
1 change: 0 additions & 1 deletion net/mac802154/mac_cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
14 changes: 0 additions & 14 deletions net/mac802154/mib.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 776e59d

Please sign in to comment.