12 May, 2009

1 commit

  • "There is another problem with this piece of code. The sband will be NULL
    after second iteration on single band device and cause null pointer
    dereference. Everything is working with dual band card. Sorry, but i
    don't know how to explain this clearly in English. I have looked on the
    second patch for pid algorithm and found similar bug."

    Reported-by: Karol Szuster
    Signed-off-by: John W. Linville

    John W. Linville
     

05 May, 2009

3 commits

  • pid doesn't count with some band having more bitrates than the one
    associated the first time.
    Fix that by counting the maximal available bitrate count and allocate
    big enough space.

    Secondly, fix touching uninitialized memory which causes panics.
    Index sucked from this random memory points to the hell.
    The fix is to sort the rates on each band change.

    Signed-off-by: Jiri Slaby
    Signed-off-by: John W. Linville

    Jiri Slaby
     
  • minstrel doesn't count max rate count in fact, since it doesn't use
    a loop variable `i' and hence allocs space only for bitrates found in
    the first band.

    Fix it by involving the `i' as an index so that it traverses all the
    bands now and finds the real max bitrate count.

    Signed-off-by: Jiri Slaby
    Cc: Felix Fietkau
    Signed-off-by: John W. Linville

    Jiri Slaby
     
  • The fragmentation threshold is defined to be including the
    FCS, and the code that sets the TX_FRAGMENTED flag correctly
    accounts for those four bytes. The code that verifies this
    doesn't though, which could lead to spurious warnings and
    frames being dropped although everything is ok. Correct the
    code by accounting for the FCS.

    (JWL -- The problem is described here:
    http://article.gmane.org/gmane.linux.kernel.wireless.general/32205 )

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     

30 Apr, 2009

2 commits

  • In "mac80211: correct wext transmit power handler"
    I fixed the wext handler, but forgot to make the default of the
    user_power_level -1 (aka "auto"), so that now the transmit power
    is always set to 0, causing associations to time out and similar
    problems since we're transmitting with very little power. Correct
    this by correcting the default user_power_level to -1.

    Signed-off-by: Johannes Berg
    Bisected-by: Niel Lambrechts
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • - ieee80211_wep_init(), which is called with rtnl_lock held, blocks in
    request_module() [waiting for modprobe to load a crypto module].

    - modprobe blocks in a call to flush_workqueue(), when it closes a TTY
    [presumably when it exits].

    - The workqueue item linkwatch_event() blocks on rtnl_lock.

    There's no reason for wep_init() to be called with rtnl_lock held, so
    just move it outside the critical section.

    Signed-off-by: Alan Jenkins
    Signed-off-by: John W. Linville

    Alan Jenkins
     

22 Apr, 2009

2 commits

  • When checking whether or not a given frame needs to be
    moved to be properly aligned to a 4-byte boundary, we
    use & 4 which wasn't intended, this code should check
    the lowest two bits.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • It is expected that config interface will always succeed as mac80211
    will only request what driver supports. The exception here is when a
    device has rfkill enabled. At this time the rfkill state is unknown to
    mac80211 and config interface can fail. When this happens we deal with
    this error instead of printing a WARN.

    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Reinette Chatre
     

21 Apr, 2009

3 commits

  • "mac80211: fix basic rates setting from association response"
    introduced a copy/paste error.

    Unfortunately, this not just leads to wrong data being passed
    to the driver but is remotely exploitable for some hardware or
    driver combinations.

    Signed-off-by: Johannes Berg
    Cc: stable@kernel.org [2.6.29]
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • Currently beacon loss detection triggers after a scan. A probe request
    is sent and a message like this is printed to the log:

    wlan0: beacon loss from AP 00:12:17:e7:98:de - sending probe request

    But in fact there is no beacon loss, the beacons are just not received
    because of the ongoing scan. Fix it by updating last_beacon after
    the scan has finished.

    Reported-by: Jaswinder Singh Rajput
    Signed-off-by: Kalle Valo
    Acked-by: Johannes Berg
    Signed-off-by: John W. Linville

    Kalle Valo
     
  • Remove this unused Kconfig variable, which Intel apparently once
    promised to make use of but never did.

    Signed-off-by: Robert P. J. Day
    Acked-by: Johannes Berg
    Signed-off-by: John W. Linville

    Robert P. J. Day
     

18 Apr, 2009

2 commits


16 Apr, 2009

4 commits

  • mac80211: Fragmentation threshold (typo)

    ieee80211_ioctl_siwfrag() sets the fragmentation_threshold to 2352
    when frame fragmentation is to be disabled, yet the corresponding
    'get' function tests for 2353 bytes instead.

    This causes user-space tools to display a fragmentation threshold
    of 2352 bytes even if fragmentation has been disabled.

    Signed-off-by: Gerrit Renker
    Signed-off-by: John W. Linville

    Gerrit Renker
     
  • On Sunday 05 April 2009 11:29:38 Michael Buesch wrote:
    > On Sunday 05 April 2009 11:23:59 Jaswinder Singh Rajput wrote:
    > > With latest linus tree I am getting, .config file attached:
    > >
    > > [ 22.895051] r8169: eth0: link down
    > > [ 22.897564] ADDRCONF(NETDEV_UP): eth0: link is not ready
    > > [ 22.928047] ADDRCONF(NETDEV_UP): wlan0: link is not ready
    > > [ 22.982292] libvirtd used greatest stack depth: 4200 bytes left
    > > [ 63.709879] wlan0: authenticate with AP 00:11:95:9e:df:f6
    > > [ 63.712096] wlan0: authenticated
    > > [ 63.712127] wlan0: associate with AP 00:11:95:9e:df:f6
    > > [ 63.726831] wlan0: RX AssocResp from 00:11:95:9e:df:f6 (capab=0x471 status=0 aid=1)
    > > [ 63.726855] wlan0: associated
    > > [ 63.730093] ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
    > > [ 74.296087] wlan0: no IPv6 routers present
    > > [ 79.349044] wlan0: beacon loss from AP 00:11:95:9e:df:f6 - sending probe request
    > > [ 119.358200] wlan0: beacon loss from AP 00:11:95:9e:df:f6 - sending probe request
    > > [ 179.354292] wlan0: beacon loss from AP 00:11:95:9e:df:f6 - sending probe request
    > > [ 259.366044] wlan0: beacon loss from AP 00:11:95:9e:df:f6 - sending probe request
    > > [ 359.348292] wlan0: beacon loss from AP 00:11:95:9e:df:f6 - sending probe request
    > > [ 361.953459] packagekitd used greatest stack depth: 4160 bytes left
    > > [ 478.824258] wlan0: beacon loss from AP 00:11:95:9e:df:f6 - sending probe request
    > > [ 598.813343] wlan0: beacon loss from AP 00:11:95:9e:df:f6 - sending probe request
    > > [ 718.817292] wlan0: beacon loss from AP 00:11:95:9e:df:f6 - sending probe request
    > > [ 838.824567] wlan0: beacon loss from AP 00:11:95:9e:df:f6 - sending probe request
    > > [ 958.815402] wlan0: beacon loss from AP 00:11:95:9e:df:f6 - sending probe request
    > > [ 1078.848434] wlan0: beacon loss from AP 00:11:95:9e:df:f6 - sending probe request
    > > [ 1198.822913] wlan0: beacon loss from AP 00:11:95:9e:df:f6 - sending probe request
    > > [ 1318.824931] wlan0: beacon loss from AP 00:11:95:9e:df:f6 - sending probe request
    > > [ 1438.814157] wlan0: beacon loss from AP 00:11:95:9e:df:f6 - sending probe request
    > > [ 1558.827336] wlan0: beacon loss from AP 00:11:95:9e:df:f6 - sending probe request
    > > [ 1678.823011] wlan0: beacon loss from AP 00:11:95:9e:df:f6 - sending probe request
    > > [ 1798.830589] wlan0: beacon loss from AP 00:11:95:9e:df:f6 - sending probe request
    > > [ 1918.828044] wlan0: beacon loss from AP 00:11:95:9e:df:f6 - sending probe request
    > > [ 2038.827224] wlan0: beacon loss from AP 00:11:95:9e:df:f6 - sending probe request
    > > [ 2116.517152] wlan0: beacon loss from AP 00:11:95:9e:df:f6 - sending probe request
    > > [ 2158.840243] wlan0: beacon loss from AP 00:11:95:9e:df:f6 - sending probe request
    > > [ 2278.827427] wlan0: beacon loss from AP 00:11:95:9e:df:f6 - sending probe request
    >
    >
    > I think this message should only show if CONFIG_MAC80211_VERBOSE_DEBUG is set.
    > It's kind of expected that we lose a beacon once in a while, so we shouldn't print
    > verbose messages to the kernel log (even if they are KERN_DEBUG).
    >
    > And besides that, I think one can easily remotely trigger this message and flood the logs.
    > So it should probably _also_ be ratelimited.

    Something like this:

    Signed-off-by: Michael Buesch

    Michael Buesch
     
  • Wext makes no assumptions about the contents of
    data->txpower.fixed and data->txpower.value when
    data->txpower.disabled is set, so do not update
    the user-requested power level while disabling.

    Also, when wext configures a really _fixed_ power
    output [1], we should reject it instead of limiting it
    to the regulatory constraint. If the user wants to set
    a _limit_ [2] then we should honour that.

    [1] iwconfig wlan0 txpower 20dBm fixed
    [2] iwconfig wlan0 txpower 10dBm

    This fixes
    http://www.intellinuxwireless.org/bugzilla/show_bug.cgi?id=1942

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • Currently rx status for frames which are completed from reorder buffer
    is taken from it's cb area which is not always right, cb is not holding
    the rx status when driver uses mac80211's non-irq rx handler to pass it's
    received frames. This results in dropping almost all frames from reorder
    buffer when security is enabled by doing double decryption (first in hw,
    second in sw because of wrong rx status). This patch copies rx status into
    cb area before the frame is put into reorder buffer. After this patch,
    there is a significant improvement in throughput with ath9k + WPA2(AES).

    Signed-off-by: Vasanthakumar Thiagarajan
    Acked-by: Johannes Berg
    Cc: stable@kernel.org
    Signed-off-by: John W. Linville

    Vasanthakumar Thiagarajan
     

30 Mar, 2009

1 commit


28 Mar, 2009

22 commits

  • This patch removes all the virtual A-MPDU-queue bookkeeping from
    mac80211. Curiously, iwlwifi already does its own bookkeeping, so
    it doesn't require much changes except where it needs to handle
    starting and stopping the queues in mac80211.

    To handle the queue stop/wake properly, we rewrite the software
    queue number for aggregation frames and internally to iwlwifi keep
    track of the queues that map into the same AC queue, and only talk
    to mac80211 about the AC queue. The implementation requires calling
    two new functions, iwl_stop_queue and iwl_wake_queue instead of the
    mac80211 counterparts.

    Signed-off-by: Johannes Berg
    Cc: Reinette Chattre
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • Instead of stopping the entire AC queue when enabling aggregation
    (which was only done for hardware with aggregation queues) buffer
    the packets for each station, and release them to the pending skb
    queue once aggregation is turned on successfully.

    We get a little more code, but it becomes conceptually simpler and
    we can remove the entire virtual queue mechanism from mac80211 in
    a follow-up patch.

    This changes how mac80211 behaves towards drivers that support
    aggregation but have no hardware queues -- those drivers will now
    not be handed packets while the aggregation session is being
    established, but only after it has been fully established.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • We just found a bug in zd1211rw where it would reject
    packets in the ->tx() method but leave them modified,
    which would cause retransmit attempts with completely
    bogus skbs, eventually leading to a panic due to not
    having enough headroom in those.

    This patch adds a sanity check to mac80211 to catch
    such driver mistakes; in this case we warn and drop
    the skb.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • When TX aggregation becomes operational, we do a number of steps:
    1) print a debug message
    2) wake the virtual queue
    3) notify the driver

    Unfortunately, 1) and 3) are only done if the driver is first to
    reply to the aggregation request, it is, however, possible that the
    remote station replies before the driver! Thus, unify the code for
    this and call the new function ieee80211_agg_tx_operational in both
    places where TX aggregation can become operational.

    Additionally, rename the driver notification from
    IEEE80211_AMPDU_TX_RESUME to IEEE80211_AMPDU_TX_OPERATIONAL.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • __ieee80211_tx takes a struct ieee80211_tx_data argument, but only
    uses a few of its members, namely 'skb' and 'sta'. Make that explicit,
    so that less internal knowledge is required in ieee80211_tx_pending
    and the possibility of introducing errors here is removed.

    Signed-off-by: Johannes Berg
    Reviewed-by: Luis R. Rodriguez
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • The pending packets code is quite incomprehensible, uses memory barriers
    nobody really understands, etc. This patch reworks it entirely, using
    the queue spinlock, proper stop bits and the skb queues themselves to
    indicate whether packets are pending or not (rather than a separate
    variable like before).

    Signed-off-by: Johannes Berg
    Reviewed-by: Luis R. Rodriguez
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • Internally, mac80211 requires the skb's queue mapping to be set
    to the AC queue, not the virtual A-MPDU queue. This is not done
    correctly currently, this patch moves the code down to directly
    before the driver is invoked and adds a comment that it will be
    moved into the driver later.

    Since this requires __ieee80211_tx() to have the sta pointer,
    make sure to provide it in ieee80211_tx_pending().

    Signed-off-by: Johannes Berg
    Reviewed-by: Luis R. Rodriguez
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • Fragmentation currently uses an allocated array to store the
    fragment skbs, and then keeps track of which have been sent
    and which are still pending etc. This is rather complicated;
    make it simpler by just chaining the fragments into skb->next
    and removing from that list when sent. Also simplifies all
    code that needs to touch fragments, since it now only needs
    to walk the skb->next list.

    This is a prerequisite for fixing the stored packet code,
    which I need to do for proper aggregation packet storing.

    Signed-off-by: Johannes Berg
    Reviewed-by: Luis R. Rodriguez
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • My previous patch ("mac80211: remove mixed-cell and userspace MLME code")
    was too obvious to me, so obvious that a stupid bug crept in. The IBSS
    RX function must be invoked for IBSS, of course, not anything != IBSS.

    Reported-by: Larry Finger
    Signed-off-by: Johannes Berg
    Tested-by: Larry Finger
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • This patch changes mac80211 to not notify the rate control algorithm's
    tx_status() method when reporting status for a packet that didn't go
    through the rate control algorithm's get_rate() method.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • Add IEEE80211_HW_BEACON_FILTERING flag so that driver inform that it supports
    beacon filtering. Drivers need to call the new function
    ieee80211_beacon_loss() to notify about beacon loss.

    Signed-off-by: Kalle Valo
    Signed-off-by: John W. Linville

    Kalle Valo
     
  • When software scanning we need to disable power save so that all possible
    probe responses and beacons are received. For hardware scanning assume that
    hardware will take care of that and document that assumption.

    Signed-off-by: Kalle Valo
    Signed-off-by: John W. Linville

    Kalle Valo
     
  • Separate beacon and rx path tracking in preparation for the beacon filtering
    support. At the same time change ieee80211_associated() to look a bit simpler.

    Probe requests are now sent only after IEEE80211_PROBE_IDLE_TIME, which
    is now set to 60 seconds.

    Signed-off-by: Kalle Valo
    Signed-off-by: John W. Linville

    Kalle Valo
     
  • Currently the timer is triggering every two seconds
    (IEEE80211_MONITORING_INTERVAL). Decrease the timer to only trigger during
    data idle periods to avoid waking up CPU unnecessary. The timer will
    still trigger during idle periods, that needs to be fixed later.

    There's also a functional change that probe requests are sent only when the
    data path is idle, earlier they were sent also while there was activity
    on the data path.

    This is also preparation for the beacon filtering support. Thanks to
    Johannes Berg for the idea.

    Signed-off-by: Kalle Valo
    Signed-off-by: John W. Linville

    Kalle Valo
     
  • Neither can currently be set from userspace, so there's no
    regression potential, and neither will be supported from
    userspace since the new userspace APIs allow the SME, which
    is in userspace, to control all we need.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • We do not want to require all the drivers using cfg80211 to need to do
    this. In addition, make the error values consistent by using
    EOPNOTSUPP instead of semi-random assortment of errno values.

    Signed-off-by: Jouni Malinen
    Signed-off-by: John W. Linville

    Jouni Malinen
     
  • We do not want to require all the drivers using cfg80211 to need to do
    this or to be prepared to handle these commands when the interface is
    down.

    Signed-off-by: Jouni Malinen
    Signed-off-by: John W. Linville

    Jouni Malinen
     
  • The functionality that NL80211_CMD_SET_MGMT_EXTRA_IE provided can now
    be achieved with cleaner design by adding IE(s) into
    NL80211_CMD_TRIGGER_SCAN, NL80211_CMD_AUTHENTICATE,
    NL80211_CMD_ASSOCIATE, NL80211_CMD_DEAUTHENTICATE, and
    NL80211_CMD_DISASSOCIATE.

    Since this is a very recently added command and there are no known (or
    known planned) applications using NL80211_CMD_SET_MGMT_EXTRA_IE and
    taken into account how much extra complexity it adds to the IE
    processing we have now (and need to add in the future to fix IE order
    in couple of frames), it looks like the best option is to just remove
    the implementation of this command for now. The enum values themselves
    are left to avoid changing the nl80211 command or attribute numbers.

    Signed-off-by: Jouni Malinen
    Signed-off-by: John W. Linville

    Jouni Malinen
     
  • This file was forgotten from the quilt patch that added MLME
    primitives, so the kfree on interface removal is missing. Fix this
    potential memleak by freeing the temporary Authentication frame IEs
    from SME when the interface is being removed.

    Signed-off-by: Jouni Malinen
    Signed-off-by: John W. Linville

    Jouni Malinen
     
  • When mac80211 resumes, it currently doesn't reconfigure the interfaces
    entirely and also doesn't reconfigure BSS information -- fix this.

    Also, to be able to test this, add a debugfs file that just calls
    the suspend/resume code to see what happens when we go through that,
    without needing the time-consuming suspend/resume cycle.

    (Original version broke the build for CONFIG_PM=n. Define alternative
    functions for that situation. -- JWL)

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • This patch adds new nl80211 commands to allow user space to request
    authentication and association (and also deauthentication and
    disassociation). The commands are structured to allow separate
    authentication and association steps, i.e., the interface between
    kernel and user space is similar to the MLME SAP interface in IEEE
    802.11 standard and an user space application takes the role of the
    SME.

    The patch introduces MLME-AUTHENTICATE.request,
    MLME-{,RE}ASSOCIATE.request, MLME-DEAUTHENTICATE.request, and
    MLME-DISASSOCIATE.request primitives. The authentication and
    association commands request the actual operations in two steps
    (assuming the driver supports this; if not, separate authentication
    step is skipped; this could end up being a separate "connect"
    command).

    The initial implementation for mac80211 uses the current
    net/mac80211/mlme.c for actual sending and processing of management
    frames and the new nl80211 commands will just stop the current state
    machine from moving automatically from authentication to association.
    Future cleanup may move more of the MLME operations into cfg80211.

    The goal of this design is to provide more control of authentication and
    association process to user space without having to move the full MLME
    implementation. This should be enough to allow IEEE 802.11r FT protocol
    and 802.11s SAE authentication to be implemented. Obviously, this will
    also bring the extra benefit of not having to use WEXT for association
    requests with mac80211. An example implementation of a user space SME
    using the new nl80211 commands is available for wpa_supplicant.

    This patch is enough to get IEEE 802.11r FT protocol working with
    over-the-air mechanism (over-the-DS will need additional MLME
    primitives for handling the FT Action frames).

    Signed-off-by: Jouni Malinen
    Signed-off-by: John W. Linville

    Jouni Malinen
     
  • Add new nl80211 event notifications (and a new multicast group, "mlme")
    for informing user space about received and processed Authentication,
    (Re)Association Response, Deauthentication, and Disassociation frames in
    station and IBSS modes (i.e., MLME SAP interface primitives
    MLME-AUTHENTICATE.confirm, MLME-ASSOCIATE.confirm,
    MLME-REASSOCIATE.confirm, MLME-DEAUTHENTICATE.indicate, and
    MLME-DISASSOCIATE.indication). The event data is encapsulated as the 802.11
    management frame since we already have the frame in that format and it
    includes all the needed information.

    This is the initial step in providing MLME SAP interface for
    authentication and association with nl80211. In other words, kernel code
    will act as the MLME and a user space application can control it as the
    SME.

    Signed-off-by: Jouni Malinen
    Signed-off-by: John W. Linville

    Jouni Malinen