linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Adam Wozniak <awozniak@irobot.com>
To: Johannes Berg <johannes@sipsolutions.net>
Cc: Christian Lamparter <chunkeey@googlemail.com>,
	Derek Smithies <derek@indranet.co.nz>,
	linux-wireless@vger.kernel.org, nbd@openwrt.org
Subject: Re: compat-wireless and minstrel
Date: Fri, 13 Nov 2009 14:35:05 -0800	[thread overview]
Message-ID: <4AFDDF19.8060202@irobot.com> (raw)
In-Reply-To: <1258097352.3899.75.camel@johannes.local>

Johannes Berg wrote:
> it would help if you used diff -u
> johannes
>   
Will do.

I think the patch below is most correct.  However, I still have problems 
when a third station joins the ad-hoc network.
When the third station joins, it doesn't always show a complete set of 
bitrates in the rc_stats files for the other two stations.  For one (I 
assume this is the beacon OR whoever sent a probe response) it shows 
all, but for the other, it shows only one or two.  This is remarkably 
similar to the failure mode I was seeing before, so much so that there 
were probably cases where I confused the two issues.
I've traced it down to this bit in rx.c in prepare_for_handlers():

        case NL80211_IFTYPE_ADHOC:
                [ stuff deleted ]
                } else if (!rx->sta) {
                        int rate_idx;
                        if (rx->status->flag & RX_FLAG_HT)
                                rate_idx = 0; /* TODO: HT rates */
                        else
                                rate_idx = rx->status->rate_idx;

                        rx->sta = ieee80211_ibss_add_sta(sdata, bssid, 
hdr->addr2,
                                BIT(rate_idx));
                }
                break;

I don't think this is right.  I know the issue is here, because if I 
change to "BIT(rate_idx) | 0xfff" the problem corrects.  Either we need 
to (a) set it properly here or (b) make sure something else happens 
before or after.  I'm not sure we have enough context here to do (a).

Thoughts?

patch for ibss.c :

