#include <linux/export.h>
#include <linux/bitops.h>
#include <linux/etherdevice.h>
#include <linux/slab.h>
#include <linux/ieee80211.h>
#include <net/cfg80211.h>
#include <net/ip.h>
#include <net/dsfield.h>
#include <linux/if_vlan.h>
#include <linux/mpls.h>
#include <linux/gcd.h>
#include <linux/bitfield.h>
#include <linux/nospec.h>
#include "core.h"
#include "rdev-ops.h"
const struct ieee80211_rate *
ieee80211_get_response_rate(struct ieee80211_supported_band *sband,
u32 basic_rates, int bitrate)
{ … }
EXPORT_SYMBOL(…);
u32 ieee80211_mandatory_rates(struct ieee80211_supported_band *sband)
{ … }
EXPORT_SYMBOL(…);
u32 ieee80211_channel_to_freq_khz(int chan, enum nl80211_band band)
{ … }
EXPORT_SYMBOL(…);
enum nl80211_chan_width
ieee80211_s1g_channel_width(const struct ieee80211_channel *chan)
{ … }
EXPORT_SYMBOL(…);
int ieee80211_freq_khz_to_channel(u32 freq)
{ … }
EXPORT_SYMBOL(…);
struct ieee80211_channel *ieee80211_get_channel_khz(struct wiphy *wiphy,
u32 freq)
{ … }
EXPORT_SYMBOL(…);
static void set_mandatory_flags_band(struct ieee80211_supported_band *sband)
{ … }
void ieee80211_set_bitrate_flags(struct wiphy *wiphy)
{ … }
bool cfg80211_supported_cipher_suite(struct wiphy *wiphy, u32 cipher)
{ … }
static bool
cfg80211_igtk_cipher_supported(struct cfg80211_registered_device *rdev)
{ … }
bool cfg80211_valid_key_idx(struct cfg80211_registered_device *rdev,
int key_idx, bool pairwise)
{ … }
int cfg80211_validate_key_settings(struct cfg80211_registered_device *rdev,
struct key_params *params, int key_idx,
bool pairwise, const u8 *mac_addr)
{ … }
unsigned int __attribute_const__ ieee80211_hdrlen(__le16 fc)
{ … }
EXPORT_SYMBOL(…);
unsigned int ieee80211_get_hdrlen_from_skb(const struct sk_buff *skb)
{ … }
EXPORT_SYMBOL(…);
static unsigned int __ieee80211_get_mesh_hdrlen(u8 flags)
{ … }
unsigned int ieee80211_get_mesh_hdrlen(struct ieee80211s_hdr *meshhdr)
{ … }
EXPORT_SYMBOL(…);
bool ieee80211_get_8023_tunnel_proto(const void *hdr, __be16 *proto)
{ … }
EXPORT_SYMBOL(…);
int ieee80211_strip_8023_mesh_hdr(struct sk_buff *skb)
{ … }
EXPORT_SYMBOL(…);
int ieee80211_data_to_8023_exthdr(struct sk_buff *skb, struct ethhdr *ehdr,
const u8 *addr, enum nl80211_iftype iftype,
u8 data_offset, bool is_amsdu)
{ … }
EXPORT_SYMBOL(…);
static void
__frame_add_frag(struct sk_buff *skb, struct page *page,
void *ptr, int len, int size)
{ … }
static void
__ieee80211_amsdu_copy_frag(struct sk_buff *skb, struct sk_buff *frame,
int offset, int len)
{ … }
static struct sk_buff *
__ieee80211_amsdu_copy(struct sk_buff *skb, unsigned int hlen,
int offset, int len, bool reuse_frag,
int min_len)
{ … }
static u16
ieee80211_amsdu_subframe_length(void *field, u8 mesh_flags, u8 hdr_type)
{ … }
bool ieee80211_is_valid_amsdu(struct sk_buff *skb, u8 mesh_hdr)
{ … }
EXPORT_SYMBOL(…);
void ieee80211_amsdu_to_8023s(struct sk_buff *skb, struct sk_buff_head *list,
const u8 *addr, enum nl80211_iftype iftype,
const unsigned int extra_headroom,
const u8 *check_da, const u8 *check_sa,
u8 mesh_control)
{ … }
EXPORT_SYMBOL(…);
unsigned int cfg80211_classify8021d(struct sk_buff *skb,
struct cfg80211_qos_map *qos_map)
{ … }
EXPORT_SYMBOL(…);
const struct element *ieee80211_bss_get_elem(struct cfg80211_bss *bss, u8 id)
{ … }
EXPORT_SYMBOL(…);
void cfg80211_upload_connect_keys(struct wireless_dev *wdev)
{ … }
void cfg80211_process_wdev_events(struct wireless_dev *wdev)
{ … }
void cfg80211_process_rdev_events(struct cfg80211_registered_device *rdev)
{ … }
int cfg80211_change_iface(struct cfg80211_registered_device *rdev,
struct net_device *dev, enum nl80211_iftype ntype,
struct vif_params *params)
{ … }
static u32 cfg80211_calculate_bitrate_ht(struct rate_info *rate)
{ … }
static u32 cfg80211_calculate_bitrate_dmg(struct rate_info *rate)
{ … }
static u32 cfg80211_calculate_bitrate_extended_sc_dmg(struct rate_info *rate)
{ … }
static u32 cfg80211_calculate_bitrate_edmg(struct rate_info *rate)
{ … }
static u32 cfg80211_calculate_bitrate_vht(struct rate_info *rate)
{ … }
static u32 cfg80211_calculate_bitrate_he(struct rate_info *rate)
{ … }
static u32 cfg80211_calculate_bitrate_eht(struct rate_info *rate)
{ … }
static u32 cfg80211_calculate_bitrate_s1g(struct rate_info *rate)
{ … }
u32 cfg80211_calculate_bitrate(struct rate_info *rate)
{ … }
EXPORT_SYMBOL(…);
int cfg80211_get_p2p_attr(const u8 *ies, unsigned int len,
enum ieee80211_p2p_attr_id attr,
u8 *buf, unsigned int bufsize)
{ … }
EXPORT_SYMBOL(…);
static bool ieee80211_id_in_list(const u8 *ids, int n_ids, u8 id, bool id_ext)
{ … }
static size_t skip_ie(const u8 *ies, size_t ielen, size_t pos)
{ … }
size_t ieee80211_ie_split_ric(const u8 *ies, size_t ielen,
const u8 *ids, int n_ids,
const u8 *after_ric, int n_after_ric,
size_t offset)
{ … }
EXPORT_SYMBOL(…);
void ieee80211_fragment_element(struct sk_buff *skb, u8 *len_pos, u8 frag_id)
{ … }
EXPORT_SYMBOL(…);
bool ieee80211_operating_class_to_band(u8 operating_class,
enum nl80211_band *band)
{ … }
EXPORT_SYMBOL(…);
bool ieee80211_operating_class_to_chandef(u8 operating_class,
struct ieee80211_channel *chan,
struct cfg80211_chan_def *chandef)
{ … }
EXPORT_SYMBOL(…);
bool ieee80211_chandef_to_operating_class(struct cfg80211_chan_def *chandef,
u8 *op_class)
{ … }
EXPORT_SYMBOL(…);
static int cfg80211_wdev_bi(struct wireless_dev *wdev)
{ … }
static void cfg80211_calculate_bi_data(struct wiphy *wiphy, u32 new_beacon_int,
u32 *beacon_int_gcd,
bool *beacon_int_different,
int radio_idx)
{ … }
int cfg80211_validate_beacon_int(struct cfg80211_registered_device *rdev,
enum nl80211_iftype iftype, u32 beacon_int)
{ … }
int cfg80211_iter_combinations(struct wiphy *wiphy,
struct iface_combination_params *params,
void (*iter)(const struct ieee80211_iface_combination *c,
void *data),
void *data)
{ … }
EXPORT_SYMBOL(…);
static void
cfg80211_iter_sum_ifcombs(const struct ieee80211_iface_combination *c,
void *data)
{ … }
int cfg80211_check_combinations(struct wiphy *wiphy,
struct iface_combination_params *params)
{ … }
EXPORT_SYMBOL(…);
int ieee80211_get_ratemask(struct ieee80211_supported_band *sband,
const u8 *rates, unsigned int n_rates,
u32 *mask)
{ … }
unsigned int ieee80211_get_num_supported_channels(struct wiphy *wiphy)
{ … }
EXPORT_SYMBOL(…);
int cfg80211_get_station(struct net_device *dev, const u8 *mac_addr,
struct station_info *sinfo)
{ … }
EXPORT_SYMBOL(…);
void cfg80211_free_nan_func(struct cfg80211_nan_func *f)
{ … }
EXPORT_SYMBOL(…);
bool cfg80211_does_bw_fit_range(const struct ieee80211_freq_range *freq_range,
u32 center_freq_khz, u32 bw_khz)
{ … }
int cfg80211_sinfo_alloc_tid_stats(struct station_info *sinfo, gfp_t gfp)
{ … }
EXPORT_SYMBOL(…);
const unsigned char rfc1042_header[] __aligned(2) = …;
EXPORT_SYMBOL(…);
const unsigned char bridge_tunnel_header[] __aligned(2) = …;
EXPORT_SYMBOL(…);
struct iapp_layer2_update { … } __packed;
void cfg80211_send_layer2_update(struct net_device *dev, const u8 *addr)
{ … }
EXPORT_SYMBOL(…);
int ieee80211_get_vht_max_nss(struct ieee80211_vht_cap *cap,
enum ieee80211_vht_chanwidth bw,
int mcs, bool ext_nss_bw_capable,
unsigned int max_vht_nss)
{ … }
EXPORT_SYMBOL(…);
bool cfg80211_iftype_allowed(struct wiphy *wiphy, enum nl80211_iftype iftype,
bool is_4addr, u8 check_swif)
{ … }
EXPORT_SYMBOL(…);
void cfg80211_remove_link(struct wireless_dev *wdev, unsigned int link_id)
{ … }
void cfg80211_remove_links(struct wireless_dev *wdev)
{ … }
int cfg80211_remove_virtual_intf(struct cfg80211_registered_device *rdev,
struct wireless_dev *wdev)
{ … }
const struct wiphy_iftype_ext_capab *
cfg80211_get_iftype_ext_capa(struct wiphy *wiphy, enum nl80211_iftype type)
{ … }
EXPORT_SYMBOL(…);
static bool
ieee80211_radio_freq_range_valid(const struct wiphy_radio *radio,
u32 freq, u32 width)
{ … }
bool cfg80211_radio_chandef_valid(const struct wiphy_radio *radio,
const struct cfg80211_chan_def *chandef)
{ … }
EXPORT_SYMBOL(…);