mac80211: add IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF

Linux-MTD Mailing List linux-mtd at lists.infradead.org
Sat Sep 29 10:59:43 EDT 2012


Gitweb:     http://git.infradead.org/?p=mtd-2.6.git;a=commit;h=6d71117a279aa30574a8af6c7348570c292285c2
Commit:     6d71117a279aa30574a8af6c7348570c292285c2
Parent:     f142c6b906da451ded2c7a8e17b2a0e6fee3e891
Author:     Johannes Berg <johannes.berg at intel.com>
AuthorDate: Tue Jun 19 17:19:44 2012 +0200
Committer:  Johannes Berg <johannes.berg at intel.com>
CommitDate: Mon Aug 20 13:58:23 2012 +0200

    mac80211: add IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF
    
    Some devices like the current iwlwifi implementation
    require that the P2P interface address match the P2P
    Device address (only one P2P interface is supported.)
    Add the HW flag IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF
    that allows drivers to request that P2P Interfaces
    added while a P2P Device is active get the same MAC
    address by default.
    
    Signed-off-by: Johannes Berg <johannes.berg at intel.com>
---
 include/net/mac80211.h |    5 +++++
 net/mac80211/iface.c   |   15 ++++++++++++++-
 2 files changed, 19 insertions(+), 1 deletions(-)

diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index edc235c..71f8262 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -1241,6 +1241,10 @@ struct ieee80211_tx_control {
  *	queue mapping in order to use different queues (not just one per AC)
  *	for different virtual interfaces. See the doc section on HW queue
  *	control for more details.
+ *
+ * @IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF: Use the P2P Device address for any
+ *	P2P Interface. This will be honoured even if more than one interface
+ *	is supported.
  */
 enum ieee80211_hw_flags {
 	IEEE80211_HW_HAS_RATE_CONTROL			= 1<<0,
@@ -1268,6 +1272,7 @@ enum ieee80211_hw_flags {
 	IEEE80211_HW_AP_LINK_PS				= 1<<22,
 	IEEE80211_HW_TX_AMPDU_SETUP_IN_HW		= 1<<23,
 	IEEE80211_HW_SCAN_WHILE_IDLE			= 1<<24,
+	IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF		= 1<<25,
 };
 
 /**
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index 152aeea..59f8adc 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -1313,7 +1313,6 @@ static void ieee80211_assign_perm_addr(struct ieee80211_local *local,
 	    local->hw.wiphy->n_addresses <= 1)
 		return;
 
-
 	mutex_lock(&local->iflist_mtx);
 
 	switch (type) {
@@ -1331,6 +1330,19 @@ static void ieee80211_assign_perm_addr(struct ieee80211_local *local,
 		}
 		/* keep default if no AP interface present */
 		break;
+	case NL80211_IFTYPE_P2P_CLIENT:
+	case NL80211_IFTYPE_P2P_GO:
+		if (local->hw.flags & IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF) {
+			list_for_each_entry(sdata, &local->interfaces, list) {
+				if (sdata->vif.type != NL80211_IFTYPE_P2P_DEVICE)
+					continue;
+				if (!ieee80211_sdata_running(sdata))
+					continue;
+				memcpy(perm_addr, sdata->vif.addr, ETH_ALEN);
+				goto out_unlock;
+			}
+		}
+		/* otherwise fall through */
 	default:
 		/* assign a new address if possible -- try n_addresses first */
 		for (i = 0; i < local->hw.wiphy->n_addresses; i++) {
@@ -1405,6 +1417,7 @@ static void ieee80211_assign_perm_addr(struct ieee80211_local *local,
 		break;
 	}
 
+ out_unlock:
 	mutex_unlock(&local->iflist_mtx);
 }
 



More information about the linux-mtd-cvs mailing list