#include <linux/delay.h>
#include <linux/slab.h>
#include <linux/if_ether.h>
#include <linux/skbuff.h>
#include <linux/if_arp.h>
#include <linux/etherdevice.h>
#include <linux/rtnetlink.h>
#include <net/mac80211.h>
#include "ieee80211_i.h"
#include "driver-ops.h"
#include "rate.h"
#define IEEE80211_SCAN_INTERVAL …
#define IEEE80211_IBSS_JOIN_TIMEOUT …
#define IEEE80211_IBSS_MERGE_INTERVAL …
#define IEEE80211_IBSS_INACTIVITY_LIMIT …
#define IEEE80211_IBSS_RSN_INACTIVITY_LIMIT …
#define IEEE80211_IBSS_MAX_STA_ENTRIES …
static struct beacon_data *
ieee80211_ibss_build_presp(struct ieee80211_sub_if_data *sdata,
const int beacon_int, const u32 basic_rates,
const u16 capability, u64 tsf,
struct cfg80211_chan_def *chandef,
bool *have_higher_than_11mbit,
struct cfg80211_csa_settings *csa_settings)
{ … }
static void __ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
const u8 *bssid, const int beacon_int,
struct cfg80211_chan_def *req_chandef,
const u32 basic_rates,
const u16 capability, u64 tsf,
bool creator)
{ … }
static void ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
struct ieee80211_bss *bss)
{ … }
int ieee80211_ibss_csa_beacon(struct ieee80211_sub_if_data *sdata,
struct cfg80211_csa_settings *csa_settings,
u64 *changed)
{ … }
int ieee80211_ibss_finish_csa(struct ieee80211_sub_if_data *sdata, u64 *changed)
{ … }
void ieee80211_ibss_stop(struct ieee80211_sub_if_data *sdata)
{ … }
static struct sta_info *ieee80211_ibss_finish_sta(struct sta_info *sta)
__acquires(RCU)
{ … }
static struct sta_info *
ieee80211_ibss_add_sta(struct ieee80211_sub_if_data *sdata, const u8 *bssid,
const u8 *addr, u32 supp_rates)
__acquires(RCU)
{ … }
static int ieee80211_sta_active_ibss(struct ieee80211_sub_if_data *sdata)
{ … }
static void ieee80211_ibss_disconnect(struct ieee80211_sub_if_data *sdata)
{ … }
static void ieee80211_csa_connection_drop_work(struct wiphy *wiphy,
struct wiphy_work *work)
{ … }
static void ieee80211_ibss_csa_mark_radar(struct ieee80211_sub_if_data *sdata)
{ … }
static bool
ieee80211_ibss_process_chanswitch(struct ieee80211_sub_if_data *sdata,
struct ieee802_11_elems *elems,
bool beacon)
{ … }
static void
ieee80211_rx_mgmt_spectrum_mgmt(struct ieee80211_sub_if_data *sdata,
struct ieee80211_mgmt *mgmt, size_t len,
struct ieee80211_rx_status *rx_status,
struct ieee802_11_elems *elems)
{ … }
static void ieee80211_rx_mgmt_deauth_ibss(struct ieee80211_sub_if_data *sdata,
struct ieee80211_mgmt *mgmt,
size_t len)
{ … }
static void ieee80211_rx_mgmt_auth_ibss(struct ieee80211_sub_if_data *sdata,
struct ieee80211_mgmt *mgmt,
size_t len)
{ … }
static void ieee80211_update_sta_info(struct ieee80211_sub_if_data *sdata,
struct ieee80211_mgmt *mgmt, size_t len,
struct ieee80211_rx_status *rx_status,
struct ieee802_11_elems *elems,
struct ieee80211_channel *channel)
{ … }
static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata,
struct ieee80211_mgmt *mgmt, size_t len,
struct ieee80211_rx_status *rx_status,
struct ieee802_11_elems *elems)
{ … }
void ieee80211_ibss_rx_no_sta(struct ieee80211_sub_if_data *sdata,
const u8 *bssid, const u8 *addr,
u32 supp_rates)
{ … }
static void ieee80211_ibss_sta_expire(struct ieee80211_sub_if_data *sdata)
{ … }
static void ieee80211_sta_merge_ibss(struct ieee80211_sub_if_data *sdata)
{ … }
static void ieee80211_sta_create_ibss(struct ieee80211_sub_if_data *sdata)
{ … }
static unsigned int ibss_setup_channels(struct wiphy *wiphy,
struct ieee80211_channel **channels,
unsigned int channels_max,
u32 center_freq, u32 width)
{ … }
static unsigned int
ieee80211_ibss_setup_scan_channels(struct wiphy *wiphy,
const struct cfg80211_chan_def *chandef,
struct ieee80211_channel **channels,
unsigned int channels_max)
{ … }
static void ieee80211_sta_find_ibss(struct ieee80211_sub_if_data *sdata)
{ … }
static void ieee80211_rx_mgmt_probe_req(struct ieee80211_sub_if_data *sdata,
struct sk_buff *req)
{ … }
static
void ieee80211_rx_mgmt_probe_beacon(struct ieee80211_sub_if_data *sdata,
struct ieee80211_mgmt *mgmt, size_t len,
struct ieee80211_rx_status *rx_status)
{ … }
void ieee80211_ibss_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
struct sk_buff *skb)
{ … }
void ieee80211_ibss_work(struct ieee80211_sub_if_data *sdata)
{ … }
static void ieee80211_ibss_timer(struct timer_list *t)
{ … }
void ieee80211_ibss_setup_sdata(struct ieee80211_sub_if_data *sdata)
{ … }
void ieee80211_ibss_notify_scan_completed(struct ieee80211_local *local)
{ … }
int ieee80211_ibss_join(struct ieee80211_sub_if_data *sdata,
struct cfg80211_ibss_params *params)
{ … }
int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata)
{ … }