20 Mar, 2015

1 commit

  • This mechanism was historic, and only ever used by IBSS, which
    also doesn't need to have it as it properly manages station's
    802.1X PAE state (or, with WEP, always has a key.)

    Remove the mechanism to clean up the code.

    Signed-off-by: Johannes Berg

    Johannes Berg
     

17 Mar, 2015

5 commits

  • When a key is installed using a cipher scheme, set a new
    internal key flag (KEY_FLAG_CIPHER_SCHEME) on it, to allow
    distinguishing such keys more easily.

    In particular, use this flag on the TX path instead of
    testing the sta->cipher_scheme pointer, as the station is
    NULL for broad-/multicast message, and use the key's iv_len
    instead of the cipher scheme information.

    Signed-off-by: Cedric Izoard
    [add missing documentation, rewrite commit message]
    Signed-off-by: Johannes Berg

    Cedric Izoard
     
  • Put station specific code in ieee80211_update_sta_info
    function.

    Signed-off-by: Janusz Dziedzic
    Signed-off-by: Johannes Berg

    Janusz.Dziedzic@tieto.com
     
  • On very high MCS bitrates, the calculated duration of rates that are
    next to each other can be very imprecise, due to the small packet size
    used as reference (1200 bytes).
    This is most visible in VHT80 nss=2 MCS8/9, for which minstrel shows the
    same throughput when the probability is also the same. This leads to a
    bad rate selection for such rates.

    Fix this issue by introducing an average A-MPDU size factor into the
    calculation.

    Signed-off-by: Felix Fietkau
    Signed-off-by: Johannes Berg

    Felix Fietkau
     
  • It is possible that there are several regulatory requests
    pending, but the processing of the last one does not call
    CRDA, and thus the other requests are not handled.

    Fix this by rescheduling the work until all requests have
    been processed.

    Signed-off-by: Ben Rosenfeld
    Signed-off-by: Ilan Peer
    Signed-off-by: Johannes Berg

    Ben
     
  • Currently when TDLS station in driver goes from authenticated
    to associated state it can not use rate control parameters
    because rate control is not initialized yet. Some drivers
    require parameters already initialized by rate control when
    entering associated state. It can be done by initializing
    rate control after station transition to associated state but
    before notifying driver about that.

    Signed-off-by: Marek Puzyniak
    Signed-off-by: Arik Nemtsov
    [fix comment to say 'associated' instead of 'authorized']
    Signed-off-by: Johannes Berg

    Marek Puzyniak
     

16 Mar, 2015

4 commits


06 Mar, 2015

3 commits

  • Timeout was scheduled only in case CRDA was called due to user hints,
    but was not scheduled for other cases. This can result in regulatory
    hint processing getting stuck in case that there is no CRDA configured.

    Change this by scheduling a timeout every time CRDA is called. In
    addition, in restore_regulatory_settings() all pending requests are
    restored (and not only the user ones).

    Signed-off-by: Ilan Peer
    Acked-by: Luis R. Rodriguez
    Signed-off-by: Johannes Berg

    Ilan peer
     
  • Previously, the indoor setting configuration assumed that as
    long as a station interface is connected, the indoor environment
    setting does not change. However, this assumption is problematic
    as:

    - It is possible that a station interface is connected to a mobile
    AP, e.g., softAP or a P2P GO, where it is possible that both the
    station and the mobile AP move out of the indoor environment making
    the indoor setting invalid. In such a case, user space has no way to
    invalidate the setting.
    - A station interface disconnection does not necessarily imply that
    the device is no longer operating in an indoor environment, e.g.,
    it is possible that the station interface is roaming but is still
    stays indoor.

    To handle the above, extend the indoor configuration API to allow
    user space to indicate a change of indoor settings, and allow it to
    indicate weather it controls the indoor setting, such that:

    1. If the user space process explicitly indicates that it is going
    to control the indoor setting, do not clear the indoor setting
    internally, unless the socket is released. The user space process
    should use the NL80211_ATTR_SOCKET_OWNER attribute in the command
    to state that it is going to control the indoor setting.
    2. Reset the indoor setting when restoring the regulatory settings in
    case it is not owned by a user space process.

    Based on the above, a user space tool that continuously monitors the
    indoor settings, i.e., tracking power setting, location etc., can
    indicate environment changes to the regulatory core.

    It should be noted that currently user space is the only provided mechanism
    used to hint to the regulatory core over the indoor/outdoor environment --
    while the country IEs do have an environment setting this has been completely
    ignored by the regulatory core by design for a while now since country IEs
    typically can contain bogus data.

    Acked-by: Luis R. Rodriguez
    Signed-off-by: ArikX Nemtsov
    Signed-off-by: Ilan Peer
    Signed-off-by: Johannes Berg

    Ilan peer
     
  • Directly update the indoor setting without wrapping it as
    a regulatory request, to simplify the processing.

    Acked-by: Luis R. Rodriguez
    Signed-off-by: Ilan Peer
    Signed-off-by: Johannes Berg

    Ilan peer
     