--- compat-wireless-2009-11-09/net/mac80211/ibss.c    2009-11-08 
21:15:06.000000000 -0800
+++ compat-wireless-2009-11-09d/net/mac80211/ibss.c    2009-11-13 
14:17:37.935556965 -0800
@@ -246,9 +246,13 @@ static void ieee80211_rx_bss_info(struct
     if (!channel || channel->flags & IEEE80211_CHAN_DISABLED)
         return;
 
+    supp_rates = ieee80211_sta_get_rates(local, elems, band);
+
+    /* make sure mandatory rates are always added */
+    supp_rates |= ieee80211_mandatory_rates(local, band);
+
     if (sdata->vif.type == NL80211_IFTYPE_ADHOC && elems->supp_rates &&
         memcmp(mgmt->bssid, sdata->u.ibss.bssid, ETH_ALEN) == 0) {
-        supp_rates = ieee80211_sta_get_rates(local, elems, band);
 
         rcu_read_lock();
 
@@ -257,12 +261,10 @@ static void ieee80211_rx_bss_info(struct
             u32 prev_rates;
 
             prev_rates = sta->sta.supp_rates[band];
-            /* make sure mandatory rates are always added */
-            sta->sta.supp_rates[band] = supp_rates |
-                ieee80211_mandatory_rates(local, band);
+            sta->sta.supp_rates[band] = supp_rates;
 
+            if (sta->sta.supp_rates[band] != prev_rates) {
 #ifdef CONFIG_MAC80211_IBSS_DEBUG
-            if (sta->sta.supp_rates[band] != prev_rates)
                 printk(KERN_DEBUG "%s: updated supp_rates set "
                     "for %pM based on beacon info (0x%llx | "
                     "0x%llx -> 0x%llx)\n",
@@ -272,6 +274,8 @@ static void ieee80211_rx_bss_info(struct
                     (unsigned long long) supp_rates,
                     (unsigned long long) sta->sta.supp_rates[band]);
 #endif
+                rate_control_rate_init(sta);
+            }
         } else
             ieee80211_ibss_add_sta(sdata, mgmt->bssid, mgmt->sa, 
supp_rates);
 
@@ -415,6 +419,15 @@ struct sta_info *ieee80211_ibss_add_sta(
     sta->sta.supp_rates[band] = supp_rates |
             ieee80211_mandatory_rates(local, band);
 
+#ifdef CONFIG_MAC80211_IBSS_DEBUG
+    printk(KERN_DEBUG "%s: initialized supp_rates set "
+        "for %pM (0x%llx) (band %d)\n",
+        sdata->dev->name,
+        sta->sta.addr,
+        (unsigned long long) sta->sta.supp_rates[band],
+        band);
+#endif
+
     rate_control_rate_init(sta);
 
     if (sta_info_insert(sta))



  reply	other threads:[~2009-11-13 22:35 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-04  1:13 compat-wireless and minstrel Adam Wozniak
2009-11-04 15:53 ` Christian Lamparter
2009-11-04 15:57   ` Luis R. Rodriguez
2009-11-04 21:01   ` Derek Smithies
2009-11-04 21:42     ` Christian Lamparter
2009-11-04 21:46       ` Adam Wozniak
2009-11-04 21:50         ` Luis R. Rodriguez
2009-11-04 21:53           ` Adam Wozniak
2009-11-04 21:55             ` Luis R. Rodriguez
2009-11-04 22:18           ` Christian Lamparter
2009-11-04 22:20             ` Luis R. Rodriguez
2009-11-04 22:31               ` Christian Lamparter
2009-11-04 22:34                 ` Luis R. Rodriguez
2009-11-10 22:59     ` Adam Wozniak
2009-11-11  0:55       ` Derek Smithies
2009-11-11  1:08         ` Adam Wozniak
2009-11-11  2:09           ` Derek Smithies
2009-11-12 19:43             ` Adam Wozniak
2009-11-12 20:03               ` Christian Lamparter
2009-11-12 22:38                 ` Adam Wozniak
2009-11-12 22:41                   ` Adam Wozniak
2009-11-13  7:29                     ` Johannes Berg
2009-11-13 22:35                       ` Adam Wozniak [this message]
2009-11-14  9:30                         ` Johannes Berg
2009-11-16 17:25                           ` Adam Wozniak
2009-11-16 17:27                             ` Johannes Berg
2009-11-16 17:57                               ` Adam Wozniak
2009-11-16 18:07                                 ` Johannes Berg
2009-11-16 21:02                                 ` Adhoc networking, was " Derek Smithies
2009-11-16 22:39                                   ` Adam Wozniak
2009-11-16 23:13                                     ` Derek Smithies
2009-11-16 23:39                                       ` Adam Wozniak
2009-11-16 23:43                                         ` Felix Fietkau
2009-11-17  0:20                                         ` Derek Smithies
2009-11-17  7:38                                           ` Johannes Berg
2009-11-17 17:39                                             ` Adam Wozniak
2009-11-23 20:21                                               ` Adam Wozniak
2009-11-23 23:27                                                 ` Johannes Berg
2009-11-24  0:57                                                   ` [PATCH 0/2] mac80211: IBSS rates Adam Wozniak
2009-11-24 17:05                                                     ` [PATCH v2 " Adam Wozniak
2009-11-24  0:57                                                   ` [PATCH 1/2] mac80211: supp_rates initialization and rate control notification Adam Wozniak
2009-11-24  1:16                                                     ` Johannes Berg
2009-11-24 17:05                                                     ` [PATCH v2 " Adam Wozniak
2009-11-24 17:13                                                       ` Johannes Berg
2009-11-24  0:57                                                   ` [PATCH 2/2] mac80211: minstrel try all rates Adam Wozniak
2009-11-24  1:11                                                     ` Johannes Berg
2009-11-24 16:13                                                       ` Adam Wozniak
2009-11-24 16:17                                                         ` Adam Wozniak
2009-11-24 17:17                                                       ` Adam Wozniak
2009-11-24 17:41                                                         ` Johannes Berg
2009-11-24 17:55                                                           ` Adam Wozniak
2009-11-24 17:58                                                             ` Johannes Berg
2009-11-24 18:34                                                               ` Adam Wozniak
2009-11-24 18:36                                                                 ` Johannes Berg
2009-11-24 18:43                                                                   ` Adam Wozniak
2009-11-24 19:00                                                                     ` Johannes Berg
2009-11-24 19:44                                                                       ` Adam Wozniak
2009-11-24 19:47                                                                         ` Johannes Berg
2009-11-24 19:58                                                                           ` Adam Wozniak
2009-11-24 17:05                                                     ` [PATCH v2 " Adam Wozniak
2009-11-24 17:14                                                       ` Johannes Berg
2009-11-12 23:35                   ` compat-wireless and minstrel Christian Lamparter
2009-11-13  0:25                     ` Adam Wozniak
2009-11-13  0:32                     ` Adam Wozniak

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=4AFDDF19.8060202@irobot.com \
    --to=awozniak@irobot.com \
    --cc=chunkeey@googlemail.com \
    --cc=derek@indranet.co.nz \
    --cc=johannes@sipsolutions.net \
    --cc=linux-wireless@vger.kernel.org \
    --cc=nbd@openwrt.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).