Change channel bandwidth without iw command
Michal Kazior
michal.kazior at tieto.com
Wed Oct 22 03:40:03 PDT 2014
On 22 October 2014 12:14, Okhwan Lee <ohlee at mwnl.snu.ac.kr> wrote:
> Hi,
>
> We are trying to implement a protocol to evaluate the performance our
> algorithm using QCA9880.
>
> To implement our protocol, a receiver have to change the bandwidth
> when a Action frame (what we define) is successfully received.
> We know that the QCA9880 can change bandwidth by using iw command in
> monitor mode.
> So, we use similar function path used by "iw dev set freq ..."
> When the receiver detects the reception of the Action frame we call
> "ieee80211_set_monitor_channel" at the end of ieee80211_rx as follows:
>
> /*************** net/mac80211/rx.c ******************/
>
> // receive action frame, change bandwidth 80 -> 20
>
> rtnl_lock(); //lock rtnetlink used in pre_doit of nl80211
> chandef = local->monitor_chandef; // copy current chandef
> chandef.width = NL80211_CHAN_WIDTH_20; // set bandwidth
> chandef.center_freq1 = 5180; // set center freq...
> ieee80211_set_monitor_channel(wiphy, &chandef);
> rtnl_unlock();
>
> /********************************************************/
If my understanding is correct you're doing it wrong.
You probably want to modify chanctx of a vif the frame is associated
with and notify the driver via appropriate mac80211 helpers instead of
the hack above. Remember to get your locking right.
> However, the receiver invokes kernel panic when receives the Action frame.
> As fas as we know, the panic is occurred in ath10k_config_chan of
> ath10k device driver.
The panic printout would be most helpful. My best guess is this
crashes in ath10k_dbg() at the very beginning of ath10k_config_chan
because ar->chandef.chan is NULL. This is probably the case since you
use monitor_chandef which is probably "empty" at the point you invoke
your code.
> To the best our knowledge, our implementation exploits same function
> path of iw command in nl80211, cfg80211, mac80211 and ath10k.
> Moreover, we confirm that the input parameters (wiphy, chandef) in our
> implementation are identical to the parameters used by iw command.
>
> Is there any reason why we cannot change bandwidth?
> Of course, iw command work correctly.
The iw set channel is for monitor interfaces only so trying to make it
work with, e.g. a station interface will bring you pain.
Michał
More information about the ath10k
mailing list