aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorAlexander Aring <alex.aring@gmail.com>2014-11-01 23:18:41 -0400
committerMarcel Holtmann <marcel@holtmann.org>2014-11-01 23:51:07 -0400
commit776e59de46b5db368e1bd0a4ec5c4feaa740a3d1 (patch)
treef8ca06e1d42c5fe8848fa977ffa785086f4fdb51 /net
parentab24f50f2a3e3f6a38b4852530534aa99d86b4d1 (diff)
mac802154: set extended address filter on ifup
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>
Diffstat (limited to 'net')
-rw-r--r--net/mac802154/ieee802154_i.h1
-rw-r--r--net/mac802154/iface.c10
-rw-r--r--net/mac802154/mac_cmd.c1
-rw-r--r--net/mac802154/mib.c14
4 files changed, 9 insertions, 17 deletions
diff --git a/net/mac802154/ieee802154_i.h b/net/mac802154/ieee802154_i.h
index 39af6eaec410..27e17e6bcf18 100644
--- a/net/mac802154/ieee802154_i.h
+++ b/net/mac802154/ieee802154_i.h
@@ -135,7 +135,6 @@ ieee802154_subif_start_xmit(struct sk_buff *skb, struct net_device *dev);
135/* MIB callbacks */ 135/* MIB callbacks */
136void mac802154_dev_set_short_addr(struct net_device *dev, __le16 val); 136void mac802154_dev_set_short_addr(struct net_device *dev, __le16 val);
137__le16 mac802154_dev_get_short_addr(const struct net_device *dev); 137__le16 mac802154_dev_get_short_addr(const struct net_device *dev);
138void mac802154_dev_set_ieee_addr(struct net_device *dev);
139__le16 mac802154_dev_get_pan_id(const struct net_device *dev); 138__le16 mac802154_dev_get_pan_id(const struct net_device *dev);
140void mac802154_dev_set_pan_id(struct net_device *dev, __le16 val); 139void mac802154_dev_set_pan_id(struct net_device *dev, __le16 val);
141void mac802154_dev_set_page_channel(struct net_device *dev, u8 page, u8 chan); 140void mac802154_dev_set_page_channel(struct net_device *dev, u8 page, u8 chan);
diff --git a/net/mac802154/iface.c b/net/mac802154/iface.c
index f7a6f83301e2..a509a7151be9 100644
--- a/net/mac802154/iface.c
+++ b/net/mac802154/iface.c
@@ -110,6 +110,7 @@ mac802154_wpan_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
110 110
111static int mac802154_wpan_mac_addr(struct net_device *dev, void *p) 111static int mac802154_wpan_mac_addr(struct net_device *dev, void *p)
112{ 112{
113 struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
113 struct sockaddr *addr = p; 114 struct sockaddr *addr = p;
114 115
115 if (netif_running(dev)) 116 if (netif_running(dev))
@@ -117,7 +118,8 @@ static int mac802154_wpan_mac_addr(struct net_device *dev, void *p)
117 118
118 /* FIXME: validate addr */ 119 /* FIXME: validate addr */
119 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); 120 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
120 mac802154_dev_set_ieee_addr(dev); 121 sdata->extended_addr = ieee802154_netdev_to_extended_addr(dev->dev_addr);
122
121 return mac802154_wpan_update_llsec(dev); 123 return mac802154_wpan_update_llsec(dev);
122} 124}
123 125
@@ -202,6 +204,12 @@ static int mac802154_wpan_open(struct net_device *dev)
202 goto out; 204 goto out;
203 } 205 }
204 206
207 if (local->hw.flags & IEEE802154_HW_AFILT) {
208 rc = drv_set_extended_addr(local, sdata->extended_addr);
209 if (rc < 0)
210 goto out;
211 }
212
205 if (local->hw.flags & IEEE802154_HW_TXPOWER) { 213 if (local->hw.flags & IEEE802154_HW_TXPOWER) {
206 rc = drv_set_tx_power(local, sdata->mac_params.transmit_power); 214 rc = drv_set_tx_power(local, sdata->mac_params.transmit_power);
207 if (rc < 0) 215 if (rc < 0)
diff --git a/net/mac802154/mac_cmd.c b/net/mac802154/mac_cmd.c
index fc261ab33347..90c1ad80a67d 100644
--- a/net/mac802154/mac_cmd.c
+++ b/net/mac802154/mac_cmd.c
@@ -43,7 +43,6 @@ static int mac802154_mlme_start_req(struct net_device *dev,
43 43
44 mac802154_dev_set_pan_id(dev, addr->pan_id); 44 mac802154_dev_set_pan_id(dev, addr->pan_id);
45 mac802154_dev_set_short_addr(dev, addr->short_addr); 45 mac802154_dev_set_short_addr(dev, addr->short_addr);
46 mac802154_dev_set_ieee_addr(dev);
47 mac802154_dev_set_page_channel(dev, page, channel); 46 mac802154_dev_set_page_channel(dev, page, channel);
48 47
49 if (ops->llsec) { 48 if (ops->llsec) {
diff --git a/net/mac802154/mib.c b/net/mac802154/mib.c
index 0184fced2f62..cfd4f657a24e 100644
--- a/net/mac802154/mib.c
+++ b/net/mac802154/mib.c
@@ -102,20 +102,6 @@ __le16 mac802154_dev_get_short_addr(const struct net_device *dev)
102 return ret; 102 return ret;
103} 103}
104 104
105void mac802154_dev_set_ieee_addr(struct net_device *dev)
106{
107 struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
108 struct ieee802154_local *local = sdata->local;
109
110 sdata->extended_addr = ieee802154_devaddr_from_raw(dev->dev_addr);
111
112 if (local->ops->set_hw_addr_filt &&
113 local->hw.hw_filt.ieee_addr != sdata->extended_addr) {
114 local->hw.hw_filt.ieee_addr = sdata->extended_addr;
115 set_hw_addr_filt(dev, IEEE802154_AFILT_IEEEADDR_CHANGED);
116 }
117}
118
119__le16 mac802154_dev_get_pan_id(const struct net_device *dev) 105__le16 mac802154_dev_get_pan_id(const struct net_device *dev)
120{ 106{
121 struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev); 107 struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);