16 Dec, 2011

4 commits

  • Currently BAR, ADDBA and DELBA frames are always sent using AC_VO. If
    the TID for which a BA session is established is assigned to a different
    queue BAR, ADDBA and DELBA frames can "overtake" frames of the according
    BA session.

    Hence, always put BA session related frames into the same queue as the
    BA sessions data frames.

    Signed-off-by: Helmut Schaa
    Signed-off-by: John W. Linville

    Helmut Schaa
     
  • Now that IBSS no longer needs to insert stations
    from atomic context, we can get rid of all the
    special cases for that, and even get rid of the
    sta_lock (though it needs to stay as tim_lock.)

    This makes the station management code much more
    straight-forward.

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

    Johannes Berg
     
  • Currently, each AP interface will send multicast
    traffic if any interface has a station entry even
    if that station entry is allocated only. With the
    new station state management we can easily fix it
    by adding a counter that counts each authorized
    station only and send multicast traffic only when
    the correct interface has at least one authorized
    station.

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

    Johannes Berg
     
  • Station entries can have various states, the most
    important ones being auth, assoc and authorized.
    This patch prepares us for telling the driver about
    these states, we don't want to confuse drivers with
    strange transitions, so with this we enforce that
    they move in the right order between them (back and
    forth); some transitions might happen before the
    driver even knows about the station, but at least
    runtime transitions will be ordered correctly.

    As a consequence, IBSS and MESH stations will now
    have the ASSOC flag set (so they can transition to
    AUTHORIZED), and we can get rid of a special case
    in TX processing.

    When freeing a station, unwind the state so that
    other parts of the code (or drivers later) can rely
    on the transitions.

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

    Johannes Berg
     

07 Dec, 2011

1 commit

  • This fixes another regression from my "pass all
    fragments to driver at once" patches -- if the
    packet is being retransmitted then we don't go
    through all handlers, but we still need to move
    it to the skbs list, otherwise we run into the
    first warning in __ieee80211_tx() and leak the
    skb.

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

    Johannes Berg
     

29 Nov, 2011

7 commits


23 Nov, 2011

1 commit


22 Nov, 2011

4 commits

  • Drivers can usually handle fragmented packets
    much easier when they get the entire list of
    fragments at once. The only thing they need to
    do is keep enough space on the queues for up
    to ten fragments of a single MSDU.

    This allows them to implement this with a new
    operation tx_frags.

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

    Johannes Berg
     
  • This just prepares for passing the entire fragment
    list to the driver. No significant changes, but the
    TX throughput is calculated slightly differently
    now and we blink only once for each MSDU.

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

    Johannes Berg
     
  • Instead of adjusting the fragment flags at
    TX time, adjust them at fragmentation time.

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

    Johannes Berg
     
  • We are currently linking the skbs by using skb->next
    directly. This works, but the preferred way is to use
    a struct sk_buff_head instead. That also prepares for
    passing that to drivers directly.

    While at it I noticed we calculate the duration for
    fragments twice -- remove one of them.

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

    Johannes Berg
     

18 Nov, 2011

1 commit

  • The shared key authentication frame that needs to be
    encrypted (the third one in the shared key handshake)
    is directly encrypted in ieee80211_send_auth and the
    IEEE80211_TX_INTFL_DONT_ENCRYPT is set. All others
    are not encrypted, so the only way to get to this is
    erroneously on no-monitor AP side.

    Remove the special case for authentication frames to
    fix the AP shared key side when operating without
    cooked monitor interfaces -- with cooked monitor the
    IEEE80211_TX_INTFL_DONT_ENCRYPT also gets set, so we
    never get here -- an AP never encrypts auth frames.

    Without this patch, an AP operating in WEP mode with
    my no-monitor patches would erroneously encrypt all
    authentication frames, instead of none.

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

    Johannes Berg
     

12 Nov, 2011

1 commit

  • Allow setting a probe response template for an interface operating in
    AP mode. Low level drivers are notified about changes in the probe
    response template and are able to retrieve a copy of the current probe
    response. This data can, for example, be uploaded to hardware as a
    template.

    Signed-off-by: Guy Eilam
    Signed-off-by: Arik Nemtsov
    Signed-off-by: John W. Linville

    Arik Nemtsov
     

10 Nov, 2011

1 commit


09 Nov, 2011

2 commits


01 Nov, 2011

1 commit


15 Oct, 2011

1 commit


12 Oct, 2011