04 Mar, 2015

12 commits

  • Jouni reported that certain combinations of hwsim test cases failed,
    and we found that beaconing was erroneously enabled too early on any
    channel switch, which lead to the BI of 2000 TU from the first test
    case to leak into the second one, which then didn't beacon properly.

    To fix this, set data->beacon_int to zero when all stop beaconing so
    that beaconing cannot be started (which was intended as 'restarted')
    elsewhere.

    Additionally, Jouni found that due to this 'restart' and the beacon
    interval handling station interfaces would also have a needlessly
    running beacon timer all the time, of course not doing anything.

    To also fix the latter case only use the beacon interval when it's
    actually needed, i.e. when beaconing gets enabled.

    Reported-by: Jouni Malinen
    Tested-by: Jouni Malinen
    Signed-off-by: Johannes Berg

    Johannes Berg
     
  • timeout was being passed as int but assigned from u32/u16 values and used
    as unsigned type. This is really only for better readability.

    Signed-off-by: Nicholas Mc Guire
    Signed-off-by: Johannes Berg

    Nicholas Mc Guire
     
  • This is primarily an API consolidation and should make things more readable
    it replaces var * HZ / 1000 by msecs_to_jiffies(var) which also handles
    corner cases correctly.

    There is a change of behavior as e.g. for HZ 100, t * HZ / 1000 will
    return 0 for t < 10 but msecs_to_jiffies will return at least 1 always.

    Signed-off-by: Nicholas Mc Guire
    Signed-off-by: Johannes Berg

    Nicholas Mc Guire
     
  • Some device drivers offload part of aggregation including AddBA/DelBA
    negotiations to firmware. In such scenario, the PMF configuration of
    the station needs to be provided to driver to enable encryption of
    AddBA/DelBA action frames.

    Signed-off-by: SenthilKumar Jegadeesan
    [fix commit log, documentation]
    Signed-off-by: Johannes Berg

    SenthilKumar Jegadeesan
     
  • Sometimes the driver might want to modify private data in interfaces
    that are down. One possible use-case is cleaning up interface state
    after HW recovery. Some interfaces that were up before the recovery took
    place might be down now, but they might still be "dirty".

    Introduce a new iterate_interfaces() API and a new ACTIVE iterator flag.
    This way the internal implementation of the both active and inactive
    APIs remains the same.

    Signed-off-by: Arik Nemtsov
    Signed-off-by: Emmanuel Grumbach
    Signed-off-by: Johannes Berg

    Arik Nemtsov
     
  • If the device supports waking up on 'any' signal - i.e. it continues
    operating as usual and wakes up the host on pretty much anything that
    happens, then it makes no sense to also configure the more restricted
    WoWLAN mode where the device operates more autonomously but also in a
    more restricted fashion.

    Currently only cw2100 supports both 'any' and other triggers, but it
    seems to be broken as it doesn't configure anything to the device, so
    we can't currently get into a situation where both even can correctly
    be configured. This is about to change (Intel devices are going to
    support both and have different behaviour depending on configuration)
    so make sure the conflicting modes cannot be configured.

    (It seems that cw2100 advertises 'any' and 'disconnect' as a means of
    saying that's what it will always do, but that isn't really the way
    this API was meant to be used nor does it actually mean anything as
    'any' always implies 'disconnect' already, and the driver doesn't
    change device configuration in any way depending on the settings.)

    Signed-off-by: Johannes Berg

    Johannes Berg
     
  • The ieee80211_tx_prepare_skb() function currently entirely ignores
    the fact that the SKB that is passed in might be split into more
    than one due to fragmentation and doesn't check the list of skbs
    that the TX handlers may create. In case this happens, it would
    leak them.

    Fix this and also don't leave the skb next/prev pointers dangling
    pointing to the on-stack sk_buff_head.

    Reported-by: Emmanuel Grumbach
    Signed-off-by: Johannes Berg

    Johannes Berg
     
  • In ieee80211_queue_work() we check if we're quiescing or suspended, so
    it's not necessary to check for quiescing before calling this
    function. Remove duplicate checks.

    Signed-off-by: Luciano Coelho
    Signed-off-by: Emmanuel Grumbach
    Signed-off-by: Johannes Berg

    Luciano Coelho
     
  • TDLS off-channel can be allowed in channels marked with GO_CONCURRENT,
    provided the device is connected to an AP on the same UNII.
    When relaxing the NO-IR requirements for TDLS, we might hit flows in
    cfg80211_reg_can_beacon that acquire the wdev lock. Take some measures
    to allow this during TDLS setup.
    Acquire the RCU read lock later in the flow that invokes
    cfg80211_reg_can_beacon.
    Avoid taking local->mtx when preparing the setup packet to avoid
    circular deadlocks with mac80211 code that is invoked with wdev-mtx
    held.

    Signed-off-by: Arik Nemtsov
    Signed-off-by: Emmanuel Grumbach
    Signed-off-by: Johannes Berg

    Arik Nemtsov
     
  • If the driver rejects WoWLAN, restart the queues before returning
    to cfg80211. cfg80211 will return to mac80211, but not before it
    disconnects all interfaces. If we don't start the queues, any of
    the packets needed for disconnecting won't be transmitted, which
    is strange. Fix that.

    Signed-off-by: Johannes Berg

    Johannes Berg
     
  • We check local->open_count at the top of the __ieee80211_suspend(), so
    there's no need to check for it again. open_count is protected by the
    rtnl, so there's no chance for it to have change between the two
    calls.

    Signed-off-by: Luciano Coelho
    Signed-off-by: Emmanuel Grumbach
    Signed-off-by: Johannes Berg

    Luciano Coelho
     
  • Drivers can't really be expected to suspend properly while auth
    or assoc is in progress since then they don't have any state
    they could keep with WoWLAN, nor can they actually finish the
    authentication or association. In fact, keeping this can cause
    subtle issues with drivers like iwlwifi that refuse WoWLAN if
    not associated, but have trouble figuring out what's going on
    in the middle of association.

    In any case, regardless of possible driver issues in this area,
    it doesn't make sense for mac80211 to try to WoWLAN-suspend in
    the middle of such operations, so stop them before.

    Signed-off-by: Johannes Berg

    Johannes Berg
     

