10 Oct, 2018

4 commits

  • [ Upstream commit 66eb02d839e8495ae6b612e2d09ff599374b80e2 ]

    Initialize 'n' to 2 in order to take into account also the first
    packet in the estimation of max_subframe limit for a given A-MSDU
    since frag_tail pointer is NULL when ieee80211_amsdu_aggregate
    routine analyzes the second frame.

    Fixes: 6e0456b54545 ("mac80211: add A-MSDU tx support")
    Signed-off-by: Lorenzo Bianconi
    Signed-off-by: Johannes Berg
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Lorenzo Bianconi
     
  • [ Upstream commit aa58acf325b4aadeecae2bfc90658273b47dbace ]

    In the error path of changing the SKB headroom of the second
    A-MSDU subframe, we would not account for the already-changed
    length of the first frame that just got converted to be in
    A-MSDU format and thus is a bit longer now.

    Fix this by doing the necessary accounting.

    It would be possible to reorder the operations, but that would
    make the code more complex (to calculate the necessary pad),
    and the headroom expansion should not fail frequently enough
    to make that worthwhile.

    Fixes: 6e0456b54545 ("mac80211: add A-MSDU tx support")
    Signed-off-by: Johannes Berg
    Acked-by: Lorenzo Bianconi
    Signed-off-by: Johannes Berg
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Johannes Berg
     
  • [ Upstream commit 1eb507903665442360a959136dfa3234c43db085 ]

    Do not start to aggregate packets in a A-MSDU frame (converting the
    first subframe to A-MSDU, adding the header) if max_tx_fragments or
    max_amsdu_subframes limits are already exceeded by it. In particular,
    this happens when drivers set the limit to 1 to avoid A-MSDUs at all.

    Signed-off-by: Lorenzo Bianconi
    [reword commit message to be more precise]
    Signed-off-by: Johannes Berg
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Lorenzo Bianconi
     
  • [ Upstream commit 166ac9d55b0ab70b644e429be1f217fe8393cbd7 ]

    When building building AMSDU from non-linear SKB, we hit a
    kernel panic when trying to push the padding to the tail.
    Instead, put the padding at the head of the next subframe.
    This also fixes the A-MSDU subframes to not have the padding
    accounted in the length field and not have pad at all for
    the last subframe, both required by the spec.

    Fixes: 6e0456b54545 ("mac80211: add A-MSDU tx support")
    Signed-off-by: Sara Sharon
    Reviewed-by: Lorenzo Bianconi
    Signed-off-by: Johannes Berg
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Sara Sharon
     

21 Jun, 2018

1 commit

  • [ Upstream commit 914eac248d876f9c00cd1792ffec3d182c863f13 ]

    2016 spec, section 10.24.2 specifies that the block ack
    timeout in the ADD BA request is advisory.

    That means we should check the value in the response and
    act upon it (same as buffer size).

    Signed-off-by: Sara Sharon
    Signed-off-by: Luca Coelho
    Signed-off-by: Johannes Berg
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Sara Sharon
     

04 Feb, 2018

1 commit

  • [ Upstream commit 7b6ddeaf27eca72795ceeae2f0f347db1b5f9a30 ]

    When connected to a QoS/WMM AP, mac80211 should use a QoS NDP
    for probing it, instead of a regular non-QoS one, fix this.

    Change all the drivers to *not* allow QoS NDP for now, even
    though it looks like most of them should be OK with that.

    Signed-off-by: Johannes Berg
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Johannes Berg
     

05 Sep, 2017

1 commit

  • With TXQs, the AP_VLAN interfaces are resolved to their owner AP
    interface when enqueuing the frame, which makes sense since the
    frame really goes out on that as far as the driver is concerned.

    However, this introduces a problem: frames to be encrypted with
    a VLAN-specific GTK will now be encrypted with the AP GTK, since
    the information about which virtual interface to use to select
    the key is taken from the TXQ.

    Fix this by preserving info->control.vif and using that in the
    dequeue function. This now requires doing the driver-mapping
    in the dequeue as well.

    Since there's no way to filter the frames that are sitting on a
    TXQ, drop all frames, which may affect other interfaces, when an
    AP_VLAN is removed.

    Cc: stable@vger.kernel.org
    Signed-off-by: Johannes Berg

    Johannes Berg
     

16 Jun, 2017