6 commits

  • This was another workaround for truesize "bugs".
    The reason we did this was that when we orphaned
    the SKB it wouldn't be truesize-checked later.
    Now that the check is gone (and we just charge
    the former smaller size to the socket) there's
    no longer a reason to orphan the skb here.

    Keep the skb charged to the socket until it is
    really freed (or orphaned in TX status). This
    helps flow control and allows us to get at the
    socket later for other purposes.

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

    Johannes Berg
     
  • There's no need to adjust truesize.

    The history of this was that we always ran into
    skb_truesize_bug (via skb_truesize_check) which
    has since been removed in commit 92a0acce186cd.
    skb_truesize_check() checked that truesize was
    bigger or equal to the actual allocation, which
    would trigger in mac80211 due to header adding.
    The check no longer exists and we shouldn't be
    messing with the truesize anwyay.

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

    Johannes Berg
     
  • We can now move the radiotap header parsing into
    ieee80211_monitor_start_xmit(). This moves it out of
    the hotpath, and also helps the code since now the
    radiotap header will no longer be present in
    ieee80211_xmit() etc. which is easier to understand.

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

    Johannes Berg
     
  • The purpose of this is two-fold:
    1) by moving it out of tx_data.flags, we can in
    another patch move the radiotap parsing so it
    no longer is in the hotpath
    2) if a device implements fragmentation but can
    optionally skip it, the radiotap request for
    not doing fragmentation may be honoured

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

    Johannes Berg
     
  • It's set, but never used, so kill it.

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

    Johannes Berg
     
  • Since the only way the interface can be a monitor
    interface in ieee80211_xmit() is because the frame
    came from ieee80211_monitor_start_xmit() we can
    move all the code there.

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

    Johannes Berg
     

04 Oct, 2011

1 commit


01 Oct, 2011

8 commits

  • 802.11 says:
    "Sequence numbers for QoS (+)Null frames may be
    set to any value."

    However, if we use the normal counters then peers
    will get confused with aggregation since there'll
    be holes in the sequence number sequence.

    To avoid that, neither assign a sequence number
    to QoS null frames nor put them on aggregation.

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

    Johannes Berg
     
  • The flaglock in struct sta_info has long been
    something that I wanted to get rid of, this
    finally does the conversion to atomic bitops.

    The conversion itself is straight-forward in
    most places, a few things needed to change a
    bit since we can no longer use multiple bits
    at the same time.

    On x86-64, this is a fairly significant code
    size reduction:
    text data bss dec hex
    427861 23648 1008 452517 6e7a5 before
    425383 23648 976 450007 6ddd7 after

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

    Johannes Berg
     
  • For PS-poll, there's a possible race between
    us expiring a frame and the station polling
    for it -- send it a null frame in that case.

    For uAPSD, the standard says that we have to
    send a frame in each SP, so send null if we
    don't have any other frames.

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

    Johannes Berg
     
  • Add uAPSD support to mac80211. This is probably not
    possible with all devices, so advertising it with
    the cfg80211 flag will be left up to drivers that
    want it.

    Due to my previous patches it is now a fairly
    straight-forward extension. Drivers need to have
    accurate TX status reporting for the EOSP frame.
    For drivers that buffer themselves, the provided
    APIs allow releasing the right number of frames,
    but then drivers need to set EOSP and more-data
    themselves. This is documented in more detail in
    the new code itself.

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

    Johannes Berg
     
  • For uAPSD support we'll need to have per-AC PS
    buffers. As this is a major undertaking, split
    the buffers before really adding support for
    uAPSD. This already makes some reference to the
    uapsd_queues variable, but for now that will
    never be non-zero.

    Since book-keeping is complicated, also change
    the logic for keeping a maximum of frames only
    and allow 64 frames per AC (up from 128 for a
    station).

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

    Johannes Berg
     
  • Currently, the TIM bit for a given station is set
    and cleared all over the place. Since the logic to
    set/clear it will become much more complex when we
    add uAPSD support, as a first step let's collect
    the entire logic in one place. This requires a few
    small adjustments to other places.

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

    Johannes Berg
     
  • Mark the STA entries of enabled TDLS peers with a new "peer authorized"
    flag.

    During link setup, allow special TDLS setup frames through the AP, but
    otherwise drop all packets destined to the peer. This is required by the
    TDLS (802.11z) specification in order to prevent reordering of MSDUs
    between the AP and direct paths.

    When setup completes and the peer is authorized, send data directly,
    bypassing the AP.

    In the Rx path, allow data to be received directly from TDLS peers.

    Signed-off-by: Arik Nemtsov
    Cc: Kalyan C Gaddam
    Signed-off-by: John W. Linville

    Arik Nemtsov
     
  • Relocate the mesh implementation of adding the (extended) supported
    rates IE to util.c, anticipating its use by other parts of mac80211.

    Signed-off-by: Arik Nemtsov
    Cc: Kalyan C Gaddam
    Signed-off-by: John W. Linville

    Arik Nemtsov
     

15 Sep, 2011

1 commit