#include <linux/if_arp.h>
#include <linux/etherdevice.h>
#include <linux/rtnetlink.h>
#include <net/sch_generic.h>
#include <linux/slab.h>
#include <linux/export.h>
#include <linux/random.h>
#include <net/mac80211.h>
#include "ieee80211_i.h"
#include "driver-ops.h"
#include "mesh.h"
#define IEEE80211_PROBE_DELAY …
#define IEEE80211_CHANNEL_TIME …
#define IEEE80211_PASSIVE_CHANNEL_TIME …
void ieee80211_rx_bss_put(struct ieee80211_local *local,
struct ieee80211_bss *bss)
{ … }
static bool is_uapsd_supported(struct ieee802_11_elems *elems)
{ … }
struct inform_bss_update_data { … };
void ieee80211_inform_bss(struct wiphy *wiphy,
struct cfg80211_bss *cbss,
const struct cfg80211_bss_ies *ies,
void *data)
{ … }
struct ieee80211_bss *
ieee80211_bss_info_update(struct ieee80211_local *local,
struct ieee80211_rx_status *rx_status,
struct ieee80211_mgmt *mgmt, size_t len,
struct ieee80211_channel *channel)
{ … }
static bool ieee80211_scan_accept_presp(struct ieee80211_sub_if_data *sdata,
struct ieee80211_channel *channel,
u32 scan_flags, const u8 *da)
{ … }
void ieee80211_scan_rx(struct ieee80211_local *local, struct sk_buff *skb)
{ … }
static void ieee80211_prepare_scan_chandef(struct cfg80211_chan_def *chandef)
{ … }
static bool ieee80211_prep_hw_scan(struct ieee80211_sub_if_data *sdata)
{ … }
static void __ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted)
{ … }
void ieee80211_scan_completed(struct ieee80211_hw *hw,
struct cfg80211_scan_info *info)
{ … }
EXPORT_SYMBOL(…);
static int ieee80211_start_sw_scan(struct ieee80211_local *local,
struct ieee80211_sub_if_data *sdata)
{ … }
static bool __ieee80211_can_leave_ch(struct ieee80211_sub_if_data *sdata)
{ … }
static bool ieee80211_can_scan(struct ieee80211_local *local,
struct ieee80211_sub_if_data *sdata)
{ … }
void ieee80211_run_deferred_scan(struct ieee80211_local *local)
{ … }
static void ieee80211_send_scan_probe_req(struct ieee80211_sub_if_data *sdata,
const u8 *src, const u8 *dst,
const u8 *ssid, size_t ssid_len,
const u8 *ie, size_t ie_len,
u32 ratemask, u32 flags, u32 tx_flags,
struct ieee80211_channel *channel)
{ … }
static void ieee80211_scan_state_send_probe(struct ieee80211_local *local,
unsigned long *next_delay)
{ … }
static int __ieee80211_start_scan(struct ieee80211_sub_if_data *sdata,
struct cfg80211_scan_request *req)
{ … }
static unsigned long
ieee80211_scan_get_channel_time(struct ieee80211_channel *chan)
{ … }
static void ieee80211_scan_state_decision(struct ieee80211_local *local,
unsigned long *next_delay)
{ … }
static void ieee80211_scan_state_set_channel(struct ieee80211_local *local,
unsigned long *next_delay)
{ … }
static void ieee80211_scan_state_suspend(struct ieee80211_local *local,
unsigned long *next_delay)
{ … }
static void ieee80211_scan_state_resume(struct ieee80211_local *local,
unsigned long *next_delay)
{ … }
void ieee80211_scan_work(struct wiphy *wiphy, struct wiphy_work *work)
{ … }
int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata,
struct cfg80211_scan_request *req)
{ … }
int ieee80211_request_ibss_scan(struct ieee80211_sub_if_data *sdata,
const u8 *ssid, u8 ssid_len,
struct ieee80211_channel **channels,
unsigned int n_channels)
{ … }
void ieee80211_scan_cancel(struct ieee80211_local *local)
{ … }
int __ieee80211_request_sched_scan_start(struct ieee80211_sub_if_data *sdata,
struct cfg80211_sched_scan_request *req)
{ … }
int ieee80211_request_sched_scan_start(struct ieee80211_sub_if_data *sdata,
struct cfg80211_sched_scan_request *req)
{ … }
int ieee80211_request_sched_scan_stop(struct ieee80211_local *local)
{ … }
void ieee80211_sched_scan_results(struct ieee80211_hw *hw)
{ … }
EXPORT_SYMBOL(…);
void ieee80211_sched_scan_end(struct ieee80211_local *local)
{ … }
void ieee80211_sched_scan_stopped_work(struct wiphy *wiphy,
struct wiphy_work *work)
{ … }
void ieee80211_sched_scan_stopped(struct ieee80211_hw *hw)
{ … }
EXPORT_SYMBOL(…);