Search Linux Wireless

[PATCH v2] mac80211: Call commit() on channel setting

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This calls commit() on all logical interfaces of a physical interface, if the channel of it is changed. Before it works as it should, I must fix the joining process of STA and IBSS a little, which I will make tomorrow.

Signed-off-by: Alina Friedrichsen <x-alina@xxxxxxx>
---
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index c43129e..015062e 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -1173,11 +1173,19 @@ static int ieee80211_set_channel(struct wiphy *wiphy,
 				 enum nl80211_channel_type channel_type)
 {
 	struct ieee80211_local *local = wiphy_priv(wiphy);
+	struct ieee80211_sub_if_data *sdata;
+	int ret;
 
 	local->oper_channel = chan;
 	local->oper_channel_type = channel_type;
 
-	return ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL);
+	ret = ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL);
+
+	list_for_each_entry(sdata, &local->interfaces, list) {
+		ieee80211_commit(sdata);
+	}
+
+	return ret;
 }
 
 static int set_mgmt_extra_ie_sta(struct ieee80211_sub_if_data *sdata,
diff --git a/net/mac80211/wext.c b/net/mac80211/wext.c
index 1ac0516..dce1618 100644
--- a/net/mac80211/wext.c
+++ b/net/mac80211/wext.c
@@ -157,7 +157,10 @@ static int ieee80211_ioctl_siwfreq(struct net_device *dev,
 				   struct iw_request_info *info,
 				   struct iw_freq *freq, char *extra)
 {
+	struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
 	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+	struct ieee80211_sub_if_data *nsdata;
+	int ret;
 
 	if (sdata->vif.type == NL80211_IFTYPE_ADHOC)
 		sdata->u.ibss.flags &= ~IEEE80211_IBSS_AUTO_CHANNEL_SEL;
@@ -173,19 +176,25 @@ static int ieee80211_ioctl_siwfreq(struct net_device *dev,
 			else if (sdata->vif.type == NL80211_IFTYPE_STATION)
 				sdata->u.mgd.flags |=
 					IEEE80211_STA_AUTO_CHANNEL_SEL;
-			return 0;
+			ret = 0;
 		} else
-			return ieee80211_set_freq(sdata,
+			ret = ieee80211_set_freq(sdata,
 				ieee80211_channel_to_frequency(freq->m));
 	} else {
 		int i, div = 1000000;
 		for (i = 0; i < freq->e; i++)
 			div /= 10;
 		if (div > 0)
-			return ieee80211_set_freq(sdata, freq->m / div);
+			ret = ieee80211_set_freq(sdata, freq->m / div);
 		else
-			return -EINVAL;
+			ret = -EINVAL;
 	}
+
+	list_for_each_entry(nsdata, &local->interfaces, list) {
+		ieee80211_commit(nsdata);
+	}
+
+	return ret;
 }
 
 

-- 
Computer Bild Tarifsieger! GMX FreeDSL - Telefonanschluss + DSL
für nur 17,95 ¿/mtl.!* http://dsl.gmx.de/?ac=OM.AD.PD003K11308T4569a
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux