diff options
author | Ben Greear <greearb@candelatech.com> | 2014-10-22 12:23:06 -0700 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2014-10-27 08:48:34 +0100 |
commit | b5dfae020b3539feaa014d3b6152f48660c2d75b (patch) | |
tree | 1d9195c1d0c2e35f8560e10ae626ffe9f8734941 | |
parent | e8f479b11268af3f206d1580f6b0d572d6ecb4f7 (diff) | |
download | lwn-b5dfae020b3539feaa014d3b6152f48660c2d75b.tar.gz lwn-b5dfae020b3539feaa014d3b6152f48660c2d75b.zip |
mac80211: support creating vifs with specified mac address
This is useful when creating virtual interfaces.
Signed-off-by: Ben Greear <greearb@candelatech.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-rw-r--r-- | net/mac80211/iface.c | 5 | ||||
-rw-r--r-- | net/mac80211/main.c | 1 |
2 files changed, 5 insertions, 1 deletions
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index e469b3390f2a..1ffcc0701244 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c @@ -1671,7 +1671,10 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name, } ieee80211_assign_perm_addr(local, ndev->perm_addr, type); - memcpy(ndev->dev_addr, ndev->perm_addr, ETH_ALEN); + if (params && is_valid_ether_addr(params->macaddr)) + memcpy(ndev->dev_addr, params->macaddr, ETH_ALEN); + else + memcpy(ndev->dev_addr, ndev->perm_addr, ETH_ALEN); SET_NETDEV_DEV(ndev, wiphy_dev(local->hw.wiphy)); /* don't use IEEE80211_DEV_TO_SUB_IF -- it checks too much */ diff --git a/net/mac80211/main.c b/net/mac80211/main.c index 7d40e3f0a77b..282a4f36eb92 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c @@ -542,6 +542,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_nm(size_t priv_data_len, NL80211_FEATURE_SAE | NL80211_FEATURE_HT_IBSS | NL80211_FEATURE_VIF_TXPOWER | + NL80211_FEATURE_MAC_ON_CREATE | NL80211_FEATURE_USERSPACE_MPM; if (!ops->hw_scan) |