Search Linux Wireless

Re: [PATCH 02/13] cfg80211: add option for wiphys to disregard country IEs

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

 



On Thu, 2009-01-15 at 16:12 -0800, Luis R. Rodriguez wrote:
> Country IEs can be disregarded based on regulatory policy by
> a driver. This is only possible, of course, if the driver already
> has its own regulatory domain.

Can you say why? This doesn't seem useful to me.

> Signed-off-by: Luis R. Rodriguez <lrodriguez@xxxxxxxxxxx>
> ---
>  include/net/wireless.h |    4 ++++
>  net/wireless/reg.c     |   19 +++++++++++++++++--
>  2 files changed, 21 insertions(+), 2 deletions(-)
> 
> diff --git a/include/net/wireless.h b/include/net/wireless.h
> index 9e73aae..ea89958 100644
> --- a/include/net/wireless.h
> +++ b/include/net/wireless.h
> @@ -181,6 +181,9 @@ struct ieee80211_supported_band {
>   * struct wiphy - wireless hardware description
>   * @idx: the wiphy index assigned to this item
>   * @class_dev: the class device representing /sys/class/ieee80211/<wiphy-name>
> + * @ignore_country_ies: tells us the wireless core should ignore country IEs
> + *	received by itself or by other wireless drivers. This will only
> + *	apply if the driver has provided a regulatory_hint()
>   * @fw_handles_regulatory: tells us the firmware for this device
>   * 	has its own regulatory solution and cannot identify the
>   * 	ISO / IEC 3166 alpha2 it belongs to. When this is enabled
> @@ -202,6 +205,7 @@ struct wiphy {
>  	u16 interface_modes;
>  
>  	bool fw_handles_regulatory;
> +	bool ignore_country_ies;
>  
>  	/* If multiple wiphys are registered and you're handed e.g.
>  	 * a regular netdev with assigned ieee80211_ptr, you won't
> diff --git a/net/wireless/reg.c b/net/wireless/reg.c
> index ec8b3d9..01da946 100644
> --- a/net/wireless/reg.c
> +++ b/net/wireless/reg.c
> @@ -782,6 +782,20 @@ static u32 map_regdom_flags(u32 rd_flags)
>  	return channel_flags;
>  }
>  
> +/* Follow the driver's regulatory domain if a driver always prefers
> + * that. If no preference is specified we follow the driver's regulatory
> + * domain unless a country IE has been processed */
> +static int reg_follow_driver_regd(struct wiphy *wiphy)
> +{
> +	if (!wiphy->regd)
> +		return false;
> +	if (wiphy->ignore_country_ies)
> +		return true;
> +	if (last_request->initiator != REGDOM_SET_BY_COUNTRY_IE)
> +		return true;
> +	return false;
> +}
> +
>  /**
>   * freq_reg_info - get regulatory information for the given frequency
>   * @wiphy: the wiphy for which we want to process this rule for
> @@ -883,7 +897,7 @@ static void handle_channel(struct wiphy *wiphy, enum ieee80211_band band,
>  		 *
>  		 * http://tinyurl.com/11d-clarification
>  		 */
> -		if (r == -ERANGE &&
> +		if (!reg_follow_driver_regd(wiphy) && r == -ERANGE &&
>  		    last_request->initiator == REGDOM_SET_BY_COUNTRY_IE) {
>  #ifdef CONFIG_CFG80211_REG_DEBUG
>  			printk(KERN_DEBUG "cfg80211: Leaving channel %d MHz "
> @@ -895,7 +909,8 @@ static void handle_channel(struct wiphy *wiphy, enum ieee80211_band band,
>  		/* In this case we know the country IE has at least one reg rule
>  		 * for the band so we respect its band definitions */
>  #ifdef CONFIG_CFG80211_REG_DEBUG
> -			if (last_request->initiator == REGDOM_SET_BY_COUNTRY_IE)
> +			if (!reg_follow_driver_regd(wiphy) &&
> +			    last_request->initiator == REGDOM_SET_BY_COUNTRY_IE)
>  				printk(KERN_DEBUG "cfg80211: Disabling "
>  					"channel %d MHz on %s due to "
>  					"Country IE\n",

Attachment: signature.asc
Description: This is a digitally signed message part


[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