04 Dec, 2020

1 commit

  • During restarrt, mac80211 is supposed to reconfigure the driver.
    When there's a monitor interface, the interface is added and the
    channel context for it was created, but not assigned to it as it
    was not considered running during the restart.

    Fix this by setting SDATA_STATE_RUNNING while adding monitor
    interfaces.

    Signed-off-by: Borwankar, Antara
    Signed-off-by: Luca Coelho
    Link: https://lore.kernel.org/r/iwlwifi.20201129172929.e1df99693a4c.I494579f28018c2d0b9d4083a664cf872c28405ae@changeid
    [reword commit log]
    Signed-off-by: Johannes Berg

    Borwankar, Antara
     

14 Oct, 2020

1 commit


28 Sep, 2020

1 commit

  • S1G beacons are 802.11 Extension Frames, so the fixed
    header part differs from regular beacons.

    Add a handler to process S1G beacons and abstract out the
    fetching of BSSID and element start locations in the
    beacon body handler.

    Signed-off-by: Thomas Pedersen
    Link: https://lore.kernel.org/r/20200922022818.15855-14-thomas@adapt-ip.com
    [don't rename, small coding style cleanups]
    Signed-off-by: Johannes Berg

    Thomas Pedersen
     

18 Sep, 2020

2 commits

  • Remove the newly added ieee80211_set_vif_encap_ops declaration.
    No further code changes.

    Signed-off-by: Felix Fietkau
    Link: https://lore.kernel.org/r/20200908123702.88454-15-nbd@nbd.name
    Signed-off-by: Johannes Berg

    Felix Fietkau
     
  • The current API (which lets the driver turn on/off per vif directly) has a
    number of limitations:
    - it does not deal with AP_VLAN
    - conditions for enabling (no tkip, no monitor) are only checked at
    add_interface time
    - no way to indicate 4-addr support

    In order to address this, store offload flags in struct ieee80211_vif
    (easy to extend for decap offload later). mac80211 initially sets the enable
    flag, but gives the driver a chance to modify it before its settings are
    applied. In addition to the .add_interface op, a .update_vif_offload op is
    introduced, which can be used for runtime changes.

    If a driver can't disable encap offload at runtime, or if it has some extra
    limitations, it can simply override the flags within those ops.

    Support for encap offload with 4-address mode interfaces can be enabled
    by setting a flag from .add_interface or .update_vif_offload.

    Signed-off-by: Felix Fietkau
    Link: https://lore.kernel.org/r/20200908123702.88454-6-nbd@nbd.name
    [resolved conflict with commit aa2092a9bab3 ("ath11k: add raw mode and
    software crypto support")]
    Signed-off-by: Johannes Berg

    Felix Fietkau
     

31 Jul, 2020

2 commits

  • Already parse the radiotap header in ieee80211_monitor_select_queue.
    In a subsequent commit this will allow us to add a radiotap flag that
    influences the queue on which injected packets will be sent.

    This also fixes the incomplete validation of the injected frame in
    ieee80211_monitor_select_queue: currently an out of bounds memory
    access may occur in in the called function ieee80211_select_queue_80211
    if the 802.11 header is too small.

    Note that in ieee80211_monitor_start_xmit the radiotap header is parsed
    again, which is necessairy because ieee80211_monitor_select_queue is not
    always called beforehand.

    Signed-off-by: Mathy Vanhoef
    Link: https://lore.kernel.org/r/20200723100153.31631-6-Mathy.Vanhoef@kuleuven.be
    Signed-off-by: Johannes Berg

    Mathy Vanhoef
     
  • Replace the existing /* fall through */ comments and its variants with
    the new pseudo-keyword macro fallthrough[1]. Also, remove unnecessary
    fall-through markings when it is the case.

    [1] https://www.kernel.org/doc/html/latest/process/deprecated.html?highlight=fallthrough#implicit-switch-case-fall-through

    Signed-off-by: Gustavo A. R. Silva
    Link: https://lore.kernel.org/r/20200707204548.GA9320@embeddedor
    Signed-off-by: Johannes Berg

    Gustavo A. R. Silva
     

24 Apr, 2020

1 commit

  • There are two bugs with this, first, it shouldn't be called
    on an interface that's down, and secondly, it should then be
    called when the interface comes up.

    Note that the currently only user (iwlwifi) doesn't seem to
    care about either of these scenarios.

    Signed-off-by: Johannes Berg
    Link: https://lore.kernel.org/r/20200417111830.401d82c7a0bf.I5dc7d718816460c2d8d89c7af6c215f9e2b3078f@changeid
    Signed-off-by: Johannes Berg

    Johannes Berg
     

20 Mar, 2020

1 commit

  • This patch adds support for disabling pre-auth rx over the nl80211 control
    port for mac80211.

    Signed-off-by: Markus Theil
    Link: https://lore.kernel.org/r/20200312091055.54257-3-markus.theil@tu-ilmenau.de
    [fix indentation slightly, squash feature enablement]
    Signed-off-by: Johannes Berg

    Markus Theil
     

14 Feb, 2020

2 commits

  • Currently a mac80211 driver can only set the txq_limit when using
    wake_tx_queue. Not all drivers use wake_tx_queue. This patch adds a new
    element to wiphy allowing a driver to set a custom tx_queue_len and the
    code that will apply it in case it is set. The current default is
    1000 which is too low for ath11k when doing HE rates.

    Signed-off-by: John Crispin
    Link: https://lore.kernel.org/r/20200211122605.13002-1-john@phrozen.org
    Signed-off-by: Johannes Berg

    John Crispin
     
  • With multiple VIFS ath10k, and probably others, tries to find the
    minimum txpower for all vifs and uses that when setting txpower in
    the firmware.

    If a second vif is added and starts to scan, it's txpower is not
    initialized yet and it set to zero.

    ath10k had a patch to ignore zero values, but then it is impossible
    to actually set txpower to zero.

    So, instead initialize the txpower to INT_MIN in mac80211, and let
    drivers know that means the power has not been set and so should
    be ignored.

    This should fix regression in:

    commit 88407beb1b1462f706a1950a355fd086e1c450b6
    Author: Ryan Hsu
    Date: Tue Dec 13 14:55:19 2016 -0800

    ath10k: fix incorrect txpower set by P2P_DEVICE interface

    Tested on ath10k 9984 with ath10k-ct firmware.

    Signed-off-by: Ben Greear
    Link: https://lore.kernel.org/r/20191217183057.24586-1-greearb@candelatech.com
    Signed-off-by: Johannes Berg

    Ben Greear
     

07 Feb, 2020

2 commits

  • The SMPS feature is defined in the specification only to be
    used by non-AP stations and not by APs, so remove the support
    for changing the AP's SMPS mode dynamically.

    Signed-off-by: Ilan Peer
    Signed-off-by: Luca Coelho
    Link: https://lore.kernel.org/r/20200131111300.891737-20-luca@coelho.fi
    Signed-off-by: Johannes Berg

    Ilan Peer
     
  • Set ndev->hw_features as well as ndev->features to allow
    changing the TX-related features with ethtool.

    We cannot (yet) change RX-related features since that
    requires telling the driver about it and we have no API
    for that yet.

    Signed-off-by: Johannes Berg
    Signed-off-by: Luca Coelho
    Link: https://lore.kernel.org/r/20200131111300.891737-10-luca@coelho.fi
    Signed-off-by: Johannes Berg

    Johannes Berg
     

14 Dec, 2019

1 commit

  • This patch adds a new transmit path for hardware that supports 802.11
    encapsulation offloading. In those cases 802.3 frames get passed
    directly to the driver allowing the hardware to handle the encapsulation.
    Some features such as monitor mode and TKIP would break when encapsulation
    offloading is enabled. If any of these get enabled, the code will alwyas
    fallback to the normal sw encapsulation data path.

    The patch defines a secondary netdev_ops struct that the device gets
    assigned if 802.11 encap support is available and enabled. The driver
    needs to enable the support on a per vif basis if it finds that all
    pre-reqs are meet.

    Signed-off-by: Vasanthakumar Thiagarajan
    Signed-off-by: John Crispin
    Link: https://lore.kernel.org/r/20191125100438.16539-1-john@phrozen.org
    [reword comments, remove SUPPORTS_80211_ENCAP HW flag, minor cleanups]
    Signed-off-by: Johannes Berg

    John Crispin
     

11 Sep, 2019

1 commit

  • Make it possibly for drivers to adjust the default max_mtu
    by storing it in the hardware struct and using that value
    for all interfaces.

    Signed-off-by: Wen Gong
    Link: https://lore.kernel.org/r/1567738137-31748-1-git-send-email-wgong@codeaurora.org
    Signed-off-by: Johannes Berg

    Wen Gong
     

30 Jul, 2019

1 commit


19 Jun, 2019

1 commit

  • Based on 2 normalized pattern(s):

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license version 2 as
    published by the free software foundation

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license version 2 as
    published by the free software foundation #

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-only

    has been chosen to replace the boilerplate/reference in 4122 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Enrico Weigelt
    Reviewed-by: Kate Stewart
    Reviewed-by: Allison Randal
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190604081206.933168790@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

03 May, 2019

1 commit


26 Apr, 2019

2 commits


23 Apr, 2019

1 commit

  • The txq of vif is added to active_txqs list for ATF TXQ scheduling
    in the function ieee80211_queue_skb(), but it was not properly removed
    before freeing the txq object. It was causing use after free of the txq
    objects from the active_txqs list, result was kernel panic
    due to invalid memory access.

    Fix kernel invalid memory access by properly removing txq object
    from active_txqs list before free the object.

    Signed-off-by: Bhagavathi Perumal S
    Acked-by: Toke Høiland-Jørgensen
    Signed-off-by: Johannes Berg

    Bhagavathi Perumal S
     

21 Mar, 2019

1 commit

  • After the previous patch, all the callers of ndo_select_queue()
    provide as a 'fallback' argument netdev_pick_tx.
    The only exceptions are nested calls to ndo_select_queue(),
    which pass down the 'fallback' available in the current scope
    - still netdev_pick_tx.

    We can drop such argument and replace fallback() invocation with
    netdev_pick_tx(). This avoids an indirect call per xmit packet
    in some scenarios (TCP syn, UDP unconnected, XDP generic, pktgen)
    with device drivers implementing such ndo. It also clean the code
    a bit.

    Tested with ixgbe and CONFIG_FCOE=m

    With pktgen using queue xmit:
    threads vanilla patched
    (kpps) (kpps)
    1 2334 2428
    2 4166 4278
    4 7895 8100

    v1 -> v2:
    - rebased after helper's name change

    Signed-off-by: Paolo Abeni
    Signed-off-by: David S. Miller

    Paolo Abeni
     

21 Dec, 2018

1 commit


20 Dec, 2018

1 commit

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

    Johannes Berg says:

    ====================
    This time we have too many changes to list, highlights:
    * virt_wifi - wireless control simulation on top of
    another network interface
    * hwsim configurability to test capabilities similar
    to real hardware
    * various mesh improvements
    * various radiotap vendor data fixes in mac80211
    * finally the nl_set_extack_cookie_u64() we talked
    about previously, used for
    * peer measurement APIs, right now only with FTM
    (flight time measurement) for location
    * made nl80211 radio/interface announcements more complete
    * various new HE (802.11ax) things:
    updates, TWT support, ...
    ====================

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

    David S. Miller
     

18 Dec, 2018

2 commits

  • This isn't really a problem now, but it means that the function
    has a few NULL checks that are only relevant when coming from
    the initial interface added in mac80211, and that's confusing.
    Just pass non-NULL (but equivalently empty) in that case and
    remove all the NULL checks.

    Signed-off-by: Johannes Berg
    Signed-off-by: Luca Coelho
    Signed-off-by: Johannes Berg

    Johannes Berg
     
  • Recently TXQ teardown was moved earlier in ieee80211_unregister_hw(),
    to avoid a use-after-free of the netdev data. However, interfaces
    aren't fully removed at the point, and cfg80211_shutdown_all_interfaces
    can for example, TX a deauth frame. Move the TXQ teardown to the
    point between cfg80211_shutdown_all_interfaces and the free of
    netdev queues, so we can be sure they are torn down before netdev
    is freed, but after there is no ongoing TX.

    Fixes: 77cfaf52eca5 ("mac80211: Run TXQ teardown code before de-registering interfaces")
    Signed-off-by: Sara Sharon
    Signed-off-by: Luca Coelho
    Signed-off-by: Johannes Berg

    Sara Sharon
     

09 Nov, 2018

1 commit

  • This fixes stale beacon-int values that would keep a netdev
    from going up.

    To reproduce:

    Create two VAP on one radio.
    vap1 has beacon-int 100, start it.
    vap2 has beacon-int 240, start it (and it will fail
    because beacon-int mismatch).
    reconfigure vap2 to have beacon-int 100 and start it.
    It will fail because the stale beacon-int 240 will be used
    in the ifup path and hostapd never gets a chance to set the
    new beacon interval.

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

    Ben Greear
     

26 Sep, 2018

1 commit

  • Monitor mode interfaces with the active flag are passed down to the driver.
    Drivers using TXQ expect that all interfaces have allocated TXQs before
    they get added.

    Fixes: 79af1f866193d ("mac80211: avoid allocating TXQs that won't be used")
    Cc: stable@vger.kernel.org
    Reported-by: Catrinel Catrinescu
    Signed-off-by: Felix Fietkau
    Signed-off-by: Johannes Berg

    Felix Fietkau
     

10 Jul, 2018

1 commit

  • This patch makes it so that instead of passing a void pointer as the
    accel_priv we instead pass a net_device pointer as sb_dev. Making this
    change allows us to pass the subordinate device through to the fallback
    function eventually so that we can keep the actual code in the
    ndo_select_queue call as focused on possible on the exception cases.

    Signed-off-by: Alexander Duyck
    Tested-by: Andrew Bowers
    Signed-off-by: Jeff Kirsher

    Alexander Duyck
     

29 Mar, 2018

1 commit

  • If userspace requested control port frames to go over 80211, then do so.
    The control packets are intercepted just prior to delivery of the packet
    to the underlying network device.

    Pre-authentication type frames (protocol: 0x88c7) are also forwarded
    over nl80211.

    Signed-off-by: Denis Kenzior
    Signed-off-by: Johannes Berg

    Denis Kenzior
     

23 Feb, 2018

1 commit


11 Dec, 2017

2 commits

  • In the ieee80211_setup_sdata() we check if the interface type is valid
    and, if not, call BUG(). This should never happen, but if there is
    something wrong with the code, it will not be caught until the bug
    happens when an interface is being set up. Calling BUG() is too
    extreme for this and a WARN_ON() would be better used instead. Change
    that.

    Signed-off-by: Luca Coelho
    Signed-off-by: Johannes Berg

    Luca Coelho
     
  • In preparation to enabling -Wimplicit-fallthrough, mark switch cases
    where we are expecting to fall through.

    Notice that in some cases I replaced "fall through on else" and
    "otherwise fall through" comments with just a "fall through" comment,
    which is what GCC is expecting to find.

    Signed-off-by: Gustavo A. R. Silva
    Signed-off-by: Johannes Berg

    Gustavo A. R. Silva
     

11 Oct, 2017

1 commit

  • When removing an AP VLAN interface, mac80211 currently purges
    the entire TXQ for the AP interface. Fix this by using the FQ
    API introduced in the previous patch to filter frames.

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

    Johannes Berg
     

21 Sep, 2017

1 commit


05 Sep, 2017

2 commits

  • This change adds null pointer check before dereferencing pointer dev on
    netif_tx_start_all_queues() when an interface is added.
    With iTXQ support, netif_tx_start_all_queues() is always called while
    an interface is added. however, the netdev queues are not associated
    and dev is null when the interface is either NL80211_IFTYPE_P2P_DEVICE
    or NL80211_IFTYPE_NAN.

    Signed-off-by: Chunho Lee
    Signed-off-by: Johannes Berg

    Chunho Lee
     
  • 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
     

15 Jun, 2017

1 commit


10 Jun, 2017

1 commit

  • The change to remove free_netdev() from ieee80211_if_free()
    erroneously didn't add the necessary free_netdev() for when
    ieee80211_if_free() is called directly in one place, rather
    than as the priv_destructor. Add the missing call.

    Fixes: cf124db566e6 ("net: Fix inconsistent teardown and release of private netdev state.")
    Signed-off-by: Johannes Berg
    Signed-off-by: David S. Miller

    Johannes Berg
     

08 Jun, 2017

1 commit

  • Instead of using the SKB queue with the fake pkt_type for the
    offloaded RX BA session management, also handle this with the
    normal aggregation state machine worker. This also makes the
    use of this more reliable since it gets rid of the allocation
    of the fake skb.

    Combined with the previous patch, this finally allows us to
    get rid of the pkt_type hack entirely, so do that as well.

    Signed-off-by: Johannes Berg

    Johannes Berg