4 commits

  • It seems like a historic accident that these return unsigned char *,
    and in many places that means casts are required, more often than not.

    Make these functions return void * and remove all the casts across
    the tree, adding a (u8 *) cast only where the unsigned char pointer
    was used directly, all done with the following spatch:

    @@
    expression SKB, LEN;
    typedef u8;
    identifier fn = { skb_push, __skb_push, skb_push_rcsum };
    @@
    - *(fn(SKB, LEN))
    + *(u8 *)fn(SKB, LEN)

    @@
    expression E, SKB, LEN;
    identifier fn = { skb_push, __skb_push, skb_push_rcsum };
    type T;
    @@
    - E = ((T *)(fn(SKB, LEN)))
    + E = fn(SKB, LEN)

    @@
    expression SKB, LEN;
    identifier fn = { skb_push, __skb_push, skb_push_rcsum };
    @@
    - fn(SKB, LEN)[0]
    + *(u8 *)fn(SKB, LEN)

    Note that the last part there converts from push(...)[0] to the
    more idiomatic *(u8 *)push(...).

    Signed-off-by: Johannes Berg
    Signed-off-by: David S. Miller

    Johannes Berg
     
  • It seems like a historic accident that these return unsigned char *,
    and in many places that means casts are required, more often than not.

    Make these functions (skb_put, __skb_put and pskb_put) return void *
    and remove all the casts across the tree, adding a (u8 *) cast only
    where the unsigned char pointer was used directly, all done with the
    following spatch:

    @@
    expression SKB, LEN;
    typedef u8;
    identifier fn = { skb_put, __skb_put };
    @@
    - *(fn(SKB, LEN))
    + *(u8 *)fn(SKB, LEN)

    @@
    expression E, SKB, LEN;
    identifier fn = { skb_put, __skb_put };
    type T;
    @@
    - E = ((T *)(fn(SKB, LEN)))
    + E = fn(SKB, LEN)

    which actually doesn't cover pskb_put since there are only three
    users overall.

    A handful of stragglers were converted manually, notably a macro in
    drivers/isdn/i4l/isdn_bsdcomp.c and, oddly enough, one of the many
    instances in net/bluetooth/hci_sock.c. In the former file, I also
    had to fix one whitespace problem spatch introduced.

    Signed-off-by: Johannes Berg
    Signed-off-by: David S. Miller

    Johannes Berg
     
  • A common pattern with skb_put() is to just want to memcpy()
    some data into the new space, introduce skb_put_data() for
    this.

    An spatch similar to the one for skb_put_zero() converts many
    of the places using it:

    @@
    identifier p, p2;
    expression len, skb, data;
    type t, t2;
    @@
    (
    -p = skb_put(skb, len);
    +p = skb_put_data(skb, data, len);
    |
    -p = (t)skb_put(skb, len);
    +p = skb_put_data(skb, data, len);
    )
    (
    p2 = (t2)p;
    -memcpy(p2, data, len);
    |
    -memcpy(p, data, len);
    )

    @@
    type t, t2;
    identifier p, p2;
    expression skb, data;
    @@
    t *p;
    ...
    (
    -p = skb_put(skb, sizeof(t));
    +p = skb_put_data(skb, data, sizeof(t));
    |
    -p = (t *)skb_put(skb, sizeof(t));
    +p = skb_put_data(skb, data, sizeof(t));
    )
    (
    p2 = (t2)p;
    -memcpy(p2, data, sizeof(*p));
    |
    -memcpy(p, data, sizeof(*p));
    )

    @@
    expression skb, len, data;
    @@
    -memcpy(skb_put(skb, len), data, len);
    +skb_put_data(skb, data, len);

    (again, manually post-processed to retain some comments)

    Reviewed-by: Stephen Hemminger
    Signed-off-by: Johannes Berg
    Signed-off-by: David S. Miller

    Johannes Berg
     
  • There were many places that my previous spatch didn't find,
    as pointed out by yuan linyu in various patches.

    The following spatch found many more and also removes the
    now unnecessary casts:

    @@
    identifier p, p2;
    expression len;
    expression skb;
    type t, t2;
    @@
    (
    -p = skb_put(skb, len);
    +p = skb_put_zero(skb, len);
    |
    -p = (t)skb_put(skb, len);
    +p = skb_put_zero(skb, len);
    )
    ... when != p
    (
    p2 = (t2)p;
    -memset(p2, 0, len);
    |
    -memset(p, 0, len);
    )

    @@
    type t, t2;
    identifier p, p2;
    expression skb;
    @@
    t *p;
    ...
    (
    -p = skb_put(skb, sizeof(t));
    +p = skb_put_zero(skb, sizeof(t));
    |
    -p = (t *)skb_put(skb, sizeof(t));
    +p = skb_put_zero(skb, sizeof(t));
    )
    ... when != p
    (
    p2 = (t2)p;
    -memset(p2, 0, sizeof(*p));
    |
    -memset(p, 0, sizeof(*p));
    )

    @@
    expression skb, len;
    @@
    -memset(skb_put(skb, len), 0, len);
    +skb_put_zero(skb, len);

    Apply it to the tree (with one manual fixup to keep the
    comment in vxlan.c, which spatch removed.)

    Signed-off-by: Johannes Berg
    Signed-off-by: David S. Miller

    Johannes Berg
     

