#include <linux/slab.h>
#include <asm/unaligned.h>
#include "ieee80211_i.h"
#include "mesh.h"
#include "wme.h"
#include "driver-ops.h"
static int mesh_allocated;
static struct kmem_cache *rm_cache;
bool mesh_action_is_path_sel(struct ieee80211_mgmt *mgmt)
{ … }
void ieee80211s_init(void)
{ … }
void ieee80211s_stop(void)
{ … }
static void ieee80211_mesh_housekeeping_timer(struct timer_list *t)
{ … }
bool mesh_matches_local(struct ieee80211_sub_if_data *sdata,
struct ieee802_11_elems *ie)
{ … }
bool mesh_peer_accepts_plinks(struct ieee802_11_elems *ie)
{ … }
u64 mesh_accept_plinks_update(struct ieee80211_sub_if_data *sdata)
{ … }
void mesh_sta_cleanup(struct sta_info *sta)
{ … }
int mesh_rmc_init(struct ieee80211_sub_if_data *sdata)
{ … }
void mesh_rmc_free(struct ieee80211_sub_if_data *sdata)
{ … }
int mesh_rmc_check(struct ieee80211_sub_if_data *sdata,
const u8 *sa, struct ieee80211s_hdr *mesh_hdr)
{ … }
int mesh_add_meshconf_ie(struct ieee80211_sub_if_data *sdata,
struct sk_buff *skb)
{ … }
int mesh_add_meshid_ie(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb)
{ … }
static int mesh_add_awake_window_ie(struct ieee80211_sub_if_data *sdata,
struct sk_buff *skb)
{ … }
int mesh_add_vendor_ies(struct ieee80211_sub_if_data *sdata,
struct sk_buff *skb)
{ … }
int mesh_add_rsn_ie(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb)
{ … }
static int mesh_add_ds_params_ie(struct ieee80211_sub_if_data *sdata,
struct sk_buff *skb)
{ … }
int mesh_add_ht_cap_ie(struct ieee80211_sub_if_data *sdata,
struct sk_buff *skb)
{ … }
int mesh_add_ht_oper_ie(struct ieee80211_sub_if_data *sdata,
struct sk_buff *skb)
{ … }
int mesh_add_vht_cap_ie(struct ieee80211_sub_if_data *sdata,
struct sk_buff *skb)
{ … }
int mesh_add_vht_oper_ie(struct ieee80211_sub_if_data *sdata,
struct sk_buff *skb)
{ … }
int mesh_add_he_cap_ie(struct ieee80211_sub_if_data *sdata,
struct sk_buff *skb, u8 ie_len)
{ … }
int mesh_add_he_oper_ie(struct ieee80211_sub_if_data *sdata,
struct sk_buff *skb)
{ … }
int mesh_add_he_6ghz_cap_ie(struct ieee80211_sub_if_data *sdata,
struct sk_buff *skb)
{ … }
int mesh_add_eht_cap_ie(struct ieee80211_sub_if_data *sdata,
struct sk_buff *skb, u8 ie_len)
{ … }
int mesh_add_eht_oper_ie(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb)
{ … }
static void ieee80211_mesh_path_timer(struct timer_list *t)
{ … }
static void ieee80211_mesh_path_root_timer(struct timer_list *t)
{ … }
void ieee80211_mesh_root_setup(struct ieee80211_if_mesh *ifmsh)
{ … }
static void
ieee80211_mesh_update_bss_params(struct ieee80211_sub_if_data *sdata,
u8 *ie, u8 ie_len)
{ … }
bool ieee80211_mesh_xmit_fast(struct ieee80211_sub_if_data *sdata,
struct sk_buff *skb, u32 ctrl_flags)
{ … }
int ieee80211_fill_mesh_addresses(struct ieee80211_hdr *hdr, __le16 *fc,
const u8 *meshda, const u8 *meshsa)
{ … }
unsigned int ieee80211_new_mesh_header(struct ieee80211_sub_if_data *sdata,
struct ieee80211s_hdr *meshhdr,
const char *addr4or5, const char *addr6)
{ … }
static void ieee80211_mesh_housekeeping(struct ieee80211_sub_if_data *sdata)
{ … }
static void ieee80211_mesh_rootpath(struct ieee80211_sub_if_data *sdata)
{ … }
static int
ieee80211_mesh_build_beacon(struct ieee80211_if_mesh *ifmsh)
{ … }
static int
ieee80211_mesh_rebuild_beacon(struct ieee80211_sub_if_data *sdata)
{ … }
void ieee80211_mbss_info_change_notify(struct ieee80211_sub_if_data *sdata,
u64 changed)
{ … }
int ieee80211_start_mesh(struct ieee80211_sub_if_data *sdata)
{ … }
void ieee80211_stop_mesh(struct ieee80211_sub_if_data *sdata)
{ … }
static void ieee80211_mesh_csa_mark_radar(struct ieee80211_sub_if_data *sdata)
{ … }
static bool
ieee80211_mesh_process_chnswitch(struct ieee80211_sub_if_data *sdata,
struct ieee802_11_elems *elems, bool beacon)
{ … }
static void
ieee80211_mesh_rx_probe_req(struct ieee80211_sub_if_data *sdata,
struct ieee80211_mgmt *mgmt, size_t len)
{ … }
static void ieee80211_mesh_rx_bcn_presp(struct ieee80211_sub_if_data *sdata,
u16 stype,
struct ieee80211_mgmt *mgmt,
size_t len,
struct ieee80211_rx_status *rx_status)
{ … }
int ieee80211_mesh_finish_csa(struct ieee80211_sub_if_data *sdata, u64 *changed)
{ … }
int ieee80211_mesh_csa_beacon(struct ieee80211_sub_if_data *sdata,
struct cfg80211_csa_settings *csa_settings,
u64 *changed)
{ … }
static int mesh_fwd_csa_frame(struct ieee80211_sub_if_data *sdata,
struct ieee80211_mgmt *mgmt, size_t len,
struct ieee802_11_elems *elems)
{ … }
static void mesh_rx_csa_frame(struct ieee80211_sub_if_data *sdata,
struct ieee80211_mgmt *mgmt, size_t len)
{ … }
static void ieee80211_mesh_rx_mgmt_action(struct ieee80211_sub_if_data *sdata,
struct ieee80211_mgmt *mgmt,
size_t len,
struct ieee80211_rx_status *rx_status)
{ … }
void ieee80211_mesh_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
struct sk_buff *skb)
{ … }
static void mesh_bss_info_changed(struct ieee80211_sub_if_data *sdata)
{ … }
void ieee80211_mesh_work(struct ieee80211_sub_if_data *sdata)
{ … }
void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata)
{ … }
void ieee80211_mesh_teardown_sdata(struct ieee80211_sub_if_data *sdata)
{ … }