03 Mar, 2015

10 commits

  • If any interface fails to be added to the driver in during reconfig,
    we should remove all the successfully added interfaces and report
    reconfig failure, so things can be cleaned up properly. Failing to do
    so can lead to subsequent failures and leave the drivers in a messed
    up state.

    Signed-off-by: Luciano Coelho
    Signed-off-by: Emmanuel Grumbach
    Signed-off-by: Johannes Berg

    Luciano Coelho
     
  • Since cfg80211 disconnects, but has no insight into the association
    process, it can happen that it disconnects while association is in
    progress. We then try to abort association in mac80211, but this is
    only later so the association can complete between the two.

    This results in removing an interface from the driver while bound
    to the channel context, obviously causing confusion and issues.

    Solve this by also checking if we're associated during quiesce and
    if so deauthenticating. The frame will no longer go out to the AP
    which is a bit unfortunate, but it'll resolve the crash (and before
    we would have suspended without telling the AP as well.)

    I'm working on a better, but more complex solution as well, which
    should avoid that problem.

    Signed-off-by: Johannes Berg

    Johannes Berg
     
  • Add the AID and VHT-cap/operation IEs during TDLS setup. Remove the
    block of TDLS peers when setting HT-caps of the peer station.

    Signed-off-by: Arik Nemtsov
    Signed-off-by: Emmanuel Grumbach
    Signed-off-by: Johannes Berg

    Arik Nemtsov
     
  • Operating classes 128-130 are defined in the 11ac
    spec for the 5GHz band.

    Update ieee80211_operating_class_to_band() to support them.

    Signed-off-by: Eliad Peller
    Signed-off-by: Emmanuel Grumbach
    Signed-off-by: Johannes Berg

    Eliad Peller
     
  • Beacon's timestamp, device system time associated with this beacon and
    DTIM count parameters are not updated in the associated vif context
    if the latest beacon's content is identical to the previously received.
    It make sense to update these changing parameters on every beacon so the
    driver can get most updated values. This may be necessary, for example,
    to avoid either beacons' drift effect or device time stamp overrun.
    IMPORTANT: Three sync_* parameters - sync_ts, sync_device_ts and
    sync_dtim_count would possibly be out of sync by the time the driver will
    use them. The synchronized view is currently guaranteed only in certain
    callbacks.

    Signed-off-by: Alexander Bondar
    Signed-off-by: Emmanuel Grumbach
    Signed-off-by: Johannes Berg

    Alexander Bondar
     
  • Add notes about userspace ABI/API modifications, including the
    fact that we decided that API submissions should come with a
    driver implementation.

    Signed-off-by: Johannes Berg

    Johannes Berg
     
  • This allows wpa_supplicant/hostapd to send a vendor command and verify
    response to that command and a vendor event.

    Signed-off-by: Jouni Malinen
    Signed-off-by: Johannes Berg

    Jouni Malinen
     
  • This modifies cfg80211_vendor_event_alloc() with an additional argument
    struct wireless_dev *wdev. __cfg80211_alloc_event_skb() is modified to
    take in *wdev argument, if wdev != NULL, both the NL80211_ATTR_IFINDEX
    and wdev identifier are added to the vendor event.

    These changes make it easier for drivers to add ifindex indication in
    vendor events cleanly.

    This also updates all existing users of cfg80211_vendor_event_alloc()
    and __cfg80211_alloc_event_skb() in the kernel tree.

    Signed-off-by: Ahmad Kholaif
    Signed-off-by: Jouni Malinen
    Signed-off-by: Johannes Berg

    Ahmad Kholaif
     
  • Add NL80211_EXT_FEATURE_VHT_IBSS flag and VHT
    support for IBSS.

    Signed-off-by: Janusz Dziedzic
    Signed-off-by: Johannes Berg

    Janusz.Dziedzic@tieto.com
     
  • 802.11ad adds new a network type (PBSS) and changes the capability
    field interpretation for the DMG (60G) band.
    The same 2 bits that were interpreted as "ESS" and "IBSS" before are
    re-used as a 2-bit field with 3 valid values (and 1 reserved). Valid
    values are: "IBSS", "PBSS" (new) and "AP".

    In order to get the BSS struct for the new PBSS networks, change the
    cfg80211_get_bss() function to take a new enum ieee80211_bss_type
    argument with the valid network types, as "capa_mask" and "capa_val"
    no longer work correctly (the search must be band-aware now.)

    The remaining bits in "capa_mask" and "capa_val" are used only for
    privacy matching so replace those two with a privacy enum as well.

    Signed-off-by: Dedy Lansky
    [rewrite commit log, tiny fixes]
    Signed-off-by: Johannes Berg

    Dedy Lansky
     