17 May, 2017

1 commit

  • CoDel can be too aggressive if a station sends at a very low rate,
    leading reduced throughput. This gets worse the more stations are
    present, as each station gets more bursty the longer the round-robin
    scheduling between stations takes.

    This adds dynamic adjustment of CoDel parameters per station. It uses
    the rate selection information to estimate throughput and sets more
    lenient CoDel parameters if the estimated throughput is below a
    threshold (modified by the number of active stations).

    A new callback is added that drivers can use to notify mac80211 about
    changes in expected throughput, so the same adjustment can be made for
    cards that implement rate control in firmware. Drivers that don't use
    this will just get the default parameters.

    Signed-off-by: Toke Høiland-Jørgensen
    [remove currently unnecessary EXPORT_SYMBOL, fix kernel-doc, remove
    inline annotation]
    Signed-off-by: Johannes Berg

    Toke Høiland-Jørgensen
     

28 Apr, 2017

1 commit

  • Existing API 'ieee80211_get_sdata_band' returns default 2 GHz band even
    if the channel context configuration is NULL. This crashes for chipsets
    which support 5 Ghz alone when it tries to access members of 'sband'.
    Channel context configuration can be NULL in multivif case and when
    channel switch is in progress (or) when it fails. Fix this by replacing
    the API 'ieee80211_get_sdata_band' with 'ieee80211_get_sband' which
    returns a NULL pointer for sband when the channel configuration is NULL.

    An example scenario is as below:

    In multivif mode (AP + STA) with drivers like ath10k, when we do a
    channel switch in the AP vif (which has a number of clients connected)
    and a STA vif which is connected to some other AP, when the channel
    switch in AP vif fails, while the STA vifs tries to connect to the
    other AP, there is a window where the channel context is NULL/invalid
    and this results in a crash while the clients connected to the AP vif
    tries to reconnect and this race is very similar to the one investigated
    by Michal in https://patchwork.kernel.org/patch/3788161/ and this does
    happens with hardware that supports 5Ghz alone after long hours of
    testing with continuous channel switch on the AP vif

    ieee80211 phy0: channel context reservation cannot be finalized because
    some interfaces aren't switching
    wlan0: failed to finalize CSA, disconnecting
    wlan0-1: deauthenticating from 8c:fd:f0:01:54:9c by local choice
    (Reason: 3=DEAUTH_LEAVING)

    WARNING: CPU: 1 PID: 19032 at net/mac80211/ieee80211_i.h:1013 sta_info_alloc+0x374/0x3fc [mac80211]
    [] (sta_info_alloc [mac80211])
    [] (ieee80211_add_station [mac80211]))
    [] (nl80211_new_station [cfg80211])

    Unable to handle kernel NULL pointer dereference at virtual
    address 00000014
    pgd = d5f4c000
    Internal error: Oops: 17 [#1] PREEMPT SMP ARM
    PC is at sta_info_alloc+0x380/0x3fc [mac80211]
    LR is at sta_info_alloc+0x37c/0x3fc [mac80211]
    [] (sta_info_alloc [mac80211])
    [] (ieee80211_add_station [mac80211])
    [] (nl80211_new_station [cfg80211]))

    Cc: Michal Kazior
    Signed-off-by: Mohammed Shafi Shajakhan
    Signed-off-by: Johannes Berg

    Mohammed Shafi Shajakhan
     

