From patchwork Mon Nov 9 16:07:20 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lorenzo Bianconi X-Patchwork-Id: 58789 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id nA9G7RYs027171 for ; Mon, 9 Nov 2009 16:07:27 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756458AbZKIQHR (ORCPT ); Mon, 9 Nov 2009 11:07:17 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1756473AbZKIQHR (ORCPT ); Mon, 9 Nov 2009 11:07:17 -0500 Received: from mail-gx0-f212.google.com ([209.85.217.212]:48381 "EHLO mail-gx0-f212.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756457AbZKIQHQ (ORCPT ); Mon, 9 Nov 2009 11:07:16 -0500 Received: by gxk4 with SMTP id 4so387987gxk.8 for ; Mon, 09 Nov 2009 08:07:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:cc:content-type; bh=jI0yI1FZMk2lYzqN81vFfNMLdXU5p1VqgubiVdEC//c=; b=PmaRBAIonSVRvSkDMGNItzXPV++iTohOh6zoo5qo+D0gnBxWgglhLhhlyHQD9070XE SjHdJIT0UYDuuzVeIUCvqwcRxFotsvKG6f9lFIbQbAbEqcSRMmWyCw58VZYuyFsDSK8Z 1pCGGdsh1oFsvPTPxCroIBtE5BPnfxCqLkf9M= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:cc:content-type; b=b6gEeA38H7P+ZmGkhfK9GtsgBAQL0tFrVmeLkx5+91VnuheFCJdeUAu3+wcOFPzYFZ t0Q9snx6nDZhPaNcriNDP4Fdr5Ov2pBoY5m4KtXG9Rd4iRj6EcIHf5GixkaMxj+q04jG SAmPWQDE0HOcpSrOpmYnPaO9DTBMOw3F45diU= MIME-Version: 1.0 Received: by 10.239.162.129 with SMTP id l1mr800776hbd.201.1257782840343; Mon, 09 Nov 2009 08:07:20 -0800 (PST) Date: Mon, 9 Nov 2009 17:07:20 +0100 Message-ID: Subject: [PATCH]: setting bit-rate when injecting From: Lorenzo Bianconi To: linux-wireless@vger.kernel.org Cc: technoboy85@gmail.com Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org --- a/net/mac80211/tx.c 2009-11-09 16:41:15.000000000 +0100 +++ b/net/mac80211/tx.c 2009-11-09 16:50:12.000000000 +0100 @@ -505,6 +505,9 @@ struct ieee80211_tx_rate_control txrc; u32 sta_flags; + if (info->control.vif->type == NL80211_IFTYPE_MONITOR) + return TX_CONTINUE; + memset(&txrc, 0, sizeof(txrc)); sband = tx->local->hw.wiphy->bands[tx->channel->band]; @@ -932,7 +935,9 @@ (struct ieee80211_radiotap_header *) skb->data; struct ieee80211_supported_band *sband; struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - int ret = ieee80211_radiotap_iterator_init(&iterator, rthdr, skb->len); + int i, ret = ieee80211_radiotap_iterator_init(&iterator, + rthdr, skb->len); + struct ieee80211_rate *rates; sband = tx->local->hw.wiphy->bands[tx->channel->band]; @@ -979,6 +984,25 @@ tx->flags |= IEEE80211_TX_FRAGMENTED; break; + case IEEE80211_RADIOTAP_RATE: + rates = sband->bitrates; + for (i = 0; i < sband->n_bitrates; i++) { + if (rates[i].bitrate/5 == *iterator.this_arg) { + info->control.rates[0].idx = i; + break; + } + } + info->control.rates[0].flags = 0; + info->control.rates[1].idx = -1; + info->control.rates[2].idx = -1; + info->control.rates[3].idx = -1; + info->control.rates[4].idx = -1; + break; + + case IEEE80211_RADIOTAP_DATA_RETRIES: + info->control.rates[0].count = *iterator.this_arg; + break; + /* * Please update the file * Documentation/networking/mac80211-injection.txt @@ -1518,7 +1542,6 @@ struct net_device *dev) { struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); - struct ieee80211_channel *chan = local->hw.conf.channel; struct ieee80211_radiotap_header *prthdr = (struct ieee80211_radiotap_header *)skb->data; struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); @@ -1540,9 +1563,6 @@ * radar detection by itself. We can do that later by adding a * monitor flag interfaces used for AP support. */ - if ((chan->flags & (IEEE80211_CHAN_NO_IBSS | IEEE80211_CHAN_RADAR | - IEEE80211_CHAN_PASSIVE_SCAN))) - goto fail; /* check for not even having the fixed radiotap header part */ if (unlikely(skb->len < sizeof(struct ieee80211_radiotap_header)))