01 Mar, 2015

5 commits

  • When using the wext compatibility code in cfg80211, part of the IEs
    can be truncated if the passed user buffer is large enough for part
    of the BSS but not large enough for all of the IEs. This can cause
    an EAP network to show up as a PSK network.

    Always return -E2BIG in this case to avoid truncating data.

    Since this changes the control flow, use an on-stack variable for
    a small buffer instead of allocating it.

    Signed-off-by: James Minor
    [rework patch to error out immediately, use _check wrappers]
    Signed-off-by: Johannes Berg

    James Minor
     
  • These checked wrappers are necessary for the next patch, which
    will use them to avoid sending out partial scan results.

    Signed-off-by: Johannes Berg

    Johannes Berg
     
  • Revert commit ad38bfc916da ("mac80211: Tx frame latency statistics")
    (along with some follow-up fixes).

    This code turned out not to be as useful in the current form as we
    thought, and we've internally hacked it up more, but that's not
    very suitable for upstream (for now), and we might just do that
    with tracing instead.

    Therefore, for now at least, remove this code. We might also need
    to use the skb->tstamp field for the TCP performance issue, which
    is more important than the debugging.

    Signed-off-by: Johannes Berg

    Johannes Berg
     
  • Both wpa_supplicant and mac80211 have and inactivity timer. By default
    wpa_supplicant will be timed out in 5 minutes and mac80211's it is 30
    minutes. If wpa_supplicant uses a longer timer than mac80211, it will
    get unexpected disconnection by mac80211.

    Using 0xffffffff instead as the configured value could solve this w/o
    changing the code, but due to integer overflow in the expression used
    this doesn't work. The expression is:

    (current jiffies) > (frame Rx jiffies + NL80211_MESHCONF_PLINK_TIMEOUT * 250)

    On 32bit system, the right side would overflow and be a very small
    value if NL80211_MESHCONF_PLINK_TIMEOUT is sufficiently large,
    causing unexpectedly early disconnections.

    Instead allow disabling the inactivity timer to avoid this situation,
    by passing the (previously invalid and useless) value 0.

    Signed-off-by: Masashi Honma
    [reword/rewrap commit log]
    Signed-off-by: Johannes Berg

    Masashi Honma
     
  • Due to the checks in get_hwsim_data_ref_from_addr, wmediumd
    was only able to use the second mac address (those starting with
    0x42). This is confusing and needlessly limiting, so allow any
    configured address.

    Signed-off-by: Bob Copeland
    Signed-off-by: Johannes Berg

    Bob Copeland