07 Mar, 2017

1 commit


26 Jan, 2017

1 commit


18 Jan, 2017

1 commit


15 Jan, 2017

1 commit

  • …inux/kernel/git/jberg/mac80211-next

    Johannes Berg says:

    ====================
    For 4.11, we seem to have more than in the past few releases:
    * socket owner support for connections, so when the wifi
    manager (e.g. wpa_supplicant) is killed, connections are
    torn down - wpa_supplicant is critical to managing certain
    operations, and can opt in to this where applicable
    * minstrel & minstrel_ht updates to be more efficient (time and space)
    * set wifi_acked/wifi_acked_valid for skb->destructor use in the
    kernel, which was already available to userspace
    * don't indicate new mesh peers that might be used if there's no
    room to add them
    * multicast-to-unicast support in mac80211, for better medium usage
    (since unicast frames can use *much* higher rates, by ~3 orders of
    magnitude)
    * add API to read channel (frequency) limitations from DT
    * add infrastructure to allow randomizing public action frames for
    MAC address privacy (still requires driver support)
    * many cleanups and small improvements/fixes across the board
    ====================

    Signed-off-by: David S. Miller <davem@davemloft.net>

    David S. Miller
     

13 Jan, 2017

1 commit

  • Station structure is considered as not uploaded
    (to driver) until drv_sta_state() finishes. This
    call is however done after the structure is
    attached to mac80211 internal lists and hashes.
    This means mac80211 can lookup (and use) station
    structure before it is uploaded to a driver.

    If this happens (structure exists, but
    sta->uploaded is false) fast_tx path can still be
    taken. Deep in the fastpath call the sta->uploaded
    is checked against to derive "pubsta" argument for
    ieee80211_get_txq(). If sta->uploaded is false
    (and sta is actually non-NULL) ieee80211_get_txq()
    effectively downgraded to vif->txq.

    At first glance this may look innocent but coerces
    mac80211 into a state that is almost guaranteed
    (codel may drop offending skb) to crash because a
    station-oriented skb gets queued up on
    vif-oriented txq. The ieee80211_tx_dequeue() ends
    up looking at info->control.flags and tries to use
    txq->sta which in the fail case is NULL.

    It's probably pointless to pretend one can
    downgrade skb from sta-txq to vif-txq.

    Since downgrading unicast traffic to vif->txq must
    not be done there's no txq to put a frame on if
    sta->uploaded is false. Therefore the code is made
    to fall back to regular tx() op path if the
    described condition is hit.

    Only drivers using wake_tx_queue were affected.

    Example crash dump before fix:

    Unable to handle kernel paging request at virtual address ffffe26c
    PC is at ieee80211_tx_dequeue+0x204/0x690 [mac80211]
    [] (ieee80211_tx_dequeue [mac80211]) from
    [] (ath10k_mac_tx_push_txq+0x54/0x1c0 [ath10k_core])
    [] (ath10k_mac_tx_push_txq [ath10k_core]) from
    [] (ath10k_htt_txrx_compl_task+0xd78/0x11d0 [ath10k_core])
    [] (ath10k_htt_txrx_compl_task [ath10k_core])
    [] (ath10k_pci_napi_poll+0x54/0xe8 [ath10k_pci])
    [] (ath10k_pci_napi_poll [ath10k_pci]) from
    [] (net_rx_action+0xac/0x160)

    Reported-by: Mohammed Shafi Shajakhan
    Signed-off-by: Michal Kazior
    Signed-off-by: Johannes Berg

    Michal Kazior
     

02 Jan, 2017

1 commit

  • In ieee80211_xmit_fast(), 'info' is initialized to point to the skb
    that's passed in, but that skb may later be replaced by a clone (if
    it was shared), leading to an invalid pointer.

    This can lead to use-after-free and also later crashes since the
    real SKB's info->hw_queue doesn't get initialized properly.

    Fix this by assigning info only later, when it's needed, after the
    skb replacement (may have) happened.

    Cc: stable@vger.kernel.org
    Reported-by: Ben Greear
    Signed-off-by: Johannes Berg

    Johannes Berg
     

15 Dec, 2016

1 commit


13 Dec, 2016

