From: Felix Fietkau <nbd@openwrt.org>
To: Alexander Simon <alexander.simon@saxnet.de>
Cc: linux-wireless@vger.kernel.org
Subject: Re: [RFC v3 3/3] mac80211: HT operation in IBSS
Date: Fri, 24 Jun 2011 21:21:06 +0200 [thread overview]
Message-ID: <4E04E3A2.60408@openwrt.org> (raw)
In-Reply-To: <1308671609.2656.10.camel@alex-2>
On 2011-06-21 5:53 PM, Alexander Simon wrote:
> My third try of an HT implementation for IBSS.
>
> * HT mode is proposed by nl80211
> * Allow frame aggregation to start for IBSS
> * Build HT IEs
>
> For fixed channel, HT mode is also fixed. Merge or join only if HT mode of some
> other BSS is the same as set by nl80211.
>
> For proposed channel, HT mode is also proposed. This means, if we join a HT
> IBSS, its HT mode is taken.
> nl80211 HT mode is taken when we join a non-HT ibss (then we "convert" it into
> one).
> If we see (from a beacon) that the IBSS has a different HT mode, we switch
> (first beacon wins, as we all have the same TSF).
>
>
> I tested this with the following scenario (using wireshark to confirm):
> * opening a IBSS with a Realtek under Windows
> * join with an ath9k station A without HT
> -> both stations joined, no HT beacons
> * join a 2nd ath9k station B in HT40+
> -> station B sending HT beacons. Interpreted by A, ignored by windows
> * A is switching to HT mode
> -> HT communication between A and B up and running. 11g with windows.
>
> Todo:
> * When switching HT mode, check if we are allow to do that.
>
> Signed-off-by: Alexander Simon<alexander.simon@saxnet.de>
> ---
> agg-rx.c | 2
> agg-tx.c | 5 +-
> ht.c | 2
> ibss.c | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++--------
> ieee80211_i.h | 2
> rx.c | 6 +-
> 6 files changed, 120 insertions(+), 19 deletions(-)
>
> diff -Nrup a/net/mac80211/ibss.c b/net/mac80211/ibss.c
> --- a/net/mac80211/ibss.c 2011-06-01 21:04:24.000000000 +0200
> +++ b/net/mac80211/ibss.c 2011-06-21 13:21:38.000000000 +0200
> @@ -310,11 +334,65 @@ static void ieee80211_rx_bss_info(struct
> } else
> sta = ieee80211_ibss_add_sta(sdata, mgmt->bssid,
> mgmt->sa, supp_rates,
> - GFP_ATOMIC);
> + elems->ht_cap_elem, GFP_ATOMIC);
> }
>
> - if (sta&& elems->wmm_info)
> - set_sta_flags(sta, WLAN_STA_WME);
> + if (sta) {
> + if (elems->wmm_info)
> + set_sta_flags(sta, WLAN_STA_WME);
> +
> + if (elems->ht_info_elem) {
> + struct ieee80211_supported_band *sband =
> + local->hw.wiphy->bands[channel->band];
> + enum nl80211_channel_type channel_type;
> +
> + channel_type =
> + ieee80211_ht_info_to_channel_type(
> + elems->ht_info_elem);
> + if (channel_type != local->_oper_channel_type) {
> + struct sk_buff *skb =
> + sdata->u.ibss.presp;
sdata->u.ibss.presp is RCU protected, you need to use rcu_dereference().
> + struct sk_buff *nskb;
> + u8 *ht_ie;
> +
> + nskb = skb_copy(skb, GFP_ATOMIC);
> + ht_ie = cfg80211_find_ie(
> + WLAN_EID_HT_CAPABILITY,
> + nskb->data + 24 +
> + sizeof(mgmt->u.beacon),
> + nskb->len - 24 -
> + sizeof(mgmt->u.beacon));
cfg80211_find_ie returns a const u8, so the compiler generates a warning.
> @@ -896,11 +980,16 @@ int ieee80211_ibss_join(struct ieee80211
> struct sk_buff *skb;
>
> skb = dev_alloc_skb(sdata->local->hw.extra_tx_headroom +
> - 36 /* bitrates */ +
> - 34 /* SSID */ +
> - 3 /* DS params */ +
> - 4 /* IBSS params */ +
> - params->ie_len);
> + sizeof(struct ieee80211_hdr_3addr) +
> + 12 /* struct ieee80211_mgmt.u.beacon */ +
> + 2 + IEEE80211_MAX_SSID_LEN /* max SSID */ +
> + 2 + 8 /* max Supported Rates */ +
> + 3 /* max DS params */ +
> + 4 /* IBSS params */ +
> + 2 + (IEEE80211_MAX_SUPP_RATES - 8)
Does not compile, missing '+'
> + 2 + sizeof(struct ieee80211_ht_cap) +
> + 2 + sizeof(struct ieee80211_ht_info) +
> + params->ie_len);
> if (!skb)
> return -ENOMEM;
>
next prev parent reply other threads:[~2011-06-24 19:21 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-21 15:45 [RFC v3 1/3] mac80211: add some helper functions Alexander Simon
2011-06-21 15:52 ` [RFC v3 2/3] nl80211: channel type attribute for IBSS Alexander Simon
2011-06-24 18:56 ` Felix Fietkau
2011-07-04 10:07 ` Alexander Simon
2011-07-04 10:10 ` Johannes Berg
2011-06-27 12:46 ` Johannes Berg
2011-06-21 15:53 ` [RFC v3 3/3] mac80211: HT operation in IBSS Alexander Simon
2011-06-24 19:21 ` Felix Fietkau [this message]
2011-06-27 12:50 ` Johannes Berg
2011-06-27 12:51 ` Johannes Berg
2011-06-21 16:01 ` patch for iw Alexander Simon
2011-06-27 12:42 ` Johannes Berg
2011-06-21 16:02 ` [RFC v3 1/3] mac80211: add some helper functions Johannes Berg
2011-06-24 19:01 ` Felix Fietkau
2011-06-27 12:46 ` Johannes Berg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4E04E3A2.60408@openwrt.org \
--to=nbd@openwrt.org \
--cc=alexander.simon@saxnet.de \
--cc=linux-wireless@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.