After removing knowledge of the master net_dev from drivers,
they'll still need a way to tell us which MAC address they have.
This is that way, the perm_addr is initially used for all devices.

Signed-off-by: Johannes Berg <[EMAIL PROTECTED]>

--- wireless-dev.orig/include/net/d80211.h      2006-11-19 20:13:58.029275208 
+0100
+++ wireless-dev/include/net/d80211.h   2006-11-19 20:13:59.349275208 +0100
@@ -11,6 +11,7 @@
 #define D80211_H
 
 #include <linux/kernel.h>
+#include <linux/if_ether.h>
 #include <linux/skbuff.h>
 #include <linux/wireless.h>
 #include <linux/device.h>
@@ -439,6 +440,9 @@ struct ieee80211_hw {
 
        struct device *dev;
 
+       /* permanent mac address */
+       u8 perm_addr[ETH_ALEN];
+
        /* TODO: frame_type 802.11/802.3, sw_encryption requirements */
 
        /* Some wireless LAN chipsets generate beacons in the hardware/firmware
--- wireless-dev.orig/net/d80211/ieee80211_iface.c      2006-11-19 
20:13:58.069275208 +0100
+++ wireless-dev/net/d80211/ieee80211_iface.c   2006-11-19 20:13:59.359275208 
+0100
@@ -70,7 +70,7 @@ int ieee80211_if_add(struct net_device *
                snprintf(ndev->name, IFNAMSIZ, "%s", name);
        }
 
-       memcpy(ndev->dev_addr, local->mdev->dev_addr, ETH_ALEN);
+       memcpy(ndev->dev_addr, local->wiphy.perm_addr, ETH_ALEN);
        ndev->base_addr = dev->base_addr;
        ndev->irq = dev->irq;
        ndev->mem_start = dev->mem_start;
@@ -123,7 +123,7 @@ int ieee80211_if_add_mgmt(struct ieee802
                goto fail;
 
        ndev->ieee80211_ptr = local;
-       memcpy(ndev->dev_addr, local->mdev->dev_addr, ETH_ALEN);
+       memcpy(ndev->dev_addr, local->wiphy.perm_addr, ETH_ALEN);
        SET_NETDEV_DEV(ndev, local->mdev->class_dev.dev);
 
        nsdata = IEEE80211_DEV_TO_SUB_IF(ndev);
--- wireless-dev.orig/net/d80211/ieee80211.c    2006-11-19 20:13:58.039275208 
+0100
+++ wireless-dev/net/d80211/ieee80211.c 2006-11-19 20:13:59.359275208 +0100
@@ -4565,6 +4565,7 @@ int ieee80211_register_hw(struct ieee802
                rtnl_unlock();
                goto fail_dev;
        }
+       memcpy(local->mdev->dev_addr, local->wiphy.perm_addr, ETH_ALEN);
        result = register_netdevice(local->mdev);
        if (result < 0) {
                rtnl_unlock();


-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to