2 commits

  • These functions drifts TSF timers, not TBTT.

    Signed-off-by: Masashi Honma
    Signed-off-by: Johannes Berg

    Masashi Honma
     
  • Add the ability for an AP (and associated VLANs) to perform
    multicast-to-unicast conversion for ARP, IPv4 and IPv6 frames
    (possibly within 802.1Q). If enabled, such frames are to be sent
    to each station separately, with the DA replaced by their own
    MAC address rather than the group address.

    Note that this may break certain expectations of the receiver,
    such as the ability to drop unicast IP packets received within
    multicast L2 frames, or the ability to not send ICMP destination
    unreachable messages for packets received in L2 multicast (which
    is required, but the receiver can't tell the difference if this
    new option is enabled.)

    This also doesn't implement the 802.11 DMS (directed multicast
    service).

    Signed-off-by: Michael Braun
    [use true/false, rename label to the correct "multicast",
    use __be16 for ethertype and network order for constants]
    Signed-off-by: Johannes Berg

    Michael Braun
     

23 Nov, 2016

1 commit

  • All conflicts were simple overlapping changes except perhaps
    for the Thunder driver.

    That driver has a change_mtu method explicitly for sending
    a message to the hardware. If that fails it returns an
    error.

    Normally a driver doesn't need an ndo_change_mtu method becuase those
    are usually just range changes, which are now handled generically.
    But since this extra operation is needed in the Thunder driver, it has
    to stay.

    However, if the message send fails we have to restore the original
    MTU before the change because the entire call chain expects that if
    an error is thrown by ndo_change_mtu then the MTU did not change.
    Therefore code is added to nicvf_change_mtu to remember the original
    MTU, and to restore it upon nicvf_update_hw_max_frs() failue.

    Signed-off-by: David S. Miller

    David S. Miller
     

15 Nov, 2016

3 commits

  • A-MSDU aggregation alters the QoS header after a frame has been
    enqueued, so it needs to be ready before enqueue and not overwritten
    again afterwards

    Fixes: bb42f2d13ffc ("mac80211: Move reorder-sensitive TX handlers to after TXQ dequeue")
    Signed-off-by: Felix Fietkau
    Acked-by: Toke Høiland-Jørgensen
    Signed-off-by: Johannes Berg

    Felix Fietkau
     
  • The call to ieee80211_txq_enqueue overwrites the vif pointer with the
    codel enqueue time, so setting it just before that call makes no sense.

    Signed-off-by: Felix Fietkau
    Acked-by: Toke Høiland-Jørgensen
    Signed-off-by: Johannes Berg

    Felix Fietkau
     
  • The sequence number counter is used to derive the starting sequence
    number. Since that counter is updated on tx dequeue, the A-MPDU flag
    needs to be up to date at the tme of dequeue as well.

    This patch prevents sending more A-MPDU frames after the session has
    been terminated and also ensures that aggregation starts right after the
    session has been established

    Fixes: bb42f2d13ffc ("mac80211: Move reorder-sensitive TX handlers to after TXQ dequeue")
    Signed-off-by: Felix Fietkau
    Acked-by: Toke Høiland-Jørgensen
    Signed-off-by: Johannes Berg

    Felix Fietkau
     

19 Oct, 2016

1 commit

  • Currently mac80211 determines whether HW does fragmentation
    by checking whether the set_frag_threshold callback is set
    or not.
    However, some drivers may want to set the HW fragmentation
    capability depending on HW generation.
    Allow this by checking a HW flag instead of checking the
    callback.

    Signed-off-by: Sara Sharon
    [added the flag to ath10k and wlcore]
    Signed-off-by: Luca Coelho
    Signed-off-by: Johannes Berg

    Sara Sharon
     

17 Oct, 2016

2 commits


12 Oct, 2016

1 commit

  • This patch adds filtering for multicast data packets on AP_VLAN
    interfaces that have no authorized station connected and changes
    filtering on AP interfaces to not count stations assigned to
    AP_VLAN interfaces.

    This saves airtime and avoids waking up other stations currently
    authorized in this BSS. When using WPA, the packets dropped could
    not be decrypted by any station.

    The behaviour when there are no AP_VLAN interfaces is left unchanged.

    When there are AP_VLAN interfaces, this patch
    1. adds filtering multicast data packets sent on AP_VLAN interfaces
    that have no authorized station connected.
    No filtering happens on 4addr AP_VLAN interfaces.
    2. makes filtering of multicast data packets sent on AP interfaces
    depend on the number of authorized stations in this bss not
    assigned to an AP_VLAN interface.

    Therefore, a new num_mcast_sta counter is added for AP_VLAN interfaces.
    The existing one for AP interfaces is altered to not track stations
    assigned to an AP_VLAN interface.

    The new counter is exposed in debugfs.

    Signed-off-by: Michael Braun
    [reformat commit message a bit, unline ieee80211_vif_{inc,dec}_num_mcast]
    Signed-off-by: Johannes Berg

    Michael Braun
     

