summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* mac80211: convert ops checks to WARN_ONJohannes Berg2012-08-201-7/+5
| | | | | | | There's no need to BUG_ON when a driver registers invalid operations, warn and return an error. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: check operating channel in scanJohannes Berg2012-08-201-5/+4
| | | | | | | | | The optimisation of scanning only on the current channel should check the operating channel. Also modify it to compare channel pointer rather than the frequency. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: use RX status band instead of current bandJohannes Berg2012-08-201-1/+1
| | | | | | | | | | Even for single-channel devices it is possible that we switch the channel temporarily (e.g. for scanning) but while doing so process a received frame that was still received on the old channel, so checking the current band is racy. Use the band from status instead. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: don't assume channel is set in tracingJohannes Berg2012-08-201-3/+6
| | | | | | | | | | | | | With the move to multi-channel and away from drv_config(), hw.conf.channel will not always be set, only for devices using the current API instead of the new channel context APIs. Check the channel is set before adding its frequency to the trace data. Also break some overly long lines in the code. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: use oper_channel in rate initJohannes Berg2012-08-201-1/+1
| | | | | | | | | Using hw.conf.channel is wrong as it could be the temporary channel if the station is added from the workqueue while the device is already on another channel. Use oper_channel instead. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: remove freq/chantype from debugfsJohannes Berg2012-08-201-32/+0
| | | | | | | You can now get these values through iw, and they conflict with multi-channel work. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: remove almost unused local variableJohannes Berg2012-08-201-5/+2
| | | | | | | In ieee80211_beacon_get_tim() we can use the txrc.sband instead of a separate local variable. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: mesh: don't use global channel typeJohannes Berg2012-08-202-8/+10
| | | | | | | | | | | | | Using local->_oper_channel_type in the mesh code is completely wrong as this value is the combination of the various interface channel types and can be a different value from the mesh interface in case there are multiple virtual interfaces. Use sdata->vif.bss_conf.channel_type instead as it tracks the per-vif channel type. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: simplify buffers in aes_128_cmac_vectorJohannes Berg2012-08-201-5/+1
| | | | | | | | There's no need to use a single scratch buffer and calculate offsets into it, just use two separate buffers for the separate variables. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211_hwsim: add support for P2P DeviceJohannes Berg2012-08-201-1/+3
| | | | | | | Advertise support for P2P Device in hwsim to be able to test it. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: add IEEE80211_HW_P2P_DEV_ADDR_FOR_INTFJohannes Berg2012-08-202-1/+19
| | | | | | | | | | | | Some devices like the current iwlwifi implementation require that the P2P interface address match the P2P Device address (only one P2P interface is supported.) Add the HW flag IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF that allows drivers to request that P2P Interfaces added while a P2P Device is active get the same MAC address by default. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: support P2P Device abstractionJohannes Berg2012-08-2010-96/+226
| | | | | | | | | | After cfg80211 got a P2P Device abstraction, add support to mac80211. Whether it really is supported or not will depend on whether or not the driver has support for it, but mac80211 needs to change to be able to support drivers that need a P2P Device. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* cfg80211: add P2P Device abstractionJohannes Berg2012-08-209-20/+265
| | | | | | | | | | | | | | | | | | | | | | | In order to support using a different MAC address for the P2P Device address we must first have a P2P Device abstraction that can be assigned a MAC address. This abstraction will also be useful to support offloading P2P operations to the device, e.g. periodic listen for discoverability. Currently, the driver is responsible for assigning a MAC address to the P2P Device, but this could be changed by allowing a MAC address to be given to the NEW_INTERFACE command. As it has no associated netdev, a P2P Device can only be identified by its wdev identifier but the previous patches allowed using the wdev identifier in various APIs, e.g. remain-on-channel. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: make ieee80211_beacon_connection_loss_work staticJohannes Berg2012-08-202-2/+1
| | | | | | | | There's no need to declare the function in the header file since it's only used in a single place, so make it static. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: check size of channel switch IE when parsingJohannes Berg2012-08-203-11/+9
| | | | | | | | The channel switch IE has a fixed size, so we can discard it in parsing if it's not the right size and use the right struct pointer. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: fix CSA handling timerJohannes Berg2012-08-201-3/+2
| | | | | | | | The time until the channel switch is in TU, not in milliseconds, so use TU_TO_EXP_TIME() to correctly program the timer. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: clean up CSA handling codeJohannes Berg2012-08-201-18/+16
| | | | | | | | | | | Clean up the CSA handling code by moving some of it out of the if and using a C99 initializer for the struct passed to the driver method. While at it, also add a comment that we should wait for a beacon after switching the channel. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: remove unneeded 'bssid' variableJohannes Berg2012-08-201-4/+2
| | | | | | | There's no need to copy the BSSID just to print it, remove the unnecessary variable. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: support A-MPDU status reportingJohannes Berg2012-08-202-15/+80
| | | | | | | | Support getting A-MPDU status information from the drivers and reporting it to userspace via radiotap in the standard fields. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wireless: add radiotap A-MPDU status fieldJohannes Berg2012-08-202-0/+13
| | | | | | | | Define the A-MPDU status field in radiotap, also update the radiotap parser for it and the MCS field that was apparently missed last time. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: add supported rates change notification in IBSSAntonio Quartulli2012-08-203-1/+11
| | | | | | | | | | | | | | | | In IBSS it is possible that the supported rates set for a station changes over time (e.g. it gets first initialised as an empty set because of no available information about rates and updated later). In this case the driver has to be notified about the change in order to update its internal table accordingly (if needed). This behaviour is needed by all those drivers that handle rc internally but leave stations management to mac80211 Reported-by: Gui Iribarren <gui@altermundi.net> Signed-off-by: Antonio Quartulli <ordex@autistici.org> [Johannes - add docs, validate IBSS mode only, fix compilation] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: clean up mpath_move_to_queue()Thomas Pedersen2012-08-203-18/+21
| | | | | | | | | | | | Use skb_queue_walk_safe instead, and fix a few issues: - didn't free old skbs on moving - didn't react to failed skb alloc - needlessly held a local pointer to the destination frame queue - didn't check destination queue length before adding skb Signed-off-by: Thomas Pedersen <thomas@cozybit.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: use skb_queue_walk() in mesh_path_assign_nexthopThomas Pedersen2012-08-201-7/+1
| | | | | | | | Since all we really want is just to iterate over all skbs, do just that and avoid (de)queueing to a clusmy tmpq. Signed-off-by: Thomas Pedersen <thomas@cozybit.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: avoid using synchronize_rcu in ieee80211_set_probe_respEyal Shapira2012-08-204-14/+21
| | | | | | | | | | | | | | This could take a while (100ms+) and may delay sending assoc resp in AP mode with WPS or P2P GO (as setting the probe resp takes place there). We've encountered situations where the delay was big enough to cause connection problems with devices like Galaxy Nexus. Switch to using call_rcu with a free handler. [Arik - rework to use plain buffer and instead of skb] Signed-off-by: Eyal Shapira <eyal@wizery.com> Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: skb leak in mesh_plink_frame_tx()Thomas Pedersen2012-08-031-6/+11
| | | | | | | | | Although adding an IE is almost guaranteed to succeed since we already accounted for its length while allocating the skb, we should still free the skb in case of failure. Signed-off-by: Thomas Pedersen <thomas@cozybit.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: don't request ack for peering closeThomas Pedersen2012-08-031-0/+3
| | | | | | | | | It doesn't make a lot of sense to wait for an ack in response to a peering close frame since either peer in this exchange could be going down. Signed-off-by: Thomas Pedersen <thomas@cozybit.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: remove ieee80211_clean_sdata()Thomas Pedersen2012-08-031-17/+0
| | | | | | | | This function was only used by mesh, and not really needed since any interface-specific cleanup already happens in the netdev handlers. Signed-off-by: Thomas Pedersen <thomas@cozybit.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: improve cleanup when leaving meshThomas Pedersen2012-08-032-9/+5
| | | | | | | | | | | | | | | It is not necessary to stop the mesh beacon in the mac80211 ndo_stop handler, since cfg80211 has already left the mesh on NETDEV_GOING_DOWN notification. Also some improvements to ieee80211_stop_mesh(): - flush mpath entries. - flush sta entries per-sdata so we don't remove entries belonging to other vifs on the same hw. Signed-off-by: Thomas Pedersen <thomas@cozybit.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: reset station MLME flags upon new associationJohannes Berg2012-08-011-4/+7
| | | | | | | | | | When associating anew, the old station MLME flags should be cleared. The only exception is the 40 MHz disable flag as it might have been set while the channel was set in a previous authentication attempt so it needs to be kept intact. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: use eth_broadcast_addrJohannes Berg2012-07-314-6/+6
| | | | | | Instead of memset(). Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: enable WDS carrier only after adding stationJohannes Berg2012-07-311-0/+3
| | | | | | | | Enable the carrier on WDS type interfaces only after having added the station entry for the WDS peer so outgoing frames will find it. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: manage carrier state in meshJohannes Berg2012-07-312-4/+12
| | | | | | | | Instead of assuming the carrier is on all the time in mesh manage it with joining and leaving the mesh. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: use correct channel in TXJohannes Berg2012-07-312-12/+7
| | | | | | | | | Since we only need the band, remove the channel pointer from struct ieee80211_tx_data and also assign it properly, depending on context, to the correct operating or current channel. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: fix current vs. operating channel in preq/beaconJohannes Berg2012-07-316-26/+44
| | | | | | | | | | | | | When sending probe requests, e.g. during software scanning, these will go out on the *current* channel, so their IEs need to be built from the current channel. At other times, e.g. for beacons or probe request templates, the IEs will be used on the *operating* channel and using the current channel instead might result in errors. Add the appropriate parameters to respect the difference. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: use oper_channel in utils and configJohannes Berg2012-07-313-6/+6
| | | | | | | | | | | Using hw.conf.channel is wrong as it could be the temporary channel if any function like the beacon get function is called while scanning or during other temporary out-of-channel activities. Use oper_channel instead. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: use oper_channel in managed mlmeJohannes Berg2012-07-311-6/+6
| | | | | | | | | | | Using hw.conf.channel is wrong as it could be the temporary channel if any function like the beacon get function is called while scanning or during other temporary out-of-channel activities. Use oper_channel instead. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: use oper_channel in ibssJohannes Berg2012-07-311-4/+4
| | | | | | | | | | | Using hw.conf.channel is wrong as it could be the temporary channel if any function like the beacon get function is called while scanning or during other temporary out-of-channel activities. Use oper_channel instead. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: use oper_channel in meshJohannes Berg2012-07-311-3/+4
| | | | | | | | | | | Using hw.conf.channel is wrong as it could be the temporary channel if any function like the beacon get function is called while scanning or during other temporary out-of-channel activities. Use oper_channel instead. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: set channel only once during auth/assocJohannes Berg2012-07-311-26/+43
| | | | | | | | | | | There's no need to set up the channel during auth and again during assoc, just do it once. Currently this doesn't result in any changes since calling hw_config() with an unchanged channel will return early, but with the channel context work this has an impact on channel context assignment. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: rename sta to new_staJohannes Berg2012-07-311-8/+8
| | | | | | | | In ieee80211_prep_connection(), the station (if not NULL) is the new station (representing the AP) that needs to be added. Rename the variable to "new_sta" to clarify this. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: supress HT/VHT disable if not supportedJohannes Berg2012-07-311-4/+6
| | | | | | | | If HT/VHT isn't supported by us we shouldn't print a message that we disabled it, do that only if the AP didn't support WMM and we therefore disable it. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: move TX station pointer and restructure TXThomas Huehn2012-07-3153-132/+232
| | | | | | | | | | | | | | Remove the control.sta pointer from ieee80211_tx_info to free up sufficient space in the TX skb control buffer for the upcoming Transmit Power Control (TPC). Instead, the pointer is now on the stack in a new control struct that is passed as a function parameter to the drivers' tx method. Signed-off-by: Thomas Huehn <thomas@net.t-labs.tu-berlin.de> Signed-off-by: Alina Friedrichsen <x-alina@gmx.net> Signed-off-by: Felix Fietkau <nbd@openwrt.org> [reworded commit message] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: add PS flag to bss_confEliad Peller2012-07-315-3/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, ps mode is indicated per device (rather than per interface), which doesn't make a lot of sense. Moreover, there are subtle bugs caused by the inability to indicate ps change along with other changes (e.g. when the AP deauth us, we'd like to indicate CHANGED_PS | CHANGED_ASSOC, as changing PS before notifying about disassociation will result in null-packets being sent (if IEEE80211_HW_SUPPORTS_DYNAMIC_PS) while the sta is already disconnected.) Keep the current per-device notifications, and add parallel per-vif notifications. In order to keep it simple, the per-device ps and the per-vif ps are orthogonal - the per-vif ps configuration is determined only by the user configuration (enable/disable) and the connection state, and is not affected by other vifs state and (temporary) dynamic_ps/offchannel operations (unlike per-device ps). Signed-off-by: Eliad Peller <eliad@wizery.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wlcore: op_tx: pass sta explicitly when inferring frame hlidArik Nemtsov2012-07-313-13/+8
| | | | | | | | avoid using the skb CB for getting the appropriate sta. Signed-off-by: Arik Nemtsov <arik@wizery.com> Acked-by: Luciano Coelho <coelho@ti.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wlcore: don't get the hlid from a queued skbArik Nemtsov2012-07-311-20/+26
| | | | | | | | | | | | There was a bug hiding here since the hlid was sometimes inferred from the sta, which might be invalid at this point. Instead, propagate the hlid from the skb-queue where we got the skb in the first place. Signed-off-by: Arik Nemtsov <arik@wizery.com> Acked-by: Luciano Coelho <coelho@ti.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* cfg80211: unify IE searchVladimir Kondratiev2012-07-311-15/+3
| | | | | | | | Remove ah-hoc IE search code found in the ieee80211_bss_get_ie() and use cfg80211_find_ie() instead. Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: don't call mgd_prepare_tx when associatedEmmanuel Grumbach2012-07-311-4/+5
| | | | | | | | | | | | This doesn't make any sense since we are expected to be on the medium or at least to Tx only when we are on the right channel and the AP/GO can hear us. Move the call to mgd_prepare_tx() for deauth to be only done in case we're sending a deauth while not associated. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: don't react to beacon loss if HW monitoringJohannes Berg2012-07-311-0/+3
| | | | | | | | | | | | | | | | | | | If the HW is monitoring connection loss (as advertised by IEEE80211_HW_CONNECTION_MONITOR) but not filtering beacons (IEEE80211_VIF_BEACON_FILTER) then mac80211 will still start the beacon loss timer and if a few beacons are lost, e.g. due to scanning, drop the connection. If the hardware doesn't advertise connection monitoring, then it won't drop the connection right away but probe the AP, which is intended, but due to the logic in the timer when connection monitoring is done it assumes the connection was actually lost. Fix this problem by not starting the timer when the HW does connection monitoring. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: VHT (11ac) associationMahesh Palivela2012-07-312-2/+39
| | | | | | | | | Insert VHT IEs into association frames to allow mac80211 to connect as a VHT client. Signed-off-by: Mahesh Palivela <maheshp@posedge.com> [clarify commit message] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* mac80211: don't re-init rate control when receiving mesh beaconChun-Yeow Yeoh2012-07-311-0/+5
| | | | | | | | | | | Rate control is re-initialized whenever a beacon from a mesh peer received, breaking the algorithms and resulting in low performance. Return early from mesh_peer_init if we already established a link with this peer to avoid this. Signed-off-by: Chun-Yeow Yeoh <yeohchunyeow@gmail.com> [clarify commit message] Signed-off-by: Johannes Berg <johannes.berg@intel.com>