Search Linux Wireless

Re: [PATCH] cfg80211: Parse channel_type in NL80211_CMD_JOIN_IBSS

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

 



On Thursday 13 May 2010 06:07:37 Benoit Papillault wrote:
> The channel_type field is filled by iw and parse by cfg80211 before
> being sent to mac80211 for instance (we also check if the specified
> channel is capable of ht40+, ht40- or ht20). This information is needed
> to properly configure an HT IBSS.
> 
> It requires a patch to iw to fill this field.
> 
> Signed-off-by: Benoit Papillault <benoit.papillault@xxxxxxx>
> ---
>  include/net/cfg80211.h |    1 +
>  net/wireless/nl80211.c |   20 ++++++++++++++++----
>  2 files changed, 17 insertions(+), 4 deletions(-)
> 
> diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
> index b44a2e5..5ead439 100644
> --- a/include/net/cfg80211.h
> +++ b/include/net/cfg80211.h
> @@ -806,6 +806,7 @@ struct cfg80211_ibss_params {
>  	u8 *ssid;
>  	u8 *bssid;
>  	struct ieee80211_channel *channel;
> +	enum nl80211_channel_type channel_type;
>  	u8 *ie;
>  	u8 ssid_len, ie_len;
>  	u16 beacon_interval;
> diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
> index aaa1aad..039c13f 100644
> --- a/net/wireless/nl80211.c
> +++ b/net/wireless/nl80211.c
> @@ -3879,6 +3879,7 @@ static int nl80211_join_ibss(struct sk_buff *skb,
> struct genl_info *info) struct cfg80211_ibss_params ibss;
>  	struct wiphy *wiphy;
>  	struct cfg80211_cached_keys *connkeys = NULL;
> +	enum nl80211_channel_type channel_type = NL80211_CHAN_NO_HT;
>  	int err;
> 
>  	memset(&ibss, 0, sizeof(ibss));
> @@ -3900,6 +3901,17 @@ static int nl80211_join_ibss(struct sk_buff *skb,
> struct genl_info *info) return -EINVAL;
>  	}
> 
> +	if (info->attrs[NL80211_ATTR_WIPHY_CHANNEL_TYPE]) {
> +		channel_type = nla_get_u32(
> +			info->attrs[NL80211_ATTR_WIPHY_CHANNEL_TYPE]);
> +		if (channel_type != NL80211_CHAN_NO_HT &&
> +		    channel_type != NL80211_CHAN_HT20 &&
> +		    channel_type != NL80211_CHAN_HT40PLUS &&
> +		    channel_type != NL80211_CHAN_HT40MINUS)
> +			return -EINVAL;
> +	}
> +	ibss.channel_type = channel_type;
> +
>  	rtnl_lock();
> 
>  	err = get_rdev_dev_by_info_ifindex(info, &rdev, &dev);
> @@ -3933,11 +3945,11 @@ static int nl80211_join_ibss(struct sk_buff *skb,
> struct genl_info *info) ibss.ie_len =
> nla_len(info->attrs[NL80211_ATTR_IE]);
>  	}
> 
> -	ibss.channel = ieee80211_get_channel(wiphy,
> -		nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ]));
> +	ibss.channel = rdev_freq_to_chan(rdev,
> +		nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ]),
> +		channel_type);
>  	if (!ibss.channel ||
> -	    ibss.channel->flags & IEEE80211_CHAN_NO_IBSS ||
> -	    ibss.channel->flags & IEEE80211_CHAN_DISABLED) {
> +	    ibss.channel->flags & IEEE80211_CHAN_NO_IBSS) {
>  		err = -EINVAL;
>  		goto out;
>  	}

do you think this could also be used to configure "pure G" channels? remember 
the discussion we had about the basic rate set in IBSS? if we could use this 
to configure the channel as "pure G" we could use a basic rate set with higher 
rates (ERP mandatory rates: 1, 2, 5.5, 11, 6, 12, 24). i still need this 
feature in order to configure higher-thruput G-only IBSS...

bruno
--
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