04 Oct, 2016

1 commit

  • Resolve the merge conflict between Felix's/my and Toke's patches
    coming into the tree through net and mac80211-next respectively.
    Most of Felix's changes go away due to Toke's new infrastructure
    work, my patch changes to "goto begin" (the label wasn't there
    before) instead of returning NULL so flow control towards drivers
    is preserved better.

    Signed-off-by: Johannes Berg

    Johannes Berg
     

30 Sep, 2016

3 commits

  • The TXQ intermediate queues can cause packet reordering when more than
    one flow is active to a single station. Since some of the wifi-specific
    packet handling (notably sequence number and encryption handling) is
    sensitive to re-ordering, things break if they are applied before the
    TXQ.

    This splits up the TX handlers and fast_xmit logic into two parts: An
    early part and a late part. The former is applied before TXQ enqueue,
    and the latter after dequeue. The non-TXQ path just applies both parts
    at once.

    Because fragments shouldn't be split up or reordered, the fragmentation
    handler is run after dequeue. Any fragments are then kept in the TXQ and
    on subsequent dequeues they take precedence over dequeueing from the FQ
    structure.

    This approach avoids having to scatter special cases all over the place
    for when TXQ is enabled, at the cost of making the fast_xmit and TX
    handler code slightly more complex.

    Signed-off-by: Toke Høiland-Jørgensen
    [fix a few code-style nits, make ieee80211_xmit_fast_finish void,
    remove a useless txq->sta check]
    Signed-off-by: Johannes Berg

    Toke Høiland-Jørgensen
     
  • Small devices can run out of memory from queueing too many packets. If
    VHT is not supported by the PHY, having more than 4 MBytes of total
    queue in the TXQ intermediate queues is not needed, and so we can safely
    limit the memory usage in these cases and avoid OOM.

    Signed-off-by: Toke Høiland-Jørgensen
    Signed-off-by: Johannes Berg

    Toke Høiland-Jørgensen
     
  • The TXQ path restructure requires ieee80211_tx_dequeue() to call TX
    handlers and parts of the xmit_fast path. Move the function to later in
    tx.c in preparation for this.

    Signed-off-by: Toke Høiland-Jørgensen
    Signed-off-by: Johannes Berg

    Toke Høiland-Jørgensen
     

23 Sep, 2016

1 commit


14 Sep, 2016

1 commit

  • The A-MSDU TX code (within TXQs) didn't always check the return value
    of skb_linearize() properly, resulting in potentially passing a frag-
    list SKB down to the driver even when it said it can't handle it. Fix
    that.

    Fixes: 6e0456b545456 ("mac80211: add A-MSDU tx support")
    Signed-off-by: Johannes Berg

    Johannes Berg
     

13 Sep, 2016

2 commits

  • smatch pointed out that the second check of "tdls_auth" was
    pointless since if it was true, we returned from the function
    already. We can further simplify the code by moving the first
    check (if it's a TDLS peer at all) into the outer if, to only
    handle that inside. This simplifies the control flow here.

    Signed-off-by: Johannes Berg

    Johannes Berg
     
  • Currently the 'aqm' stats in mac80211 only keeps overlimit drop stats,
    not CoDel stats. This moves the CoDel stats into the txqi structure to
    keep them per txq in order to show them in debugfs.

    In addition, the aqm debugfs output is restructured by splitting it up
    into three files: One global per phy, one per netdev and one per
    station, in the appropriate directories. The files are all called aqm,
    and are only created if the driver supports the wake_tx_queue op (rather
    than emitting an error on open as previously).

    Signed-off-by: Toke Høiland-Jørgensen
    Signed-off-by: Johannes Berg

    Toke Høiland-Jørgensen
     

12 Sep, 2016

2 commits