Search Linux Wireless

Re: [PATCH] mac80211: Fix setting TX power on monitor interfaces

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

 



Hi,

> Since monitor_sdata->vif.type is also NL80211_IFTYPE_MONITOR,
> the warning would still appear with the patch to cfg.c, so I excluded 
> that case from the WARN_ON_ONCE condition.
> 
> I hope that makes sense?!

Yeah, looks good.

>  	if (wdev) {
>  		sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
>  
> +		if (sdata->vif.type == NL80211_IFTYPE_MONITOR) {
> +			sdata = rtnl_dereference(local->monitor_sdata);
> +			if (!sdata)
> +				return -EOPNOTSUPP;
> +		}

This part makes perfect sense.

>  	mutex_lock(&local->iflist_mtx);
>  	list_for_each_entry(sdata, &local->interfaces, list) {
> +		if (sdata->vif.type == NL80211_IFTYPE_MONITOR) {
> +			has_monitor = true;
> +			continue;
> +		}
>  		sdata->user_power_level = local->user_power_level;
>  		if (txp_type != sdata->vif.bss_conf.txpower_type)
>  			update_txp_type = true;
>  		sdata->vif.bss_conf.txpower_type = txp_type;
>  	}
> -	list_for_each_entry(sdata, &local->interfaces, list)
> +	list_for_each_entry(sdata, &local->interfaces, list) {
> +		if (sdata->vif.type == NL80211_IFTYPE_MONITOR)
> +			continue;
>  		ieee80211_recalc_txpower(sdata, update_txp_type);
> +	}
>  	mutex_unlock(&local->iflist_mtx);
>  
> +	if (has_monitor) {
> +		sdata = rtnl_dereference(local->monitor_sdata);
> +		if (sdata) {
> +			sdata->user_power_level = local->user_power_level;
> +			if (txp_type != sdata->vif.bss_conf.txpower_type)
> +				update_txp_type = true;
> +			sdata->vif.bss_conf.txpower_type = txp_type;
> +
> +			ieee80211_recalc_txpower(sdata, update_txp_type);
> +		}
> +	}

But do we really need this? I think we can probably live with just not
having monitor handled here, i.e. only have the "if monitor continue;"
part?

johannes



[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux