cfg80211 子系统¶
cfg80211 是 Linux 中 802.11 设备的配置 API。它桥接了用户空间和驱动程序,并提供了一些与 802.11 相关的实用功能。所有 Linux 中的现代无线驱动程序都必须直接或间接地通过 mac80211 使用 cfg80211,以便它们通过 nl80211 提供一致的 API。为了向后兼容,cfg80211 还为用户空间提供了无线扩展,但完全对驱动程序隐藏了它们。
此外,cfg80211 包含代码以帮助执行法规频谱使用限制。
设备注册¶
为了使驱动程序使用 cfg80211,它必须向 cfg80211 注册硬件设备。这是通过下面描述的许多硬件功能结构发生的。
每个设备的基本结构是“wiphy”,它的每个实例都描述了一个连接到系统的物理无线设备。每个这样的 wiphy 可以具有零个、一个或多个与其关联的虚拟接口,这些接口需要通过将网络接口的 ieee80211_ptr 指针指向 struct wireless_dev
来识别,该结构进一步描述了接口的无线部分。通常,此结构嵌入在网络接口的私有数据区域中。驱动程序可以选择允许动态创建或销毁虚拟接口,但如果没有至少一个或创建一些虚拟接口的能力,则无线设备将毫无用处。
每个 wiphy 结构都包含设备功能信息,并且还具有指向驱动程序提供的各种操作的指针。此处的定义和结构详细描述了这些功能。
-
enum ieee80211_channel_flags¶
信道标志
常量
IEEE80211_CHAN_DISABLED
此信道已禁用。
IEEE80211_CHAN_NO_IR
不要启动辐射,包括发送探测请求或信标。
IEEE80211_CHAN_PSD
已为此信道设置功率谱密度(以 dBm 为单位)。
IEEE80211_CHAN_RADAR
在此信道上需要雷达检测。
IEEE80211_CHAN_NO_HT40PLUS
不允许在此信道之上扩展信道。
IEEE80211_CHAN_NO_HT40MINUS
不允许在此信道之下扩展信道。
IEEE80211_CHAN_NO_OFDM
在此信道上不允许 OFDM。
IEEE80211_CHAN_NO_80MHZ
如果驱动程序支持该频段上的 80 MHz,则此标志指示 80 MHz 信道不能将此信道用作控制信道或任何辅助信道。这可能是由于驱动程序或由于法规带宽限制。
IEEE80211_CHAN_NO_160MHZ
如果驱动程序支持该频段上的 160 MHz,则此标志指示 160 MHz 信道不能将此信道用作控制信道或任何辅助信道。这可能是由于驱动程序或由于法规带宽限制。
IEEE80211_CHAN_INDOOR_ONLY
请参阅
NL80211_FREQUENCY_ATTR_INDOOR_ONLY
IEEE80211_CHAN_IR_CONCURRENT
请参阅
NL80211_FREQUENCY_ATTR_IR_CONCURRENT
IEEE80211_CHAN_NO_20MHZ
在此信道上不允许 20 MHz 带宽。
IEEE80211_CHAN_NO_10MHZ
在此信道上不允许 10 MHz 带宽。
IEEE80211_CHAN_NO_HE
在此信道上不允许 HE 操作。
IEEE80211_CHAN_1MHZ
在此信道上允许 1 MHz 带宽。
IEEE80211_CHAN_2MHZ
在此信道上允许 2 MHz 带宽。
IEEE80211_CHAN_4MHZ
在此信道上允许 4 MHz 带宽。
IEEE80211_CHAN_8MHZ
在此信道上允许 8 MHz 带宽。
IEEE80211_CHAN_16MHZ
在此信道上允许 16 MHz 带宽。
IEEE80211_CHAN_NO_320MHZ
如果驱动程序支持该频段上的 320 MHz,则此标志指示 320 MHz 信道不能将此信道用作控制信道或任何辅助信道。这可能是由于驱动程序或由于法规带宽限制。
IEEE80211_CHAN_NO_EHT
在此信道上不允许 EHT 操作。
IEEE80211_CHAN_DFS_CONCURRENT
请参阅
NL80211_RRF_DFS_CONCURRENT
IEEE80211_CHAN_NO_6GHZ_VLP_CLIENT
不允许使用此信道连接 VLP AP 的客户端
IEEE80211_CHAN_NO_6GHZ_AFC_CLIENT
不允许使用此信道连接 AFC AP 的客户端
IEEE80211_CHAN_CAN_MONITOR
即使存在其他(法规)限制,也可以将此信道用于监视模式,即使它在其他情况下被禁用。
IEEE80211_CHAN_ALLOW_6GHZ_VLP_AP
允许将此信道用于超低功率 (VLP) 的 AP 操作,即使在其他情况下设置为 NO_IR。
IEEE80211_CHAN_ALLOW_20MHZ_ACTIVITY
允许在 20 MHz 信道上进行活动,即使在其他情况下设置为 NO_IR。
描述
法规控制代码设置的信道标志。
-
struct ieee80211_channel¶
信道定义
定义:
struct ieee80211_channel {
enum nl80211_band band;
u32 center_freq;
u16 freq_offset;
u16 hw_value;
u32 flags;
int max_antenna_gain;
int max_power;
int max_reg_power;
bool beacon_found;
u32 orig_flags;
int orig_mag, orig_mpwr;
enum nl80211_dfs_state dfs_state;
unsigned long dfs_state_entered;
unsigned int dfs_cac_ms;
s8 psd;
};
成员
band
此信道所属的频段。
center_freq
中心频率,以 MHz 为单位
freq_offset
从 center_freq 的偏移量,以 KHz 为单位
hw_value
信道的硬件特定值
flags
来自
enum ieee80211_channel_flags
的信道标志。max_antenna_gain
最大天线增益,以 dBi 为单位
max_power
最大传输功率(以 dBm 为单位)
max_reg_power
最大法规传输功率(以 dBm 为单位)
beacon_found
法规代码的助手,用于指示何时在此信道上找到信标。使用 regulatory_hint_found_beacon() 启用此功能,这仅在 5 GHz 频段上有效。
orig_flags
注册时的信道标志,由法规代码用于支持具有其他限制的设备
orig_mag
内部使用
orig_mpwr
内部使用
dfs_state
此信道的当前状态。仅当在此信道上需要雷达时才相关。
dfs_state_entered
输入 dfs 状态时的时间戳(jiffies)。
dfs_cac_ms
DFS CAC 时间,以毫秒为单位,这对 DFS 信道有效。
psd
功率谱密度(以 dBm 为单位)
描述
此结构描述了用于 cfg80211 的单个信道。
-
enum ieee80211_rate_flags¶
速率标志
常量
IEEE80211_RATE_SHORT_PREAMBLE
硬件可以使用此比特率的短前导码发送;仅在 2.4GHz 频段和 CCK 速率下相关。
IEEE80211_RATE_MANDATORY_A
当与 802.11a(在 5 GHz 频段上)一起使用时,此比特率是强制性速率;由核心代码在注册 wiphy 时填充。
IEEE80211_RATE_MANDATORY_B
当与 802.11b(在 2.4 GHz 频段上)一起使用时,此比特率是强制性速率;由核心代码在注册 wiphy 时填充。
IEEE80211_RATE_MANDATORY_G
当与 802.11g(在 2.4 GHz 频段上)一起使用时,此比特率是强制性速率;由核心代码在注册 wiphy 时填充。
IEEE80211_RATE_ERP_G
这是 802.11g 模式下的 ERP 速率。
IEEE80211_RATE_SUPPORTS_5MHZ
速率可以在 5 MHz 模式下使用
IEEE80211_RATE_SUPPORTS_10MHZ
速率可以在 10 MHz 模式下使用
描述
速率的硬件/规范标志。它们的结构方式允许对不同的频段/PHY 模式使用相同的比特率结构。
-
struct ieee80211_rate¶
比特率定义
定义:
struct ieee80211_rate {
u32 flags;
u16 bitrate;
u16 hw_value, hw_value_short;
};
成员
flags
来自
enum ieee80211_rate_flags
的特定于速率的标志bitrate
比特率,单位为 100 Kbps
hw_value
driver/hardware value for this rate
hw_value_short
使用短前导码时,此速率的 driver/硬件值
描述
此结构描述了 802.11 PHY 可以工作的比特率。当在结构周围传递指针时,hw_value 和 hw_value_short 这两个值仅供驱动程序使用。
-
struct ieee80211_sta_ht_cap¶
STA 的 HT 功能
定义:
struct ieee80211_sta_ht_cap {
u16 cap;
bool ht_supported;
u8 ampdu_factor;
u8 ampdu_density;
struct ieee80211_mcs_info mcs;
};
成员
cap
如 802.11n 规范中所述的 HT 功能图
ht_supported
STA 是否支持 HT
ampdu_factor
最大 A-MPDU 长度因子
ampdu_density
最小 A-MPDU 间距
mcs
支持的 MCS 速率
描述
此结构描述了描述 STA 的 802.11n HT 功能所需的大多数基本参数。
-
struct ieee80211_supported_band¶
频段定义
定义:
struct ieee80211_supported_band {
struct ieee80211_channel *channels;
struct ieee80211_rate *bitrates;
enum nl80211_band band;
int n_channels;
int n_bitrates;
struct ieee80211_sta_ht_cap ht_cap;
struct ieee80211_sta_vht_cap vht_cap;
struct ieee80211_sta_s1g_cap s1g_cap;
struct ieee80211_edmg edmg_cap;
u16 n_iftype_data;
const struct ieee80211_sband_iftype_data __iftd *iftype_data;
};
成员
channels
硬件可以在此频段中工作的信道数组。
bitrates
硬件可以在此频段中工作的比特率数组。必须进行排序以提供有效的“支持的速率”IE,即首先是 CCK 速率,然后是 OFDM。
band
the band this structure represents
n_channels
channels 中的信道数
n_bitrates
bitrates 中的比特率数
ht_cap
此频段中的 HT 功能
vht_cap
此频段中的 VHT 功能
s1g_cap
此频段中的 S1G 功能(当然仅限 S1B 频段)
edmg_cap
此频段中的 EDMG 功能
n_iftype_data
接口类型数据条目的数量
iftype_data
接口类型数据条目。请注意,此结构中 types_mask 中的位不能重叠(即,在 iftype_data 的所有实例中只允许每种类型出现一次)。
描述
此结构描述了 wiphy 能够在其中工作的频段。
参数
struct wiphy *wiphy
要获取额外限制的无线设备
描述
某些设备可能在 DT 中指定了额外的限制。这对于通常支持更多频段但由于板设计(例如,通过天线或外部功率放大器)而受到限制的芯片组可能很有用。
此函数从 DT 读取信息并使用它来修改信道(禁用不可用的信道)。在具有共享信道数据的驱动程序中使用它通常是一个糟糕的主意,因为 DT 限制是特定于设备的。您应该确保仅当 wiphy 中的信道被复制并且可以修改而不会影响其他设备时才调用它。
由于此函数访问设备节点,因此必须在 set_wiphy_dev 之后调用它。它还会修改信道,因此必须首先设置它们。如果使用此助手,请在 wiphy_register()
之前调用它。
-
enum cfg80211_signal_type¶
信号类型
常量
CFG80211_SIGNAL_TYPE_NONE
无信号强度信息可用
CFG80211_SIGNAL_TYPE_MBM
信号强度,以 mBm 为单位 (100*dBm)
CFG80211_SIGNAL_TYPE_UNSPEC
信号强度,从 0 增加到 100
-
enum wiphy_params_flags¶
set_wiphy_params 位域值
常量
WIPHY_PARAM_RETRY_SHORT
wiphy->retry_short 已更改
WIPHY_PARAM_RETRY_LONG
wiphy->retry_long 已更改
WIPHY_PARAM_FRAG_THRESHOLD
wiphy->frag_threshold 已更改
WIPHY_PARAM_RTS_THRESHOLD
wiphy->rts_threshold 已更改
WIPHY_PARAM_COVERAGE_CLASS
覆盖范围等级已更改
WIPHY_PARAM_DYN_ACK
已启用 dynack
WIPHY_PARAM_TXQ_LIMIT
TXQ 数据包限制已更改
WIPHY_PARAM_TXQ_MEMORY_LIMIT
TXQ 内存限制已更改
WIPHY_PARAM_TXQ_QUANTUM
TXQ 调度程序量子
-
enum wiphy_flags¶
wiphy 功能标志
常量
WIPHY_FLAG_SUPPORTS_EXT_KEK_KCK
该设备支持更大的 kek 和 kck 密钥
WIPHY_FLAG_SUPPORTS_MLO
这是一个临时标志,用于控制 MLO API,以便在没有完整的功能/接口组合等广告之前,无法在普通驱动程序中访问它们。目前不应有驱动程序设置此标志。
WIPHY_FLAG_SPLIT_SCAN_6GHZ
如果设置为 true,扫描请求将分为两部分,第一部分用于传统频段,第二部分用于 6 GHz。
WIPHY_FLAG_NETNS_OK
如果未设置,则完全不允许更改此 wiphy 的 netns
WIPHY_FLAG_PS_ON_BY_DEFAULT
如果设置为 true,则默认情况下将启用省电模式 - 此标志将根据内核在
wiphy_new()
上的默认值进行设置,但如果驱动程序有充分的理由覆盖默认值,则可以更改它WIPHY_FLAG_4ADDR_AP
即使在 AP 上(在 VLAN 接口上具有单个站点),也支持 4addr 模式。此标志还用于在不支持 AP/VLAN iftype 的设备上支持 4ADDR AP 模式。
WIPHY_FLAG_4ADDR_STATION
即使作为站点也支持 4addr 模式
WIPHY_FLAG_CONTROL_PORT_PROTOCOL
此设备支持设置控制端口协议以太类型。该设备还遵守 control_port_no_encrypt 标志。
WIPHY_FLAG_IBSS_RSN
该设备支持 IBSS RSN。
WIPHY_FLAG_DISABLE_WEXT
禁用此设备的无线扩展
WIPHY_FLAG_MESH_AUTH
该设备支持通过将身份验证帧路由到用户空间来进行网状身份验证。请参阅 NL80211_MESH_SETUP_USERSPACE_AUTH。
WIPHY_FLAG_SUPPORTS_EXT_KCK_32
该设备支持 32 字节的 KCK 密钥。
WIPHY_FLAG_SUPPORTS_NSTR_NONPRIMARY
支持连接到 NSTR 移动 AP MLD 的非主链路。
WIPHY_FLAG_SUPPORTS_FW_ROAM
该设备支持固件中的漫游功能。
WIPHY_FLAG_AP_UAPSD
该设备支持 AP 上的 uapsd。
WIPHY_FLAG_SUPPORTS_TDLS
该设备支持 TDLS (802.11z) 操作。
WIPHY_FLAG_TDLS_EXTERNAL_SETUP
该设备不处理 TDLS (802.11z) 链路设置/发现操作。设置、发现和拆卸数据包应通过 NL80211_CMD_TDLS_MGMT 命令发送。如果未设置此标志,则应使用 NL80211_CMD_TDLS_OPER 请求驱动程序/固件执行 TDLS 操作。
WIPHY_FLAG_HAVE_AP_SME
设备集成了 AP SME
WIPHY_FLAG_REPORTS_OBSS
当 AP 模式下存在虚拟接口时,设备将通过调用 cfg80211_report_obss_beacon() 报告来自其他 BSS 的信标。
WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD
在作为 AP 运行时,设备在硬件中响应探测请求。
WIPHY_FLAG_OFFCHAN_TX
设备支持直接异频 TX。
WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL
设备支持保持在信道上呼叫。
WIPHY_FLAG_SUPPORTS_5_10_MHZ
设备支持 5 MHz 和 10 MHz 信道。
WIPHY_FLAG_HAS_CHANNEL_SWITCH
设备支持信标模式(AP、IBSS、Mesh、...)中的信道切换。
WIPHY_FLAG_NOTIFY_REGDOM_BY_DRIVER
该设备可以处理 NL80211_REGDOM_SET_BY_DRIVER 的 reg 通知。
WIPHY_FLAG_CHANNEL_CHANGE_ON_BEACON
如果驱动程序设置此标志以更新信标提示上的信道,则会调用 reg_call_notifier()。
-
struct ieee80211_iface_limit¶
对某些接口类型的限制
定义:
struct ieee80211_iface_limit {
u16 max;
u16 types;
};
成员
max
这些类型的接口的最大数量
types
接口类型(位)
-
struct ieee80211_iface_combination¶
可能的接口组合
定义:
struct ieee80211_iface_combination {
const struct ieee80211_iface_limit *limits;
u32 num_different_channels;
u16 max_interfaces;
u8 n_limits;
bool beacon_int_infra_match;
u8 radar_detect_widths;
u8 radar_detect_regions;
u32 beacon_int_min_gcd;
};
成员
limits
给定接口类型的限制
num_different_channels
最多可以使用这么多不同的信道
max_interfaces
此组中允许的总接口最大数量
n_limits
限制的数量
beacon_int_infra_match
在此组合中,基础结构类型和 AP 类型之间的信标间隔必须匹配。这仅在特殊情况下才需要。
radar_detect_widths
雷达检测支持的信道宽度位图
radar_detect_regions
雷达检测支持的区域位图
beacon_int_min_gcd
此接口组合支持不同的信标间隔。
- = 0
所有不同接口的信标间隔必须相同。
- > 0
此组合中接口部分的任何信标间隔,以及来自此组合的信标接口的所有信标间隔的 GCD 必须大于或等于此值。
描述
使用此结构,驱动程序可以描述它同时支持的哪些接口组合。如果在 struct wiphy_radio 中设置,则组合指的是当前在该无线电上活动的接口的组合。
允许 #STA <= 1,#AP <= 1,匹配 BI,信道 = 1,总共 2 个
struct ieee80211_iface_limit limits1[] = { { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), }, { .max = 1, .types = BIT(NL80211_IFTYPE_AP), }, }; struct ieee80211_iface_combination combination1 = { .limits = limits1, .n_limits = ARRAY_SIZE(limits1), .max_interfaces = 2, .beacon_int_infra_match = true, };
允许 #{AP, P2P-GO} <= 8,信道 = 1,总共 8 个
struct ieee80211_iface_limit limits2[] = { { .max = 8, .types = BIT(NL80211_IFTYPE_AP) | BIT(NL80211_IFTYPE_P2P_GO), }, }; struct ieee80211_iface_combination combination2 = { .limits = limits2, .n_limits = ARRAY_SIZE(limits2), .max_interfaces = 8, .num_different_channels = 1, };
允许 #STA <= 1,#{P2P-client,P2P-GO} <= 3,在两个信道上,总共 4 个。
这允许一个基础结构连接和三个 P2P 连接。
struct ieee80211_iface_limit limits3[] = { { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), }, { .max = 3, .types = BIT(NL80211_IFTYPE_P2P_GO) | BIT(NL80211_IFTYPE_P2P_CLIENT), }, }; struct ieee80211_iface_combination combination3 = { .limits = limits3, .n_limits = ARRAY_SIZE(limits3), .max_interfaces = 4, .num_different_channels = 2, };
示例
-
struct wiphy¶
无线硬件描述
定义:
struct wiphy {
struct mutex mtx;
u8 perm_addr[ETH_ALEN];
u8 addr_mask[ETH_ALEN];
struct mac_address *addresses;
const struct ieee80211_txrx_stypes *mgmt_stypes;
const struct ieee80211_iface_combination *iface_combinations;
int n_iface_combinations;
u16 software_iftypes;
u16 n_addresses;
u16 interface_modes;
u16 max_acl_mac_addrs;
u32 flags, regulatory_flags, features;
u8 ext_features[DIV_ROUND_UP(NUM_NL80211_EXT_FEATURES, 8)];
u32 ap_sme_capa;
enum cfg80211_signal_type signal_type;
int bss_priv_size;
u8 max_scan_ssids;
u8 max_sched_scan_reqs;
u8 max_sched_scan_ssids;
u8 max_match_sets;
u16 max_scan_ie_len;
u16 max_sched_scan_ie_len;
u32 max_sched_scan_plans;
u32 max_sched_scan_plan_interval;
u32 max_sched_scan_plan_iterations;
int n_cipher_suites;
const u32 *cipher_suites;
int n_akm_suites;
const u32 *akm_suites;
const struct wiphy_iftype_akm_suites *iftype_akm_suites;
unsigned int num_iftype_akm_suites;
u8 retry_short;
u8 retry_long;
u32 frag_threshold;
u32 rts_threshold;
u8 coverage_class;
char fw_version[ETHTOOL_FWVERS_LEN];
u32 hw_version;
#ifdef CONFIG_PM;
const struct wiphy_wowlan_support *wowlan;
struct cfg80211_wowlan *wowlan_config;
#endif;
u16 max_remain_on_channel_duration;
u8 max_num_pmkids;
u32 available_antennas_tx;
u32 available_antennas_rx;
u32 probe_resp_offload;
const u8 *extended_capabilities, *extended_capabilities_mask;
u8 extended_capabilities_len;
const struct wiphy_iftype_ext_capab *iftype_ext_capab;
unsigned int num_iftype_ext_capab;
const void *privid;
struct ieee80211_supported_band *bands[NUM_NL80211_BANDS];
void (*reg_notifier)(struct wiphy *wiphy, struct regulatory_request *request);
const struct ieee80211_regdomain __rcu *regd;
struct device dev;
bool registered;
struct dentry *debugfsdir;
const struct ieee80211_ht_cap *ht_capa_mod_mask;
const struct ieee80211_vht_cap *vht_capa_mod_mask;
struct list_head wdev_list;
possible_net_t _net;
#ifdef CONFIG_CFG80211_WEXT;
const struct iw_handler_def *wext;
#endif;
const struct wiphy_coalesce_support *coalesce;
const struct wiphy_vendor_command *vendor_commands;
const struct nl80211_vendor_cmd_info *vendor_events;
int n_vendor_commands, n_vendor_events;
u16 max_ap_assoc_sta;
u8 max_num_csa_counters;
u32 bss_select_support;
u8 nan_supported_bands;
u32 txq_limit;
u32 txq_memory_limit;
u32 txq_quantum;
unsigned long tx_queue_len;
u8 support_mbssid:1, support_only_he_mbssid:1;
const struct cfg80211_pmsr_capabilities *pmsr_capa;
struct {
u64 peer, vif;
u8 max_retry;
} tid_config_support;
u8 max_data_retry_count;
const struct cfg80211_sar_capa *sar_capa;
struct rfkill *rfkill;
u8 mbssid_max_interfaces;
u8 ema_max_profile_periodicity;
u16 max_num_akm_suites;
u16 hw_timestamp_max_peers;
int n_radio;
const struct wiphy_radio *radio;
char priv[] ;
};
成员
mtx
此设备的数据(结构)的互斥锁
perm_addr
此设备的永久 MAC 地址
addr_mask
如果设备通过屏蔽支持多个 MAC 地址,请将其设置为一个掩码,其中可变位设置为 1,例如,如果最后四位是可变的,则将其设置为 00-00-00-00-00-0f。实际的可变位应由添加的接口确定,不匹配掩码的接口将被拒绝启动。
addresses
如果设备具有多个地址,请将此指针设置为地址列表(每个 6 个字节)。第一个地址将默认用于 perm_addr。在这种情况下,掩码应设置为全零。在这种情况下,假定设备可以处理相同数量的任意 MAC 地址。
mgmt_stypes
可以通过 nl80211 订阅或传输的帧子类型的位掩码,指向按接口类型索引的数组
iface_combinations
有效的接口组合数组,不应列出单个接口类型。
n_iface_combinations
iface_combinations 数组中的条目数。
software_iftypes
软件接口类型的位掩码,由于它们纯粹在 SW 中管理,因此不受任何限制。
n_addresses
addresses 中的地址数。
interface_modes
对此 wiphy 有效的接口类型的位掩码,必须由驱动程序设置
max_acl_mac_addrs
设备支持用于 ACL 的最大 MAC 地址数。
flags
wiphy 标志,请参阅
enum wiphy_flags
regulatory_flags
wiphy 法规标志,请参阅
enum ieee80211_regulatory_flags
features
通告给 nl80211 的功能,请参阅
enum nl80211_feature_flags
。ext_features
通告给 nl80211 的扩展功能,请参阅
enum nl80211_ext_feature_index
。ap_sme_capa
AP SME 功能,来自
enum nl80211_ap_sme_features
的标志。signal_type
在
struct cfg80211_bss
中报告的信号类型。bss_priv_size
每个 BSS 结构都分配了私有数据,此变量确定其大小
max_scan_ssids
设备可以在任何给定扫描中扫描的最大 SSID 数
max_sched_scan_reqs
设备可以同时运行的计划扫描请求的最大数量。
max_sched_scan_ssids
设备可以在任何给定计划扫描中扫描的最大 SSID 数
max_match_sets
设备在执行计划扫描时可以处理的最大匹配集数,如果不支持过滤,则为 0。
max_scan_ie_len
用户控制的 IE 设备可以添加到扫描期间传输的探测请求帧的最大长度,不得包括固定 IE(如支持的速率)
max_sched_scan_ie_len
与 max_scan_ie_len 相同,但用于计划扫描
max_sched_scan_plans
设备支持的计划扫描的扫描计划(扫描间隔和迭代次数)的最大数量。
max_sched_scan_plan_interval
设备支持的单个扫描计划的最大间隔(以秒为单位)。
max_sched_scan_plan_iterations
设备支持的单个扫描计划的最大迭代次数。
n_cipher_suites
支持的密码套件的数量
cipher_suites
支持的密码套件
n_akm_suites
支持的 AKM 套件的数量
akm_suites
支持的 AKM 套件。如果未在 iftype_akm_suites 中为特定接口类型通告支持的 AKM,则这些是支持的默认 AKM。
iftype_akm_suites
每个接口类型支持的 akm 套件信息的数组。请注意,此结构中 iftypes_mask 中的位不能重叠(即,在 iftype_akm_suites 的所有实例中只允许每种类型出现一次)。
num_iftype_akm_suites
单独指定支持的 akm 套件的接口类型数量。
retry_short
短帧的重试限制 (dot11ShortRetryLimit)
retry_long
长帧的重试限制 (dot11LongRetryLimit)
frag_threshold
分段阈值 (dot11FragmentationThreshold);-1 = 禁用分段,仅使用奇数值 >= 256
rts_threshold
RTS 阈值 (dot11RTSThreshold);-1 = 禁用 RTS/CTS
coverage_class
当前覆盖范围等级
fw_version
ethtool 报告的固件版本
hw_version
ethtool 报告的硬件版本
wowlan
WoWLAN 支持信息
wowlan_config
当前 WoWLAN 配置;通常不应使用它,因为访问它必然是竞争条件,请改用传递给 suspend() 操作的参数。
max_remain_on_channel_duration
保持在信道上操作可以请求的最大时间(如果已实现)。
max_num_pmkids
设备支持的最大 PMKID 数
available_antennas_tx
可用作 TX 天线配置的天线的位图。除非设置了此位图或 available_antennas_rx,否则将拒绝天线配置命令。
available_antennas_rx
可用作 RX 天线配置的天线的位图。除非设置了此位图或 available_antennas_tx,否则将拒绝天线配置命令。
probe_resp_offload
探测响应卸载支持的协议的位图。请参阅
enum nl80211_probe_resp_offload_support_attr
。仅当设置了 wiphy 标志 WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD 时才有效。extended_capabilities
驱动程序支持的扩展功能,用户空间可能支持其他功能;这些是 802.11 扩展功能(“扩展功能元素”),格式与信息元素中的格式相同。有关定义的字段,请参见 802.11-2012 8.4.2.29。如果未针对 iftype_ext_capab 中的特定接口类型指定功能,则将使用这些默认扩展功能。
extended_capabilities_mask
有效值的掩码
extended_capabilities_len
扩展功能的长度
iftype_ext_capab
每个接口类型的扩展功能数组
num_iftype_ext_capab
为其单独指定扩展功能的接口类型的数量。
privid
驱动程序可用于识别任意 wiphy 是否属于它们的指针,例如在全局通知程序中
bands
有关此设备支持的频段/通道的信息
reg_notifier
驱动程序的监管通知回调,请注意,如果您的驱动程序使用
wiphy_apply_custom_regulatory()
,则 reg_notifier 的请求可以作为 NULL 传递regd
驱动程序的监管域,如果已通过
regulatory_hint()
API 请求了一个监管域。如果驱动程序选择忽略由其他驱动程序引起的未来监管域更改,则可以在 reg_notifier() 上使用它。dev
此 wiphy 的(虚拟)
struct device
。/sys/class/ieee80211/ 中的项目指向此项。您需要使用set_wiphy_dev()
(见下文)。registered
防止 sysfs 回调 ->resume 和 ->suspend 反对注销硬件
debugfsdir
用于此 wiphy 的 debugfs 目录 (ieee80211/<wiphyname>)。它将在 wiphy 重命名时自动重命名
ht_capa_mod_mask
指定可以覆盖哪些 ht_cap 值。如果为空,则不能覆盖任何值。
vht_capa_mod_mask
指定可以覆盖哪些 VHT 功能。如果为空,则不能覆盖任何功能。
wdev_list
关联的(虚拟)接口列表;此列表不得由驱动程序修改,但可以使用 RTNL/RCU 保护读取。
_net
此 wiphy 当前所在的网络命名空间
wext
无线扩展处理程序
coalesce
数据包合并支持信息
vendor_commands
硬件支持的供应商命令数组
vendor_events
硬件支持的供应商事件数组
n_vendor_commands
供应商命令的数量
n_vendor_events
供应商事件的数量
max_ap_assoc_sta
AP 模式下支持的最大关联站点数(包括 P2P GO),如果为 0,则表示未公布此类限制。驱动程序可以公布它在某些情况下可以达到的理论限制,但可能并非始终能够达到。
max_num_csa_counters
信标和探测响应中支持的 csa_counters 的数量。如果驱动程序希望限制 csa 计数器的数量,则应设置此值。默认值 (0) 表示无限。
bss_select_support
位掩码,指示驱动程序在 .connect() 回调中支持的 BSS 选择标准。位位置映射到
enum nl80211_bss_select_attr
中定义的属性索引。nan_supported_bands
设备在 NAN 模式下支持的频段,
enum nl80211_band
值的位图。例如,对于 NL80211_BAND_2GHZ,将设置位 0(即 BIT(NL80211_BAND_2GHZ))。txq_limit
内部 TX 队列帧限制的配置
txq_memory_limit
配置内部 TX 队列内存限制
txq_quantum
配置内部 TX 队列调度器量子
tx_queue_len
允许为不使用 wake_tx_queue 的驱动程序设置传输队列长度
support_mbssid
硬件是否可以支持与未传输 AP 的关联
support_only_he_mbssid
如果不是 HE AP,则不解析 MBSSID 元素,以避免兼容性问题。必须设置 support_mbssid 才能使其生效。
pmsr_capa
对等测量功能
tid_config_support
描述设备具有的每个 TID 配置支持
tid_config_support.peer
驱动程序为每个对等方支持的属性(配置)的位图
tid_config_support.vif
驱动程序为每个 vif 支持的属性(配置)的位图
tid_config_support.max_retry
长/短重试配置支持的最大重试计数
max_data_retry_count
通过
NL80211_TID_CONFIG_ATTR_RETRY_SHORT
和NL80211_TID_CONFIG_ATTR_RETRY_LONG
属性配置支持的每个 TID 最大重试计数sar_capa
SAR 控制功能
rfkill
指向 rfkill 结构的指针
mbssid_max_interfaces
驱动程序在多 BSSID 集中支持的最大接口数。驱动程序必须将此字段设置为非零值才能公布 MBSSID 支持。
ema_max_profile_periodicity
驱动程序支持的最大配置文件周期。将此字段设置为非零值表示驱动程序支持增强的多 BSSID 广播 (EMA AP)。
max_num_akm_suites
允许通过
NL80211_CMD_CONNECT
、NL80211_CMD_ASSOCIATE
和NL80211_CMD_START_AP
配置的最大 AKM 套件数。如果驱动程序未设置,则设置为 NL80211_MAX_NR_AKM_SUITES。如果由驱动程序设置,则为了避免与旧版用户空间出现兼容性问题,允许的最小值为 NL80211_MAX_NR_AKM_SUITES,允许的最大值为 CFG80211_MAX_NUM_AKM_SUITES。hw_timestamp_max_peers
驱动程序支持同时为之启用 HW 时间戳的对等方的最大数量。将此字段设置为非零值表示驱动程序支持 HW 时间戳。值
CFG80211_HW_TIMESTAMP_ALL_PEERS
表示驱动程序支持为所有对等方启用 HW 时间戳(即,无需指定 mac 地址)。n_radio
无线电的数量
radio
属于此 wiphy 的无线电
priv
驱动程序私有数据(大小根据
wiphy_new()
参数确定)
参数
struct wiphy *wiphy
要返回其 priv 指针的 wiphy
Return
wiphy 的 priv。
参数
void *priv
先前由 wiphy_priv 返回的指针
Return
priv 的 wiphy。
参数
struct wiphy *wiphy
要绑定其设备的 wiphy
struct device *dev
要将其作为父项的设备
参数
struct wiphy *wiphy
要查找其设备结构的 wiphy
Return
wiphy 的 dev。
参数
const struct wiphy *wiphy
要返回其名称的 wiphy
Return
wiphy 的名称。
-
struct wiphy *wiphy_new(const struct cfg80211_ops *ops, int sizeof_priv)¶
创建新的 wiphy 以与 cfg80211 一起使用
参数
const struct cfg80211_ops *ops
此设备的配置操作
int sizeof_priv
要分配的私有区域的大小
描述
创建新的 wiphy 并将给定的操作与之关联。分配 sizeof_priv 字节以供私有使用。
Return
指向新 wiphy 的指针。必须将此指针分配给每个 netdev 的 ieee80211_ptr,才能正常运行。
参数
struct wiphy *wiphy
要注册的 wiphy。
Return
非负 wiphy 索引或负错误代码。
参数
struct wiphy *wiphy
要取消注册的 wiphy。
描述
在此调用之后,不能再使用此 priv 指针发出请求,但该调用可能会休眠以等待正在处理的未完成请求。
参数
struct wiphy *wiphy
要释放的 wiphy
-
struct wireless_dev¶
无线设备状态
定义:
struct wireless_dev {
struct wiphy *wiphy;
enum nl80211_iftype iftype;
struct list_head list;
struct net_device *netdev;
u32 identifier;
struct list_head mgmt_registrations;
u8 mgmt_registrations_need_update:1;
bool use_4addr, is_running, registered, registering;
u8 address[ETH_ALEN] ;
struct cfg80211_conn *conn;
struct cfg80211_cached_keys *connect_keys;
enum ieee80211_bss_type conn_bss_type;
u32 conn_owner_nlportid;
struct work_struct disconnect_wk;
u8 disconnect_bssid[ETH_ALEN];
struct list_head event_list;
spinlock_t event_lock;
u8 connected:1;
bool ps;
int ps_timeout;
u32 ap_unexpected_nlportid;
u32 owner_nlportid;
bool nl_owner_dead;
#ifdef CONFIG_CFG80211_WEXT;
struct {
struct cfg80211_ibss_params ibss;
struct cfg80211_connect_params connect;
struct cfg80211_cached_keys *keys;
const u8 *ie;
size_t ie_len;
u8 bssid[ETH_ALEN];
u8 prev_bssid[ETH_ALEN];
u8 ssid[IEEE80211_MAX_SSID_LEN];
s8 default_key, default_mgmt_key;
bool prev_bssid_valid;
} wext;
#endif;
struct wiphy_work cqm_rssi_work;
struct cfg80211_cqm_config __rcu *cqm_config;
struct list_head pmsr_list;
spinlock_t pmsr_lock;
struct work_struct pmsr_free_wk;
unsigned long unprot_beacon_reported;
union {
struct {
u8 connected_addr[ETH_ALEN] ;
u8 ssid[IEEE80211_MAX_SSID_LEN];
u8 ssid_len;
} client;
struct {
int beacon_interval;
struct cfg80211_chan_def preset_chandef;
struct cfg80211_chan_def chandef;
u8 id[IEEE80211_MAX_MESH_ID_LEN];
u8 id_len, id_up_len;
} mesh;
struct {
struct cfg80211_chan_def preset_chandef;
u8 ssid[IEEE80211_MAX_SSID_LEN];
u8 ssid_len;
} ap;
struct {
struct cfg80211_internal_bss *current_bss;
struct cfg80211_chan_def chandef;
int beacon_interval;
u8 ssid[IEEE80211_MAX_SSID_LEN];
u8 ssid_len;
} ibss;
struct {
struct cfg80211_chan_def chandef;
} ocb;
} u;
struct {
u8 addr[ETH_ALEN] ;
union {
struct {
unsigned int beacon_interval;
struct cfg80211_chan_def chandef;
} ap;
struct {
struct cfg80211_internal_bss *current_bss;
} client;
};
bool cac_started;
unsigned long cac_start_time;
unsigned int cac_time_ms;
} links[IEEE80211_MLD_MAX_NUM_LINKS];
u16 valid_links;
u32 radio_mask;
};
成员
wiphy
指向硬件描述的指针
iftype
接口类型
list
(私有)用于收集接口
netdev
(私有)用于引用回 netdev,可能为
NULL
identifier
(私有)用于在 nl80211 中标识此无线设备的标识符(如果它没有 netdev)
mgmt_registrations
管理帧的注册列表
mgmt_registrations_need_update
mgmt 注册已更新,需要将更新传播到驱动程序
use_4addr
指示在此接口上使用 4addr 模式,必须由驱动程序在添加接口时在注册 netdev 之前设置(如果支持),否则驱动程序只能读取它,cfg80211 将在 change_interface 上更新它
is_running
如果这是一个已启动的非 netdev 设备,则为 true,例如 P2P 设备。
registered
此 wdev 是否已向 cfg80211 注册
registering
指示我们正在 wiphy 锁下为通知程序进行注册
address
此设备的地址,仅当 netdev 为
NULL
时有效conn
(私有)cfg80211 软件 SME 连接状态机数据
connect_keys
(私有)连接建立后要设置的密钥
conn_bss_type
连接中/已连接的 BSS 类型
conn_owner_nlportid
(私有)连接所有者套接字端口 ID
disconnect_wk
(私有)自动断开连接工作
disconnect_bssid
(私有)用于自动断开连接的 BSSID
event_list
(私有)用于内部事件处理的列表
event_lock
(私有)用于事件列表的锁
connected
指示是否已连接(STA 模式)
ps
已启用省电模式
ps_timeout
动态省电超时
ap_unexpected_nlportid
(私有)已注册用于意外 3 类帧的应用程序的 netlink 端口 ID(AP 模式)
owner_nlportid
(私有)所有者套接字端口 ID
nl_owner_dead
(私有)所有者套接字已消失
wext
(私有)内部无线扩展兼容代码使用
wext.ibss
(私有)wext 处理的 IBSS 数据部分
wext.connect
(私有)连接处理数据
wext.keys
(私有)(WEP) 密钥数据
wext.ie
(私有)关联的额外元素
wext.ie_len
(私有)额外元素的长度
wext.bssid
(私有)选定的网络 BSSID
wext.prev_bssid
(私有)重新关联的先前 BSSID
wext.ssid
(私有)选定的网络 SSID
wext.default_key
(私有)选定的默认密钥索引
wext.default_mgmt_key
(私有)选定的默认管理密钥索引
wext.prev_bssid_valid
(私有)先前 BSSID 有效性
cqm_rssi_work
(私有)CQM RSSI 报告工作
cqm_config
(私有)nl80211 RSSI 监视器状态
pmsr_list
(私有)对等测量请求
pmsr_lock
(私有)对等测量请求/结果锁
pmsr_free_wk
(私有)对等测量清理工作
unprot_beacon_reported
(私有)上次不受保护的信标报告的时间戳
u
包含特定于 iftype 的数据的联合
links
包含
IEEE80211_MLD_MAX_NUM_LINKS
个元素的数组,其中包含每个链接的 addr ap 和 client{unnamed_union}
anonymous
links.cac_started
如果已启动 DFS 通道可用性检查,则为 true
links.cac_start_time
输入 dfs 状态时的时间戳(jiffies)。
links.cac_time_ms
CAC 时间(毫秒)
valid_links
描述 links 的哪些元素有效的位图
radio_mask
允许此接口运行的无线电的位掩码。
描述
对于 netdev,此结构必须由使用 struct net_device
中的 ieee80211_ptr 字段的驱动程序分配(这是有意的,因此它可以与 netdev 一起分配。)然后不需要注册,因为 netdev 注册将被 cfg80211 拦截以查看新的无线设备,但是,如果驱动程序预先创建了任何 netdev(在从 cfg80211 调用的 ops 中,wiphy 已被锁定),则驱动程序必须锁定 wiphy,然后才能注册或取消注册 netdev。
对于非 netdev 用途,它也必须由驱动程序响应于需要它的 cfg80211 回调来分配,因为在这种情况下没有 netdev 注册,因此不能在返回它的回调操作之外分配。
-
void *wdev_priv(struct wireless_dev *wdev)¶
从 wireless_dev 返回 wiphy priv
参数
struct wireless_dev *wdev
要返回其 wiphy 的 priv 指针的无线设备
Return
wdev 的 wiphy priv。
-
int cfg80211_check_combinations(struct wiphy *wiphy, struct iface_combination_params *params)¶
检查接口组合
参数
struct wiphy *wiphy
wiphy
struct iface_combination_params *params
接口组合参数
描述
驱动程序可以调用此函数来检查根据接口组合是否允许接口及其类型的组合。
Return
如果允许组合,则为 0。出错时为非零。
操作和配置¶
每个无线设备和每个虚拟接口都提供一组配置操作和其他操作,这些操作由用户空间调用。每个操作都在操作结构中描述,这些操作使用的参数分别描述。
此外,某些操作是异步的,并且希望通过驱动程序需要调用的一些函数获取状态信息。
扫描和 BSS 列表处理及其关联的功能在单独的章节中描述。
-
struct vif_params¶
描述虚拟接口参数
定义:
struct vif_params {
u32 flags;
int use_4addr;
u8 macaddr[ETH_ALEN];
const u8 *vht_mumimo_groups;
const u8 *vht_mumimo_follow_addr;
};
成员
flags
监视器接口标志,如果为 0 则不变,否则将设置
MONITOR_FLAG_CHANGED
use_4addr
使用 4 地址帧
macaddr
用于此虚拟接口的地址。如果此参数设置为零地址,则驱动程序可以根据需要确定地址。仅当驱动程序启用
NL80211_FEATURE_MAC_ON_CREATE
标志时,此功能才完全受支持。其他驱动程序可能支持使用指定 MAC 创建 * 仅 p2p 设备。vht_mumimo_groups
MU-MIMO groupID,用于监视属于该 MU-MIMO groupID 的 MU-MIMO 数据包;如果未更改,则为
NULL
vht_mumimo_follow_addr
MU-MIMO 跟随地址,用于监视发往指定站点的 MU-MIMO 数据包;如果未更改,则为
NULL
-
struct key_params¶
密钥信息
定义:
struct key_params {
const u8 *key;
const u8 *seq;
int key_len;
int seq_len;
u16 vlan_id;
u32 cipher;
enum nl80211_key_mode mode;
};
成员
key
密钥材料
seq
TKIP 和 CCMP 密钥的序列计数器 (IV/PN),仅与 get_key() 回调一起使用,必须采用小端序,长度由 seq_len 给出。
key_len
密钥材料的长度
seq_len
seq 的长度。
vlan_id
VLAN 组密钥的 vlan_id(如果非零)
cipher
密码套件选择器
mode
密钥安装模式(RX_TX、NO_TX 或 SET_TX)
描述
有关密钥的信息
-
enum survey_info_flags¶
调查信息标志
常量
SURVEY_INFO_NOISE_DBM
已填充噪声(以 dBm 为单位)
SURVEY_INFO_IN_USE
通道当前正在使用
SURVEY_INFO_TIME
已填充活动时间(以毫秒为单位)
SURVEY_INFO_TIME_BUSY
已填充忙碌时间
SURVEY_INFO_TIME_EXT_BUSY
已填充扩展通道忙碌时间
SURVEY_INFO_TIME_RX
已填充接收时间
SURVEY_INFO_TIME_TX
已填充传输时间
SURVEY_INFO_TIME_SCAN
已填充扫描时间
SURVEY_INFO_TIME_BSS_RX
已填充本地 BSS 接收时间
描述
驱动程序用于指示在 get_survey() 期间已填充 struct survey_info
中的哪些信息。
-
struct survey_info¶
通道调查响应
定义:
struct survey_info {
struct ieee80211_channel *channel;
u64 time;
u64 time_busy;
u64 time_ext_busy;
u64 time_rx;
u64 time_tx;
u64 time_scan;
u64 time_bss_rx;
u32 filled;
s8 noise;
};
成员
channel
此调查记录报告的通道,对于报告全局统计信息的单个记录,可能为
NULL
time
无线电开启的时间量(毫秒)(在通道上)
time_busy
主通道感应到的忙碌时间量
time_ext_busy
扩展通道感应到的忙碌时间量
time_rx
无线电花费的接收数据的时间量
time_tx
无线电花费的传输数据的时间量
time_scan
无线电花费的扫描时间量
time_bss_rx
无线电花费的在本地 BSS 上接收数据的时间量
filled
来自
enum survey_info_flags
的标志的位标志noise
通道噪声(以 dBm 为单位)。此字段和所有后续字段都是可选的
描述
dump_survey() 用于报告每个通道的调查信息。
此结构稍后可以用通道占空比等内容进行扩展。
-
struct cfg80211_crypto_settings¶
加密设置
定义:
struct cfg80211_crypto_settings {
u32 wpa_versions;
u32 cipher_group;
int n_ciphers_pairwise;
u32 ciphers_pairwise[NL80211_MAX_NR_CIPHER_SUITES];
int n_akm_suites;
u32 akm_suites[CFG80211_MAX_NUM_AKM_SUITES];
bool control_port;
__be16 control_port_ethertype;
bool control_port_no_encrypt;
bool control_port_over_nl80211;
bool control_port_no_preauth;
const u8 *psk;
const u8 *sae_pwd;
u8 sae_pwd_len;
enum nl80211_sae_pwe_mechanism sae_pwe;
};
成员
wpa_versions
指示启用了哪些 WPA 版本(如果有)(来自 enum nl80211_wpa_versions)
cipher_group
组密钥密码套件(如果未设置,则为 0)
n_ciphers_pairwise
AP 支持的单播密码的数量
ciphers_pairwise
单播密钥密码套件
n_akm_suites
akm_suites
akm_suites
AKM 套件的数量
control_port
用户空间是否控制 IEEE 802.1X 端口,即,设置/清除
NL80211_STA_FLAG_AUTHORIZED
。如果为 true,则驱动程序必须假定端口未经授权,直到用户空间授权。否则,端口默认标记为已授权。control_port_ethertype
即使在未经授权的端口上,也应允许控制端口协议
control_port_no_encrypt
TRUE 以防止加密控制端口协议帧。
control_port_over_nl80211
如果用户空间希望通过 NL80211 而不是网络接口交换控制端口帧,则为 TRUE。
control_port_no_preauth
禁用 mac80211 的 nl80211 控制端口上的预授权 rx
psk
PSK(对于支持 4 向握手卸载的设备)
sae_pwd
用于 SAE 身份验证的密码(对于支持 SAE 卸载的设备)
sae_pwd_len
SAE 密码的长度(对于支持 SAE 卸载的设备)
sae_pwe
允许用于 SAE PWE 派生的机制
- NL80211_SAE_PWE_UNSPECIFIED
未指定,用于指示用户空间未指定任何首选项。在这种情况下,驱动程序应遵循其内部策略。
- NL80211_SAE_PWE_HUNT_AND_PECK
仅允许狩猎和啄食循环
- NL80211_SAE_PWE_HASH_TO_ELEMENT
仅允许哈希到元素
- NL80211_SAE_PWE_BOTH
允许狩猎和啄食循环或哈希到元素
-
struct cfg80211_beacon_data¶
信标数据
定义:
struct cfg80211_beacon_data {
unsigned int link_id;
const u8 *head, *tail;
const u8 *beacon_ies;
const u8 *proberesp_ies;
const u8 *assocresp_ies;
const u8 *probe_resp;
const u8 *lci;
const u8 *civicloc;
struct cfg80211_mbssid_elems *mbssid_ies;
struct cfg80211_rnr_elems *rnr_ies;
s8 ftm_responder;
size_t head_len, tail_len;
size_t beacon_ies_len;
size_t proberesp_ies_len;
size_t assocresp_ies_len;
size_t probe_resp_len;
size_t lci_len;
size_t civicloc_len;
struct cfg80211_he_bss_color he_bss_color;
bool he_bss_color_valid;
};
成员
link_id
AP MLD 链接发送此信标的链接 ID
head
信标的头部(TIM IE 之前),如果未更改,则为
NULL
tail
信标的尾部(TIM IE 之后),如果未更改,则为
NULL
beacon_ies
要添加到信标帧中的额外信息元素,如果未添加,则为
NULL
proberesp_ies
要添加到探测响应帧中的额外信息元素,如果未添加,则为
NULL
assocresp_ies
要添加到(重新)关联响应帧中的额外信息元素,如果未添加,则为
NULL
probe_resp
探测响应模板(仅限 AP 模式)
lci
测量报告元素内容,以测量令牌开头(测量类型 8)
civicloc
测量报告元素内容,以测量令牌开头(测量类型 11)
mbssid_ies
多个 BSSID 元素
rnr_ies
缩减的邻居报告元素
ftm_responder
启用 FTM 响应程序功能; -1 表示无更改(也意味着 LCI/公民位置数据无更改)
head_len
head 的长度
tail_len
tail 的长度
beacon_ies_len
beacon_ies 的长度(以八位字节为单位)
proberesp_ies_len
proberesp_ies 的长度(以八位字节为单位)
assocresp_ies_len
assocresp_ies 的长度(以八位字节为单位)
probe_resp_len
探测响应模板 (probe_resp) 的长度
lci_len
LCI 数据长度
civicloc_len
公民位置数据长度
he_bss_color
BSS 颜色设置
he_bss_color_valid
指示 bss 颜色属性是否在信标数据中。
-
struct cfg80211_ap_settings¶
AP 配置
定义:
struct cfg80211_ap_settings {
struct cfg80211_chan_def chandef;
struct cfg80211_beacon_data beacon;
int beacon_interval, dtim_period;
const u8 *ssid;
size_t ssid_len;
enum nl80211_hidden_ssid hidden_ssid;
struct cfg80211_crypto_settings crypto;
bool privacy;
enum nl80211_auth_type auth_type;
int inactivity_timeout;
u8 p2p_ctwindow;
bool p2p_opp_ps;
const struct cfg80211_acl_data *acl;
bool pbss;
struct cfg80211_bitrate_mask beacon_rate;
const struct ieee80211_ht_cap *ht_cap;
const struct ieee80211_vht_cap *vht_cap;
const struct ieee80211_he_cap_elem *he_cap;
const struct ieee80211_he_operation *he_oper;
const struct ieee80211_eht_cap_elem *eht_cap;
const struct ieee80211_eht_operation *eht_oper;
bool ht_required, vht_required, he_required, sae_h2e_required;
bool twt_responder;
u32 flags;
struct ieee80211_he_obss_pd he_obss_pd;
struct cfg80211_fils_discovery fils_discovery;
struct cfg80211_unsol_bcast_probe_resp unsol_bcast_probe_resp;
struct cfg80211_mbssid_config mbssid_config;
};
成员
chandef
定义要使用的通道
beacon
信标数据
beacon_interval
信标间隔
dtim_period
DTIM 周期
ssid
要在 BSS 中使用的 SSID(注意:如果用户空间未提供,则可能为
NULL
)ssid_len
ssid 的长度
hidden_ssid
是否在信标/探测响应帧中隐藏 SSID
crypto
加密设置
privacy
BSS 使用隐私
auth_type
身份验证类型(算法)
inactivity_timeout
确定站点不活动的时间(以秒为单位)。
p2p_ctwindow
P2P CT 窗口
p2p_opp_ps
P2P 机会性 PS
acl
驱动程序使用的 ACL 配置,该驱动程序支持基于 MAC 地址的访问控制
pbss
如果设置,则启动为 PCP 而不是 AP。与 DMG 网络相关。
beacon_rate
用于信标的比特率
ht_cap
HT 功能(如果未启用 HT,则为
NULL
)vht_cap
VHT 功能(如果未启用 VHT,则为
NULL
)he_cap
HE 功能(如果未启用 HE,则为
NULL
)he_oper
HE 操作 IE(如果未启用 HE,则为
NULL
)eht_cap
EHT 功能(如果未启用 EHT,则为
NULL
)eht_oper
EHT 操作 IE(如果未启用 EHT,则为
NULL
)ht_required
站点必须支持 HT
vht_required
站点必须支持 VHT
he_required
站点必须支持 HE
sae_h2e_required
站点必须支持 SAE 中的直接 H2E 技术
twt_responder
启用目标等待时间
flags
标志,如
enum nl80211_ap_settings_flags
中定义he_obss_pd
OBSS 数据包检测设置
fils_discovery
FILS 发现传输参数
unsol_bcast_probe_resp
未经请求的广播探测响应参数
mbssid_config
多 bssid 的 AP 设置
描述
用于配置 AP 接口。
-
struct station_parameters¶
站点参数
定义:
struct station_parameters {
struct net_device *vlan;
u32 sta_flags_mask, sta_flags_set;
u32 sta_modify_mask;
int listen_interval;
u16 aid;
u16 vlan_id;
u16 peer_aid;
u8 plink_action;
u8 plink_state;
u8 uapsd_queues;
u8 max_sp;
enum nl80211_mesh_power_mode local_pm;
u16 capability;
const u8 *ext_capab;
u8 ext_capab_len;
const u8 *supported_channels;
u8 supported_channels_len;
const u8 *supported_oper_classes;
u8 supported_oper_classes_len;
int support_p2p_ps;
u16 airtime_weight;
bool eml_cap_present;
u16 eml_cap;
struct link_station_parameters link_sta_params;
};
成员
vlan
站点所属的 vlan 接口
sta_flags_mask
已更改的站点标志(BIT(
NL80211_STA_FLAG_
...) 的位掩码)sta_flags_set
站点标志值(BIT(
NL80211_STA_FLAG_
...) 的位掩码)sta_modify_mask
位图指示哪些参数已更改(对于那些没有自然“无更改”值的参数),请参阅
enum station_parameters_apply_mask
listen_interval
侦听间隔,或 -1 表示无更改
aid
AID,或零表示无更改
vlan_id
站点的 VLAN ID(如果非零)
peer_aid
Mesh 对等 AID,或零表示无更改
plink_action
要采取的 plink 操作
plink_state
设置站点的对等链路状态
uapsd_queues
为 uapsd 配置的队列的位图。与 QoS 信息字段中的 AC 位图格式相同
max_sp
最大服务周期。与 QoS 信息字段中的 MAX_SP 格式相同(但已向下移动)
local_pm
本地链路特定的 Mesh 节能模式(设置为未知时不更改)
capability
站点能力
ext_capab
站点的扩展能力
ext_capab_len
扩展能力的数量
supported_channels
IEEE 802.11 格式的支持信道
supported_channels_len
支持的信道数
supported_oper_classes
IEEE 802.11 格式的支持的操作类
supported_oper_classes_len
支持的操作类数
support_p2p_ps
站点是否支持 P2P PS 机制的信息
airtime_weight
此站点的空中调度权重
eml_cap_present
指定 EML 能力字段 (eml_cap) 是否存在/已更新
eml_cap
此站点的 EML 能力
link_sta_params
链路相关参数。
描述
用于更改和创建新站点。
-
enum rate_info_flags¶
比特率信息标志
常量
RATE_INFO_FLAGS_MCS
mcs 字段填充了 HT MCS
RATE_INFO_FLAGS_VHT_MCS
mcs 字段填充了 VHT MCS
RATE_INFO_FLAGS_SHORT_GI
400ns 保护间隔
RATE_INFO_FLAGS_DMG
60GHz MCS
RATE_INFO_FLAGS_HE_MCS
HE MCS 信息
RATE_INFO_FLAGS_EDMG
EDMG 模式下的 60GHz MCS
RATE_INFO_FLAGS_EXTENDED_SC_DMG
60GHz 扩展 SC MCS
RATE_INFO_FLAGS_EHT_MCS
EHT MCS 信息
RATE_INFO_FLAGS_S1G_MCS
MCS 字段填充了 S1G MCS
描述
驱动程序使用它来指示 802.11n 传输的特定速率传输类型。
-
struct rate_info¶
比特率信息
定义:
struct rate_info {
u16 flags;
u16 legacy;
u8 mcs;
u8 nss;
u8 bw;
u8 he_gi;
u8 he_dcm;
u8 he_ru_alloc;
u8 n_bonded_ch;
u8 eht_gi;
u8 eht_ru_alloc;
};
成员
flags
来自
enum rate_info_flags
的标志位域legacy
802.11abg 的比特率为 100kbit/s
mcs
如果结构描述 HT/VHT/HE/EHT/S1G 速率,则为 mcs 索引
nss
流数(仅 VHT 和 HE)
bw
带宽(来自
enum rate_info_bw
)he_gi
HE 保护间隔(来自
enum nl80211_he_gi
)he_dcm
HE DCM 值
he_ru_alloc
HE RU 分配(来自
enum nl80211_he_ru_alloc
,仅当 bw 为RATE_INFO_BW_HE_RU
时有效)n_bonded_ch
对于 EDMG,绑定通道的数量 (1-4)
eht_gi
EHT 保护间隔(来自
enum nl80211_eht_gi
)eht_ru_alloc
EHT RU 分配(来自
enum nl80211_eht_ru_alloc
,仅当 bw 为RATE_INFO_BW_EHT_RU
时有效)
描述
有关接收或传输比特率的信息
-
struct station_info¶
站点信息
定义:
struct station_info {
u64 filled;
u32 connected_time;
u32 inactive_time;
u64 assoc_at;
u64 rx_bytes;
u64 tx_bytes;
s8 signal;
s8 signal_avg;
u8 chains;
s8 chain_signal[IEEE80211_MAX_CHAINS];
s8 chain_signal_avg[IEEE80211_MAX_CHAINS];
struct rate_info txrate;
struct rate_info rxrate;
u32 rx_packets;
u32 tx_packets;
u32 tx_retries;
u32 tx_failed;
u32 rx_dropped_misc;
struct sta_bss_parameters bss_param;
struct nl80211_sta_flag_update sta_flags;
int generation;
u32 beacon_loss_count;
const u8 *assoc_req_ies;
size_t assoc_req_ies_len;
s64 t_offset;
u16 llid;
u16 plid;
u8 plink_state;
u8 connected_to_gate;
u8 connected_to_as;
u32 airtime_link_metric;
enum nl80211_mesh_power_mode local_pm;
enum nl80211_mesh_power_mode peer_pm;
enum nl80211_mesh_power_mode nonpeer_pm;
u32 expected_throughput;
u16 airtime_weight;
s8 ack_signal;
s8 avg_ack_signal;
struct cfg80211_tid_stats *pertid;
u64 tx_duration;
u64 rx_duration;
u64 rx_beacon;
u8 rx_beacon_signal_avg;
u32 rx_mpdu_count;
u32 fcs_err_count;
bool mlo_params_valid;
u8 assoc_link_id;
u8 mld_addr[ETH_ALEN] ;
const u8 *assoc_resp_ies;
size_t assoc_resp_ies_len;
};
成员
filled
标志位域,使用
enum nl80211_sta_info
的位来指示此结构中它们的相关值connected_time
自站点上次连接以来的时间(秒)
inactive_time
自上次站点活动(tx/rx)以来的时间(毫秒)
assoc_at
上次关联的启动时间 (ns)
rx_bytes
从此站点接收的字节数(MPDU 的大小)
tx_bytes
传输到此站点的字节数(MPDU 的大小)
signal
信号强度,类型取决于 wiphy 的 signal_type。对于 CFG80211_SIGNAL_TYPE_MBM,值以 _dBm_ 表示。
signal_avg
平均信号强度,类型取决于 wiphy 的 signal_type。对于 CFG80211_SIGNAL_TYPE_MBM,值以 _dBm_ 表示。
chains
chain_signal、chain_signal_avg 中填充的值的位掩码
chain_signal
以 dBm 为单位的上次接收数据包的每个链的信号强度
chain_signal_avg
以 dBm 为单位的每个链的平均信号强度
txrate
来自此站点的当前单播比特率
rxrate
到此站点的当前单播比特率
rx_packets
从此站点接收的数据包(MSDU 和 MMPDU)
tx_packets
传输到此站点的的数据包(MSDU 和 MMPDU)
tx_retries
累积重试计数(MPDU)
tx_failed
传输失败的次数(MPDU)(超过重试次数,无 ACK)
rx_dropped_misc
由于未指定的原因而丢弃。
bss_param
当前 BSS 参数
sta_flags
站点标志掩码和值
generation
nl80211 转储的生成号。每当站点列表发生更改时,此数字应增加,即当添加或删除站点时,以便用户空间可以判断它是否获得了连贯的快照。
beacon_loss_count
信标丢失事件触发的次数。
assoc_req_ies
来自(重新)关联请求的 IE。这仅在 AP 模式下与不使用用户空间 MLME/SME 实现的驱动程序一起使用。该信息提供给
cfg80211_new_sta()
调用,以将 IE 通知用户空间。assoc_req_ies_len
assoc_req_ies 缓冲区长度(以八位字节为单位)。
t_offset
站点相对于此主机的时差。
llid
Mesh 本地链路 id
plid
Mesh 对等链路 id
plink_state
mesh peer link state
connected_to_gate
如果 Mesh STA 有通往 Mesh 网关的路径,则为 true
connected_to_as
如果 Mesh STA 有通往身份验证服务器的路径,则为 true
airtime_link_metric
Mesh 空中链路度量。
local_pm
本地 Mesh STA 节能模式
peer_pm
对等 Mesh STA 节能模式
nonpeer_pm
非对等 Mesh STA 节能模式
expected_throughput
预期吞吐量(kbps),包括到此站点的 802.11 标头。
airtime_weight
当前空中调度权重
ack_signal
最后一个 ACK 帧的信号强度(以 dBm 为单位)。
avg_ack_signal
已发送的 msdu 的 ack 数据包的平均 rssi 值。
pertid
每个 TID 的统计信息,请参阅
struct cfg80211_tid_stats
,对未封装在 QoS-MPDU 中的 MSDU 使用最后一个 (IEEE80211_NUM_TIDS) 索引。请注意,这不使用 filled 位,但如果非 NULL,则使用。tx_duration
到对等方的所有帧的聚合 PPDU 持续时间(微秒)
rx_duration
来自对等方的所有帧的聚合 PPDU 持续时间(微秒)
rx_beacon
从此对等方接收的信标数
rx_beacon_signal_avg
从此对等方接收的信标的平均信号强度(以 dBm 为单位)
rx_mpdu_count
从此站点接收的 MPDU 数
fcs_err_count
从此站点接收的带有 FCS 错误的 数据包(MPDU)数。仅当接收到带有 FCS 错误的数据包的 TA 与对等 MAC 地址匹配时,才应增加此计数器。
mlo_params_valid
指示驱动程序是否填充了 assoc_link_id 和 mld_addr 字段。驱动程序仅在
cfg80211_new_sta()
调用中使用此参数,当 AP MLD 的 MLME/SME 卸载到驱动程序时。驱动程序不会在 cfg80211_del_sta_sinfo()、get_station() 和 dump_station() 回调中填充此信息。assoc_link_id
指示 AP 的 MLO 链路 ID,站点已完成(重新)关联。当 AP 隶属于 MLD 时,MLO 和非 MLO STA 连接都会填充此信息。
mld_addr
对于 MLO STA 连接,填充了站点的 MLD 地址。对于非 MLO STA 连接,填充为全零。
assoc_resp_ies
来自(重新)关联响应的 IE。这仅在 AP 模式下与不使用用户空间 MLME/SME 实现的驱动程序一起使用。该信息仅提供给
cfg80211_new_sta()
调用,以将 IE 通知用户空间。驱动程序不会在 cfg80211_del_sta_sinfo()、get_station() 和 dump_station() 回调中填充此信息。用户空间需要此信息来确定已连接站点的已接受和已拒绝的附属链路。assoc_resp_ies_len
assoc_resp_ies 缓冲区的长度(以八位字节为单位)。
描述
驱动程序为 get_station() 和 dump_station 填充的站点信息。
-
enum monitor_flags¶
监视器标志
常量
MONITOR_FLAG_CHANGED
如果标志已更改,则设置
MONITOR_FLAG_FCSFAIL
传递具有错误 FCS 的帧
MONITOR_FLAG_PLCPFAIL
传递具有错误 PLCP 的帧
MONITOR_FLAG_CONTROL
传递控制帧
MONITOR_FLAG_OTHER_BSS
禁用 BSSID 过滤
MONITOR_FLAG_COOK_FRAMES
已弃用,将无条件拒绝
MONITOR_FLAG_ACTIVE
活动监视器,确认其 MAC 地址上的帧
MONITOR_FLAG_SKIP_TX
不传递本地传输的帧
描述
监视器接口配置标志。请注意,这些必须是根据 nl80211 标志的位。
-
enum mpath_info_flags¶
Mesh 路径信息标志
常量
MPATH_INFO_FRAME_QLEN
frame_qlen 已填充
MPATH_INFO_SN
sn 已填充
MPATH_INFO_METRIC
metric 已填充
MPATH_INFO_EXPTIME
exptime 已填充
MPATH_INFO_DISCOVERY_TIMEOUT
discovery_timeout 已填充
MPATH_INFO_DISCOVERY_RETRIES
discovery_retries 已填充
MPATH_INFO_FLAGS
flags 已填充
MPATH_INFO_HOP_COUNT
hop_count 已填充
MPATH_INFO_PATH_CHANGE
path_change_count 已填充
描述
驱动程序使用它来指示在 get_station() 或 dump_station() 期间填充在 struct mpath_info
中的信息。
-
struct mpath_info¶
Mesh 路径信息
定义:
struct mpath_info {
u32 filled;
u32 frame_qlen;
u32 sn;
u32 metric;
u32 exptime;
u32 discovery_timeout;
u8 discovery_retries;
u8 flags;
u8 hop_count;
u32 path_change_count;
int generation;
};
成员
filled
来自
enum mpath_info_flags
的标志位域frame_qlen
此目标的排队帧数
sn
目标序列号
metric
此 Mesh 路径的度量(成本)
exptime
从现在开始的 Mesh 路径的到期时间(毫秒)
discovery_timeout
Mesh 路径发现总超时时间(毫秒)
discovery_retries
Mesh 路径发现重试次数
flags
来自
enum mesh_path_flags
的 Mesh 路径标志hop_count
到目标的跳数
path_change_count
到目标的路径更改总数
generation
nl80211 转储的生成号。每当 Mesh 路径列表发生更改时,此数字应增加,即当添加或删除站点时,以便用户空间可以判断它是否获得了连贯的快照。
描述
驱动程序为 get_mpath() 和 dump_mpath() 填充的 Mesh 路径信息。
-
struct bss_parameters¶
BSS 参数
定义:
struct bss_parameters {
int link_id;
int use_cts_prot;
int use_short_preamble;
int use_short_slot_time;
const u8 *basic_rates;
u8 basic_rates_len;
int ap_isolate;
int ht_opmode;
s8 p2p_ctwindow, p2p_opp_ps;
};
成员
link_id
link_id,或 -1 表示非 MLD
use_cts_prot
是否使用 CTS 保护(0 = 否,1 = 是,-1 = 不更改)
use_short_preamble
是否允许使用短前导码(0 = 否,1 = 是,-1 = 不更改)
use_short_slot_time
是否允许使用短时隙时间(0 = 否,1 = 是,-1 = 不更改)
basic_rates
IEEE 802.11 格式的基本速率(或 NULL 表示不更改)
basic_rates_len
基本速率数
ap_isolate
不转发已连接站点之间的 数据包(0 = 否,1 = 是,-1 = 不更改)
ht_opmode
HT 操作模式(u16 = opmode,-1 = 不更改)
p2p_ctwindow
P2P CT 窗口(-1 = 不更改)
p2p_opp_ps
P2P 机会性 PS(-1 = 不更改)
描述
用于更改 BSS 参数(主要用于 AP 模式)。
-
struct ieee80211_txq_params¶
TX 队列参数
定义:
struct ieee80211_txq_params {
enum nl80211_ac ac;
u16 txop;
u16 cwmin;
u16 cwmax;
u8 aifs;
int link_id;
};
成员
ac
AC 标识符
txop
最大突发时间,以 32 微秒为单位,0 表示禁用
cwmin
最小争用窗口 [范围为 1..32767 的 2^n-1 形式的值]
cwmax
最大争用窗口 [范围为 1..32767 的 2^n-1 形式的值]
aifs
仲裁帧间间隔 [0..255]
link_id
link_id,或 -1 表示非 MLD
-
struct cfg80211_auth_request¶
身份验证请求数据
定义:
struct cfg80211_auth_request {
struct cfg80211_bss *bss;
const u8 *ie;
size_t ie_len;
const u8 *supported_selectors;
u8 supported_selectors_len;
enum nl80211_auth_type auth_type;
const u8 *key;
u8 key_len;
s8 key_idx;
const u8 *auth_data;
size_t auth_data_len;
s8 link_id;
const u8 *ap_mld_addr;
};
成员
bss
要进行身份验证的 BSS,如果需要保留它,则调用方必须获取对其的引用。
ie
要添加到身份验证帧的额外 IE 或
NULL
ie_len
ie 缓冲区长度(以八位字节为单位)
supported_selectors
应假定站点支持的选择器列表。如果设置为
NULL
,则必须假定支持 SAE_H2E。supported_selectors_len
supported_selectors 的长度(以八位字节为单位)。
auth_type
身份验证类型(算法)
key
用于共享密钥身份验证的 WEP 密钥
key_len
用于共享密钥身份验证的 WEP 密钥的长度
key_idx
用于共享密钥身份验证的 WEP 密钥的索引
auth_data
身份验证帧中的字段和元素。这包含身份验证帧正文(非 IE 和 IE 数据),不包括身份验证算法编号,即从身份验证事务序列号字段开始。
auth_data_len
auth_data 缓冲区的长度(以八位字节为单位)
link_id
如果 >= 0,则表示应作为 MLD 完成身份验证,接口地址作为 MLD 地址包含在内,驱动程序将创建必要的链接(具有给定的 link_id)(并给定一个 MLD 地址)
ap_mld_addr
在与 AP MLD 的身份验证请求的情况下,AP MLD 地址,仅当 link_id >= 0 时有效
描述
此结构提供完成 IEEE 802.11 身份验证所需的信息。
-
struct cfg80211_assoc_request¶
(重新)关联请求数据
定义:
struct cfg80211_assoc_request {
struct cfg80211_bss *bss;
const u8 *ie, *prev_bssid;
size_t ie_len;
struct cfg80211_crypto_settings crypto;
bool use_mfp;
u32 flags;
const u8 *supported_selectors;
u8 supported_selectors_len;
struct ieee80211_ht_cap ht_capa;
struct ieee80211_ht_cap ht_capa_mask;
struct ieee80211_vht_cap vht_capa, vht_capa_mask;
const u8 *fils_kek;
size_t fils_kek_len;
const u8 *fils_nonces;
struct ieee80211_s1g_cap s1g_capa, s1g_capa_mask;
struct cfg80211_assoc_link links[IEEE80211_MLD_MAX_NUM_LINKS];
const u8 *ap_mld_addr;
s8 link_id;
u16 ext_mld_capa_ops;
};
成员
bss
要关联的 BSS。如果调用成功,则驱动程序将获得一个引用,该引用必须返回给 cfg80211_send_rx_assoc() 或 cfg80211_assoc_timeout()。为确保正确的引用计数,在已经关联时,必须拒绝新的关联请求。这也适用于 links.bss 参数,该参数用于代替此参数(对于 MLO 关联,它为
NULL
)。ie
要添加到(重新)关联请求帧的额外 IE 或
NULL
prev_bssid
先前的 BSSID,如果不是
NULL
,则使用重新关联帧。这用于指示在 ESS 中重新关联的请求,而不是与 ESS 进行初始关联的请求。包含此信息时,它将设置为当前关联的 BSSID,即 Reassociation Request 帧的 Current AP address 字段中包含的值。ie_len
ie 缓冲区长度(以八位字节为单位)
crypto
加密设置
use_mfp
在此关联中使用管理帧保护 (IEEE 802.11w)
flags
请参阅
enum cfg80211_assoc_req_flags
supported_selectors
IEEE 802.11 格式的支持的 BSS 选择器(或
NULL
表示不更改)。如果为NULL
,则应假定支持 SAE_H2E。supported_selectors_len
支持的 BSS 选择器的数量
ht_capa
HT 功能覆盖。ht_capa_mask 中设置的值将在 ht_capa 中使用。不支持的值将被忽略。
ht_capa_mask
要使用的 ht_capa 的位。
vht_capa
VHT 功能覆盖
vht_capa_mask
VHT 功能掩码,指示要使用的字段
fils_kek
用于保护(重新)关联请求/响应帧的 FILS KEK 或
NULL
(如果未使用 FILS)。fils_kek_len
fils_kek 的长度(以八位字节为单位)
fils_nonces
FILS 随机数(AAD 的一部分),用于保护(重新)关联请求/响应帧或
NULL
(如果未使用 FILS)。此字段以 16 个八位字节的 STA 随机数开头,后跟 16 个八位字节的 AP 随机数。s1g_capa
S1G 功能覆盖
s1g_capa_mask
S1G 功能覆盖掩码
links
MLO 连接的每个链路的信息
ap_mld_addr
MLO 关联请求的情况下的 AP MLD 地址,仅当 link_id >= 0 时有效
link_id
MLO 连接的 >= 0,其中给出了链路,并指示应在哪个链路上发送关联请求
ext_mld_capa_ops
用户空间为关联设置的扩展 MLD 功能和操作
描述
此结构提供完成 IEEE 802.11(重新)关联所需的信息。
-
struct cfg80211_deauth_request¶
取消身份验证请求数据
定义:
struct cfg80211_deauth_request {
const u8 *bssid;
const u8 *ie;
size_t ie_len;
u16 reason_code;
bool local_state_change;
};
成员
bssid
要取消身份验证的 BSSID 或 AP MLD 地址
ie
要添加到取消身份验证帧的额外 IE 或
NULL
ie_len
ie 缓冲区长度(以八位字节为单位)
reason_code
取消身份验证的原因代码
local_state_change
如果设置,则仅更改本地状态,而不设置取消身份验证帧
描述
此结构提供完成 IEEE 802.11 取消身份验证所需的信息。
-
struct cfg80211_disassoc_request¶
取消关联请求数据
定义:
struct cfg80211_disassoc_request {
const u8 *ap_addr;
const u8 *ie;
size_t ie_len;
u16 reason_code;
bool local_state_change;
};
成员
ap_addr
要取消关联的 BSSID 或 AP MLD 地址
ie
要添加到取消关联帧的额外 IE 或
NULL
ie_len
ie 缓冲区长度(以八位字节为单位)
reason_code
取消关联的原因代码
local_state_change
这只是对本地状态的请求,即不传输 Disassociation 帧。
描述
此结构提供完成 IEEE 802.11 取消关联所需的信息。
-
struct cfg80211_ibss_params¶
IBSS 参数
定义:
struct cfg80211_ibss_params {
const u8 *ssid;
const u8 *bssid;
struct cfg80211_chan_def chandef;
const u8 *ie;
u8 ssid_len, ie_len;
u16 beacon_interval;
u32 basic_rates;
bool channel_fixed;
bool privacy;
bool control_port;
bool control_port_over_nl80211;
bool userspace_handles_dfs;
int mcast_rate[NUM_NL80211_BANDS];
struct ieee80211_ht_cap ht_capa;
struct ieee80211_ht_cap ht_capa_mask;
struct key_params *wep_keys;
int wep_tx_key;
};
成员
ssid
SSID,将始终为非空。
bssid
请求的固定 BSSID,可能为
NULL
,如果设置,则不搜索具有不同 BSSID 的 IBSS。chandef
定义如果找不到要加入的其他 IBSS,则使用的信道
ie
要包含在信标中的信息元素
ssid_len
SSID 的长度,将始终为非零。
ie_len
它的长度
beacon_interval
要使用的信标间隔
basic_rates
创建 IBSS 时要使用的基本速率的位图
channel_fixed
应固定信道 - 不要搜索要在其他信道上加入的 IBSS。
privacy
这是一个受保护的网络,密钥将在加入后配置
control_port
用户空间是否控制 IEEE 802.1X 端口,即设置/清除
NL80211_STA_FLAG_AUTHORIZED
。如果为 true,则驱动程序必须假定端口未经授权,直到用户空间授权。否则,端口默认标记为已授权。control_port_over_nl80211
如果用户空间希望通过 NL80211 而不是网络接口交换控制端口帧,则为 TRUE。
userspace_handles_dfs
用户空间是否控制 DFS 操作,即在检测到雷达时更改信道。这是在 DFS 信道上运行所必需的。
mcast_rate
每个频段的组播速率索引 + 1(0:已禁用)
ht_capa
HT 功能覆盖。ht_capa_mask 中设置的值将在 ht_capa 中使用。不支持的值将被忽略。
ht_capa_mask
要使用的 ht_capa 的位。
wep_keys
静态 WEP 密钥,如果不是 NULL,则指向 CFG80211_MAX_WEP_KEYS WEP 密钥的数组
wep_tx_key
默认 TX 静态 WEP 密钥的密钥索引(0..3)
描述
此结构定义 join_ibss() 方法的 IBSS 参数。
-
struct cfg80211_connect_params¶
连接参数
定义:
struct cfg80211_connect_params {
struct ieee80211_channel *channel;
struct ieee80211_channel *channel_hint;
const u8 *bssid;
const u8 *bssid_hint;
const u8 *ssid;
size_t ssid_len;
enum nl80211_auth_type auth_type;
const u8 *ie;
size_t ie_len;
bool privacy;
enum nl80211_mfp mfp;
struct cfg80211_crypto_settings crypto;
const u8 *key;
u8 key_len, key_idx;
u32 flags;
int bg_scan_period;
struct ieee80211_ht_cap ht_capa;
struct ieee80211_ht_cap ht_capa_mask;
struct ieee80211_vht_cap vht_capa;
struct ieee80211_vht_cap vht_capa_mask;
bool pbss;
struct cfg80211_bss_selection bss_select;
const u8 *prev_bssid;
const u8 *fils_erp_username;
size_t fils_erp_username_len;
const u8 *fils_erp_realm;
size_t fils_erp_realm_len;
u16 fils_erp_next_seq_num;
const u8 *fils_erp_rrk;
size_t fils_erp_rrk_len;
bool want_1x;
struct ieee80211_edmg edmg;
};
成员
channel
要使用的信道,如果未指定,则为
NULL
(基于扫描结果自动选择)channel_hint
建议的 BSS 的信道,用于初始连接,如果未指定,则为
NULL
bssid
AP BSSID,如果未指定,则为
NULL
(基于扫描结果自动选择)bssid_hint
用于初始连接到 BSS 的建议 AP BSSID,如果未指定,则为
NULL
。与 bssid 参数不同,如果驱动程序知道要使用的更好的 BSS,则允许忽略此 bssid_hint。ssid
SSID
ssid_len
ssid 的长度(以八位字节为单位)
auth_type
身份验证类型(算法)
ie
关联请求的 IE
ie_len
assoc_ie 的长度(以八位字节为单位)
privacy
指示是否应使用启用隐私的 AP
mfp
指示是否使用管理帧保护
crypto
加密设置
key
用于共享密钥身份验证的 WEP 密钥
key_len
用于共享密钥身份验证的 WEP 密钥的长度
key_idx
用于共享密钥身份验证的 WEP 密钥的索引
flags
请参阅
enum cfg80211_assoc_req_flags
bg_scan_period
后台扫描周期(以秒为单位),或 -1 表示使用默认值。
ht_capa
HT 功能覆盖。ht_capa_mask 中设置的值将在 ht_capa 中使用。不支持的值将被忽略。
ht_capa_mask
要使用的 ht_capa 的位。
vht_capa
VHT 功能覆盖
vht_capa_mask
要使用的 vht_capa 的位。
pbss
如果设置,则连接到 PCP 而不是 AP。对 DMG 网络有效。
bss_select
用于 BSS 选择的标准。
prev_bssid
先前的 BSSID,如果不是
NULL
,则使用重新关联帧。这用于指示在 ESS 中重新关联的请求,而不是与 ESS 进行初始关联的请求。包含此信息时,它将设置为当前关联的 BSSID,即 Reassociation Request 帧的 Current AP address 字段中包含的值。fils_erp_username
NAI 的 EAP 重新身份验证协议 (ERP) 用户名部分,如果未指定,则为
NULL
。这用于构造 FILS 包装的数据 IE。fils_erp_username_len
fils_erp_username 的长度(以八位字节为单位)。
fils_erp_realm
NAI 的 EAP 重新身份验证协议 (ERP) 域部分,如果未指定,则为
NULL
。这指定了 ER 服务器的域名,用于构造 FILS 包装的数据 IE。fils_erp_realm_len
fils_erp_realm 的长度(以八位字节为单位)。
fils_erp_next_seq_num
FILS ERP 消息中要使用的下一个序列号。这也用于构造 FILS 包装的数据 IE。
fils_erp_rrk
用于在 FILS 中派生其他密钥的 ERP 重新身份验证根密钥 (rRK),如果未指定,则为
NULL
。fils_erp_rrk_len
fils_erp_rrk 的长度(以八位字节为单位)。
want_1x
指示用户空间支持并希望使用 4 向握手的 802.1X 驱动程序卸载。
edmg
定义 EDMG 信道。这可以指定驱动程序要选择的多个信道和绑定选项,基于 BSS 配置。
描述
此结构提供完成 IEEE 802.11 身份验证和关联所需的信息。
-
struct cfg80211_pmksa¶
PMK 安全关联
定义:
struct cfg80211_pmksa {
const u8 *bssid;
const u8 *pmkid;
const u8 *pmk;
size_t pmk_len;
const u8 *ssid;
size_t ssid_len;
const u8 *cache_id;
u32 pmk_lifetime;
u8 pmk_reauth_threshold;
};
成员
bssid
AP 的 BSSID(可能为
NULL
)。pmkid
用于引用 PMKSA 的标识符。
pmk
由 pmkid 标识的 PMKSA 的 PMK。这由 FILS STA 用于密钥派生。否则为
NULL
。pmk_len
pmk 的长度。 pmk 的长度可能因用于生成此哈希的算法而异。
ssid
SSID,用于在使用 FILS 缓存标识符时指定 PMKSA 有效的 ESS(可能为
NULL
)。ssid_len
ssid 的长度,以八位字节为单位。
cache_id
由 FILS AP 发布的 2 字节缓存标识符,用于标识 PMKSA 的范围。 仅当 ssid_len 非零时有效(可能为
NULL
)。pmk_lifetime
PMKSA 的最长生存期(以秒为单位)(dot11RSNAConfigPMKLifetime),如果未指定则为 0。 配置的 PMKSA 在过期后不得用于 PMKSA 缓存,并且由此 PMK 派生的任何密钥在过期时都将失效,即,如果用于它的 PMK 过期,则必须断开当前关联。
pmk_reauth_threshold
重新认证的阈值时间(PMK 生存期的百分比,dot11RSNAConfigPMKReauthThreshold),如果未指定则为 0。 驱动程序应触发完全身份验证,而不是在此阈值后使用此 PMKSA 进行缓存,以便在当前 PMK 过期之前生成新的 PMK。
描述
此结构体被传递给 set/del_pmksa() 方法以进行 PMKSA 缓存。
-
struct cfg80211_ops¶
无线配置的后端描述
定义:
struct cfg80211_ops {
int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow);
int (*resume)(struct wiphy *wiphy);
void (*set_wakeup)(struct wiphy *wiphy, bool enabled);
struct wireless_dev * (*add_virtual_intf)(struct wiphy *wiphy,const char *name,unsigned char name_assign_type,enum nl80211_iftype type, struct vif_params *params);
int (*del_virtual_intf)(struct wiphy *wiphy, struct wireless_dev *wdev);
int (*change_virtual_intf)(struct wiphy *wiphy,struct net_device *dev,enum nl80211_iftype type, struct vif_params *params);
int (*add_intf_link)(struct wiphy *wiphy,struct wireless_dev *wdev, unsigned int link_id);
void (*del_intf_link)(struct wiphy *wiphy,struct wireless_dev *wdev, unsigned int link_id);
int (*add_key)(struct wiphy *wiphy, struct net_device *netdev,int link_id, u8 key_index, bool pairwise, const u8 *mac_addr, struct key_params *params);
int (*get_key)(struct wiphy *wiphy, struct net_device *netdev,int link_id, u8 key_index, bool pairwise,const u8 *mac_addr, void *cookie, void (*callback)(void *cookie, struct key_params*));
int (*del_key)(struct wiphy *wiphy, struct net_device *netdev,int link_id, u8 key_index, bool pairwise, const u8 *mac_addr);
int (*set_default_key)(struct wiphy *wiphy,struct net_device *netdev, int link_id, u8 key_index, bool unicast, bool multicast);
int (*set_default_mgmt_key)(struct wiphy *wiphy,struct net_device *netdev, int link_id, u8 key_index);
int (*set_default_beacon_key)(struct wiphy *wiphy,struct net_device *netdev,int link_id, u8 key_index);
int (*start_ap)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ap_settings *settings);
int (*change_beacon)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ap_update *info);
int (*stop_ap)(struct wiphy *wiphy, struct net_device *dev, unsigned int link_id);
int (*add_station)(struct wiphy *wiphy, struct net_device *dev,const u8 *mac, struct station_parameters *params);
int (*del_station)(struct wiphy *wiphy, struct net_device *dev, struct station_del_parameters *params);
int (*change_station)(struct wiphy *wiphy, struct net_device *dev,const u8 *mac, struct station_parameters *params);
int (*get_station)(struct wiphy *wiphy, struct net_device *dev, const u8 *mac, struct station_info *sinfo);
int (*dump_station)(struct wiphy *wiphy, struct net_device *dev, int idx, u8 *mac, struct station_info *sinfo);
int (*add_mpath)(struct wiphy *wiphy, struct net_device *dev, const u8 *dst, const u8 *next_hop);
int (*del_mpath)(struct wiphy *wiphy, struct net_device *dev, const u8 *dst);
int (*change_mpath)(struct wiphy *wiphy, struct net_device *dev, const u8 *dst, const u8 *next_hop);
int (*get_mpath)(struct wiphy *wiphy, struct net_device *dev, u8 *dst, u8 *next_hop, struct mpath_info *pinfo);
int (*dump_mpath)(struct wiphy *wiphy, struct net_device *dev,int idx, u8 *dst, u8 *next_hop, struct mpath_info *pinfo);
int (*get_mpp)(struct wiphy *wiphy, struct net_device *dev, u8 *dst, u8 *mpp, struct mpath_info *pinfo);
int (*dump_mpp)(struct wiphy *wiphy, struct net_device *dev,int idx, u8 *dst, u8 *mpp, struct mpath_info *pinfo);
int (*get_mesh_config)(struct wiphy *wiphy,struct net_device *dev, struct mesh_config *conf);
int (*update_mesh_config)(struct wiphy *wiphy,struct net_device *dev, u32 mask, const struct mesh_config *nconf);
int (*join_mesh)(struct wiphy *wiphy, struct net_device *dev,const struct mesh_config *conf, const struct mesh_setup *setup);
int (*leave_mesh)(struct wiphy *wiphy, struct net_device *dev);
int (*join_ocb)(struct wiphy *wiphy, struct net_device *dev, struct ocb_setup *setup);
int (*leave_ocb)(struct wiphy *wiphy, struct net_device *dev);
int (*change_bss)(struct wiphy *wiphy, struct net_device *dev, struct bss_parameters *params);
void (*inform_bss)(struct wiphy *wiphy, struct cfg80211_bss *bss, const struct cfg80211_bss_ies *ies, void *data);
int (*set_txq_params)(struct wiphy *wiphy, struct net_device *dev, struct ieee80211_txq_params *params);
int (*libertas_set_mesh_channel)(struct wiphy *wiphy,struct net_device *dev, struct ieee80211_channel *chan);
int (*set_monitor_channel)(struct wiphy *wiphy,struct net_device *dev, struct cfg80211_chan_def *chandef);
int (*scan)(struct wiphy *wiphy, struct cfg80211_scan_request *request);
void (*abort_scan)(struct wiphy *wiphy, struct wireless_dev *wdev);
int (*auth)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_auth_request *req);
int (*assoc)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_assoc_request *req);
int (*deauth)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_deauth_request *req);
int (*disassoc)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_disassoc_request *req);
int (*connect)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_connect_params *sme);
int (*update_connect_params)(struct wiphy *wiphy,struct net_device *dev,struct cfg80211_connect_params *sme, u32 changed);
int (*disconnect)(struct wiphy *wiphy, struct net_device *dev, u16 reason_code);
int (*join_ibss)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ibss_params *params);
int (*leave_ibss)(struct wiphy *wiphy, struct net_device *dev);
int (*set_mcast_rate)(struct wiphy *wiphy, struct net_device *dev, int rate[NUM_NL80211_BANDS]);
int (*set_wiphy_params)(struct wiphy *wiphy, u32 changed);
int (*set_tx_power)(struct wiphy *wiphy, struct wireless_dev *wdev, enum nl80211_tx_power_setting type, int mbm);
int (*get_tx_power)(struct wiphy *wiphy, struct wireless_dev *wdev, unsigned int link_id, int *dbm);
void (*rfkill_poll)(struct wiphy *wiphy);
#ifdef CONFIG_NL80211_TESTMODE;
int (*testmode_cmd)(struct wiphy *wiphy, struct wireless_dev *wdev, void *data, int len);
int (*testmode_dump)(struct wiphy *wiphy, struct sk_buff *skb,struct netlink_callback *cb, void *data, int len);
#endif;
int (*set_bitrate_mask)(struct wiphy *wiphy,struct net_device *dev,unsigned int link_id,const u8 *peer, const struct cfg80211_bitrate_mask *mask);
int (*dump_survey)(struct wiphy *wiphy, struct net_device *netdev, int idx, struct survey_info *info);
int (*set_pmksa)(struct wiphy *wiphy, struct net_device *netdev, struct cfg80211_pmksa *pmksa);
int (*del_pmksa)(struct wiphy *wiphy, struct net_device *netdev, struct cfg80211_pmksa *pmksa);
int (*flush_pmksa)(struct wiphy *wiphy, struct net_device *netdev);
int (*remain_on_channel)(struct wiphy *wiphy,struct wireless_dev *wdev,struct ieee80211_channel *chan,unsigned int duration, u64 *cookie);
int (*cancel_remain_on_channel)(struct wiphy *wiphy,struct wireless_dev *wdev, u64 cookie);
int (*mgmt_tx)(struct wiphy *wiphy, struct wireless_dev *wdev,struct cfg80211_mgmt_tx_params *params, u64 *cookie);
int (*mgmt_tx_cancel_wait)(struct wiphy *wiphy,struct wireless_dev *wdev, u64 cookie);
int (*set_power_mgmt)(struct wiphy *wiphy, struct net_device *dev, bool enabled, int timeout);
int (*set_cqm_rssi_config)(struct wiphy *wiphy,struct net_device *dev, s32 rssi_thold, u32 rssi_hyst);
int (*set_cqm_rssi_range_config)(struct wiphy *wiphy,struct net_device *dev, s32 rssi_low, s32 rssi_high);
int (*set_cqm_txe_config)(struct wiphy *wiphy,struct net_device *dev, u32 rate, u32 pkts, u32 intvl);
void (*update_mgmt_frame_registrations)(struct wiphy *wiphy,struct wireless_dev *wdev, struct mgmt_frame_regs *upd);
int (*set_antenna)(struct wiphy *wiphy, u32 tx_ant, u32 rx_ant);
int (*get_antenna)(struct wiphy *wiphy, u32 *tx_ant, u32 *rx_ant);
int (*sched_scan_start)(struct wiphy *wiphy,struct net_device *dev, struct cfg80211_sched_scan_request *request);
int (*sched_scan_stop)(struct wiphy *wiphy, struct net_device *dev, u64 reqid);
int (*set_rekey_data)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_gtk_rekey_data *data);
int (*tdls_mgmt)(struct wiphy *wiphy, struct net_device *dev,const u8 *peer, int link_id,u8 action_code, u8 dialog_token, u16 status_code,u32 peer_capability, bool initiator, const u8 *buf, size_t len);
int (*tdls_oper)(struct wiphy *wiphy, struct net_device *dev, const u8 *peer, enum nl80211_tdls_operation oper);
int (*probe_client)(struct wiphy *wiphy, struct net_device *dev, const u8 *peer, u64 *cookie);
int (*set_noack_map)(struct wiphy *wiphy,struct net_device *dev, u16 noack_map);
int (*get_channel)(struct wiphy *wiphy,struct wireless_dev *wdev,unsigned int link_id, struct cfg80211_chan_def *chandef);
int (*start_p2p_device)(struct wiphy *wiphy, struct wireless_dev *wdev);
void (*stop_p2p_device)(struct wiphy *wiphy, struct wireless_dev *wdev);
int (*set_mac_acl)(struct wiphy *wiphy, struct net_device *dev, const struct cfg80211_acl_data *params);
int (*start_radar_detection)(struct wiphy *wiphy,struct net_device *dev,struct cfg80211_chan_def *chandef, u32 cac_time_ms, int link_id);
void (*end_cac)(struct wiphy *wiphy, struct net_device *dev, unsigned int link_id);
int (*update_ft_ies)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_update_ft_ies_params *ftie);
int (*crit_proto_start)(struct wiphy *wiphy,struct wireless_dev *wdev,enum nl80211_crit_proto_id protocol, u16 duration);
void (*crit_proto_stop)(struct wiphy *wiphy, struct wireless_dev *wdev);
int (*set_coalesce)(struct wiphy *wiphy, struct cfg80211_coalesce *coalesce);
int (*channel_switch)(struct wiphy *wiphy,struct net_device *dev, struct cfg80211_csa_settings *params);
int (*set_qos_map)(struct wiphy *wiphy,struct net_device *dev, struct cfg80211_qos_map *qos_map);
int (*set_ap_chanwidth)(struct wiphy *wiphy, struct net_device *dev,unsigned int link_id, struct cfg80211_chan_def *chandef);
int (*add_tx_ts)(struct wiphy *wiphy, struct net_device *dev,u8 tsid, const u8 *peer, u8 user_prio, u16 admitted_time);
int (*del_tx_ts)(struct wiphy *wiphy, struct net_device *dev, u8 tsid, const u8 *peer);
int (*tdls_channel_switch)(struct wiphy *wiphy,struct net_device *dev,const u8 *addr, u8 oper_class, struct cfg80211_chan_def *chandef);
void (*tdls_cancel_channel_switch)(struct wiphy *wiphy,struct net_device *dev, const u8 *addr);
int (*start_nan)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_nan_conf *conf);
void (*stop_nan)(struct wiphy *wiphy, struct wireless_dev *wdev);
int (*add_nan_func)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_nan_func *nan_func);
void (*del_nan_func)(struct wiphy *wiphy, struct wireless_dev *wdev, u64 cookie);
int (*nan_change_conf)(struct wiphy *wiphy,struct wireless_dev *wdev,struct cfg80211_nan_conf *conf, u32 changes);
int (*set_multicast_to_unicast)(struct wiphy *wiphy,struct net_device *dev, const bool enabled);
int (*get_txq_stats)(struct wiphy *wiphy,struct wireless_dev *wdev, struct cfg80211_txq_stats *txqstats);
int (*set_pmk)(struct wiphy *wiphy, struct net_device *dev, const struct cfg80211_pmk_conf *conf);
int (*del_pmk)(struct wiphy *wiphy, struct net_device *dev, const u8 *aa);
int (*external_auth)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_external_auth_params *params);
int (*tx_control_port)(struct wiphy *wiphy,struct net_device *dev,const u8 *buf, size_t len,const u8 *dest, const __be16 proto,const bool noencrypt, int link_id, u64 *cookie);
int (*get_ftm_responder_stats)(struct wiphy *wiphy,struct net_device *dev, struct cfg80211_ftm_responder_stats *ftm_stats);
int (*start_pmsr)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_pmsr_request *request);
void (*abort_pmsr)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_pmsr_request *request);
int (*update_owe_info)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_update_owe_info *owe_info);
int (*probe_mesh_link)(struct wiphy *wiphy, struct net_device *dev, const u8 *buf, size_t len);
int (*set_tid_config)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_tid_config *tid_conf);
int (*reset_tid_config)(struct wiphy *wiphy, struct net_device *dev, const u8 *peer, u8 tids);
int (*set_sar_specs)(struct wiphy *wiphy, struct cfg80211_sar_specs *sar);
int (*color_change)(struct wiphy *wiphy,struct net_device *dev, struct cfg80211_color_change_settings *params);
int (*set_fils_aad)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_fils_aad *fils_aad);
int (*set_radar_background)(struct wiphy *wiphy, struct cfg80211_chan_def *chandef);
int (*add_link_station)(struct wiphy *wiphy, struct net_device *dev, struct link_station_parameters *params);
int (*mod_link_station)(struct wiphy *wiphy, struct net_device *dev, struct link_station_parameters *params);
int (*del_link_station)(struct wiphy *wiphy, struct net_device *dev, struct link_station_del_parameters *params);
int (*set_hw_timestamp)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_set_hw_timestamp *hwts);
int (*set_ttlm)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ttlm_params *params);
u32 (*get_radio_mask)(struct wiphy *wiphy, struct net_device *dev);
int (*assoc_ml_reconf)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ml_reconf_req *req);
int (*set_epcs)(struct wiphy *wiphy, struct net_device *dev, bool val);
};
成员
suspend
wiphy 设备需要被挂起。 变量 wow 将为
NULL
或包含为设备配置的已启用的无线唤醒触发器。resume
wiphy 设备需要被恢复
set_wakeup
当 WoWLAN 启用/禁用时调用,使用此回调函数来调用 device_set_wakeup_enable() 以启用/禁用设备的唤醒。
add_virtual_intf
使用给定的名称创建一个新的虚拟接口,必须设置
struct wireless_dev
的 iftype。 注意:您必须在 wiphy 的网络命名空间中创建新的 netdev! 返回struct wireless_dev
或 ERR_PTR。 对于 P2P 设备 wdevs,驱动程序还必须设置 wdev 中的 address 成员。 这另外还持有 RTNL 以便能够进行 netdev 更改。del_virtual_intf
移除虚拟接口。 这另外还持有 RTNL 以便能够进行 netdev 更改。
change_virtual_intf
更改虚拟接口的类型/配置,保持
struct wireless_dev
的 iftype 更新。 这另外还持有 RTNL 以便能够进行 netdev 更改。add_intf_link
向给定接口添加一个新的 MLO 链路。 请注意,wdev->link[] 数据结构已更新,因此新的链路地址可用。
del_intf_link
从给定接口移除 MLO 链路。
add_key
使用给定的参数添加密钥。 添加组密钥时,mac_addr 将为
NULL
。 对于非 MLO 连接,link_id 将为 -1。 对于 MLO 连接,link_id 对于组密钥将 >= 0,对于配对密钥将为 -1,对于 MLO 配对密钥,mac_addr 将为对等方的 MLD 地址。get_key
获取有关具有给定参数的密钥的信息。 请求组密钥信息时,mac_addr 将为
NULL
。 提供给 callback 函数的所有指针在函数返回后不必有效。 如果无法检索密钥,此函数应返回错误,如果密钥不存在,则返回 -ENOENT。 对于非 MLO 连接,link_id 将为 -1。 对于 MLO 连接,link_id 对于组密钥将 >= 0,对于配对密钥将为 -1,对于 MLO 配对密钥,mac_addr 将为对等方的 MLD 地址。del_key
移除给定的 mac_addr(对于组密钥为
NULL
)和 key_index 的密钥,如果密钥不存在,则返回 -ENOENT。 对于非 MLO 连接,link_id 将为 -1。 对于 MLO 连接,link_id 对于组密钥将 >= 0,对于配对密钥将为 -1,对于 MLO 配对密钥,mac_addr 将为对等方的 MLD 地址。set_default_key
在接口上设置默认密钥。 对于 MLO 连接,link_id 将 >= 0,对于非 MLO 连接将为 -1。
set_default_mgmt_key
在接口上设置默认管理帧密钥。 对于 MLO 连接,link_id 将 >= 0,对于非 MLO 连接将为 -1。
set_default_beacon_key
在接口上设置默认信标帧密钥。 对于 MLO 连接,link_id 将 >= 0,对于非 MLO 连接将为 -1。
start_ap
开始以参数定义的 AP 模式运行。
change_beacon
更改接入点模式接口的信标参数。 当 AP 模式未启动时,应拒绝此调用。
stop_ap
停止作为 AP,包括停止信标。
add_station
添加新站点。
del_station
移除站点
change_station
修改给定站点。 请注意,cfg80211 中对标志更改的验证不多,特别是 auth/assoc/authorized 标志可能会以无效的组合形式到达驱动程序——请务必检查它们,还要根据现有状态检查! 驱动程序必须调用 cfg80211_check_station_change() 来验证信息。
get_station
获取由 mac 标识的站点的信息
dump_station
转储站点回调——在索引 idx 处恢复转储
add_mpath
添加固定网格路径
del_mpath
删除给定的网格路径
change_mpath
更改给定的网格路径
get_mpath
获取给定参数的网格路径
dump_mpath
转储网格路径回调——在索引 idx 处恢复转储
get_mpp
获取给定参数的网格代理路径
dump_mpp
转储网格代理路径回调——在索引 idx 处恢复转储
get_mesh_config
获取当前网格配置
update_mesh_config
更新正在运行的网格上的网格参数。 mask 是一个位字段,它告诉我们设置哪些参数,以及保留哪些参数。
join_mesh
使用指定的参数加入网格网络(在保持 wireless_dev 互斥锁的情况下调用)
leave_mesh
离开当前网格网络(在保持 wireless_dev 互斥锁的情况下调用)
join_ocb
使用指定的参数加入 OCB 网络(在保持 wireless_dev 互斥锁的情况下调用)
leave_ocb
离开当前 OCB 网络(在保持 wireless_dev 互斥锁的情况下调用)
change_bss
修改给定 BSS 的参数。
inform_bss
在得知报告的数据或帧中发现的每个 BSS 的新 BSS 数据时,由 cfg80211 调用。 这是从 cfg8011 inform_bss 处理程序中在保持 bss_lock 时调用的。 数据参数从
struct cfg80211_inform_bss
中的 drv_data 中传递。 BSS 的新 IE 数据会被显式传递。set_txq_params
设置 TX 队列参数
libertas_set_mesh_channel
仅用于 libertas 的向后兼容性,因为它没有实现 join_mesh,而是需要设置信道来加入网格。
set_monitor_channel
为设备设置监视器模式信道。 如果其他接口处于活动状态,此回调应拒绝配置。 如果没有接口处于活动状态或设备已关闭,则应存储信道以供监视器接口变为活动状态时使用。
scan
请求执行扫描。 如果返回零,则扫描请求将提供给驱动程序,并且在传递给
cfg80211_scan_done()
之前有效。 对于扫描结果,请调用cfg80211_inform_bss()
; 您也可以在 scan/scan_done 括号之外调用此函数。abort_scan
告诉驱动程序中止正在进行的扫描。 驱动程序应通过
cfg80211_scan_done()
指示扫描的状态。auth
请求与指定的对等方进行身份验证(在保持 wireless_dev 互斥锁的情况下调用)
assoc
请求与指定的对等方(重新)关联(在保持 wireless_dev 互斥锁的情况下调用)
deauth
请求从指定的对等方取消身份验证(在保持 wireless_dev 互斥锁的情况下调用)
disassoc
请求从指定的对等方解除关联(在保持 wireless_dev 互斥锁的情况下调用)
connect
使用指定的参数连接到 ESS。 连接后,使用状态代码
WLAN_STATUS_SUCCESS
调用cfg80211_connect_result()
/cfg80211_connect_bss()
。 如果由于某种原因连接失败,请使用来自 AP 的状态代码或cfg80211_connect_timeout()
(如果未收到带有状态代码的帧)调用cfg80211_connect_result()
/cfg80211_connect_bss()
。 当另一个 BSS 匹配连接参数时,驱动程序允许漫游到 ESS 中的其他 BSS。 当驱动程序启动此类漫游时,驱动程序应验证目标是否匹配配置的安全参数,并使用重新关联请求帧而不是关联请求帧。 connect 函数还可用于请求驱动程序在连接到 ESS 时执行特定漫游。 在这种情况下,prev_bssid 参数设置为当前关联的 BSS 的 BSSID,以指示请求重新关联。 在驱动程序启动的漫游和新的 connect() 调用启动的漫游情况下,漫游结果通过调用cfg80211_roamed()
来指示。(在保持 wireless_dev 互斥锁的情况下调用)update_connect_params
连接到 BSS 时更新连接参数。 更新的参数可供驱动程序/固件用于后续 BSS 选择(漫游)决策以及形成身份验证/(重新)关联请求帧。 此调用不请求立即与当前 BSS 断开关联或重新关联,即,这仅影响后续的(重新)关联。 changed 中的位在
enum cfg80211_connect_params_changed
中定义。(在保持 wireless_dev 互斥锁的情况下调用)disconnect
断开与 BSS/ESS 的连接或停止正在进行的连接尝试。 完成后,如果已建立连接,则调用
cfg80211_disconnected()
(在保持 wireless_dev 互斥锁的情况下调用),否则调用cfg80211_connect_timeout()
。join_ibss
加入指定的 IBSS(或在必要时创建)。 完成后,调用
cfg80211_ibss_joined()
,当由于合并而更改 BSSID 时也调用该函数。(在保持 wireless_dev 互斥锁的情况下调用)leave_ibss
离开 IBSS。(在保持 wireless_dev 互斥锁的情况下调用)
set_mcast_rate
设置指定的多播速率(仅当 vif 处于 ADHOC 或 MESH 模式时)
set_wiphy_params
通知 wiphy 参数已更改;changed 位字段(参见
enum wiphy_params_flags
)描述了哪些值已更改。 实际参数值在struct wiphy
中可用。 如果返回错误,则不应更改任何值。set_tx_power
根据参数设置传输功率,传递的功率以 mBm 为单位,要获得 dBm 请使用 MBM_TO_DBM()。 如果为 wiphy 设置了功率,则 wdev 可能为
NULL
,并且除非驱动程序支持 per-vif TX 功率(如 nl80211 特性标志所声明),否则将始终为NULL
。get_tx_power
将当前 TX 功率存储到 dbm 变量中; 如果成功则返回 0
rfkill_poll
轮询 hw rfkill 行,使用 cfg80211 报告函数来调整 rfkill hw 状态
testmode_cmd
运行测试模式命令; wdev 可能为
NULL
testmode_dump
实现测试模式转储。 该 cb->args[2] 及以上版本可由该函数使用,但不得触及 0 和 1。 此外,返回 -ENOBUFS 和 -ENOENT 以外的错误代码将终止转储并返回到用户空间并显示错误,因此请小心。 如果有任何数据从用户空间传入,则 data/len 参数将存在并指向
NL80211_ATTR_TESTDATA
中包含的数据。set_bitrate_mask
设置比特率掩码配置
dump_survey
获取站点勘测信息。
set_pmksa
缓存 BSSID 的 PMKID。 这对于运行能够生成(重新)关联 RSN IE 的固件的 fullmac 设备最有用。 它允许在 WPA2 BSSID 之间更快地漫游。
del_pmksa
删除缓存的 PMKID。
flush_pmksa
刷新所有缓存的 PMKID。
remain_on_channel
请求驱动程序在指定的信道上保持唤醒指定的时间,以完成信道外操作(例如,公共操作帧交换)。 当驱动程序在请求的信道上准备好时,它必须通过调用
cfg80211_ready_on_channel()
通过事件通知来指示这一点。cancel_remain_on_channel
取消正在进行的 remain-on-channel 操作。 这允许根据持续时间值在超时之前终止操作。
mgmt_tx
传输管理帧。
mgmt_tx_cancel_wait
取消在另一个信道上传输管理帧的等待时间
set_power_mgmt
配置 WLAN 功耗管理。 超时值为 -1 允许驱动程序调整动态 ps 超时值。
set_cqm_rssi_config
配置连接质量监视器 RSSI 阈值。 配置后,驱动程序应(很快)发送一个事件,指示当前级别高于/低于配置的阈值; 当配置更改(在首次禁用之前)时,这可能需要一些注意。
set_cqm_rssi_range_config
在连接质量监视器中配置两个 RSSI 阈值。 仅当发现信号电平在两个值之外时,才会发送事件。 如果实现了此方法,驱动程序应设置
NL80211_EXT_FEATURE_CQM_RSSI_LIST
。 如果提供了此方法,则提供 set_cqm_rssi_config 没有意义。set_cqm_txe_config
配置连接质量监视器 TX 错误阈值。
update_mgmt_frame_registrations
通知驱动程序管理帧注册已更新。 允许回调函数休眠。
set_antenna
在设备上设置天线配置 (tx_ant, rx_ant)。 参数是用于 TX/RX 的允许天线的位图。 驱动程序可能会拒绝他们不支持的 TX/RX 掩码组合,方法是返回 -EINVAL(另请参见 nl80211.h NL80211_ATTR_WIPHY_ANTENNA_TX)。
get_antenna
从设备获取当前天线配置 (tx_ant, rx_ant)。
sched_scan_start
告诉驱动程序启动计划扫描。
sched_scan_stop
告诉驱动程序使用给定的请求 ID 停止正在进行的计划扫描。 此调用必须停止计划扫描,并准备好在新扫描返回之前启动新扫描,即,sched_scan_start 可能会在再次调用后立即调用,并且在这种情况下不应失败。 驱动程序不应为请求的停止调用 cfg80211_sched_scan_stopped()(当此方法返回 0 时)。
set_rekey_data
将 GTK 重新密钥所需的数据提供给驱动程序
tdls_mgmt
传输 TDLS 管理帧。
tdls_oper
执行高级 TDLS 操作(例如,TDLS 链路设置)。
probe_client
探测关联的客户端,必须返回稍后传递给 cfg80211_probe_status() 的 cookie。
set_noack_map
设置 TID 的 NoAck Map。
get_channel
获取虚拟接口的当前操作信道。 对于监视器接口,除非存在单个当前监视信道,否则应返回
NULL
。start_p2p_device
启动给定的 P2P 设备。
stop_p2p_device
停止给定的 P2P 设备。
set_mac_acl
在 AP 和 P2P GO 模式下设置 MAC 地址控制列表。 参数包括 ACL 策略、站点的 MAC 地址数组和 MAC 地址的数量。 如果驱动程序中已存在列表,则此新列表将替换现有列表。 当 MAC 地址条目的数量以 0 传递时,驱动程序必须清除其 ACL。 声明支持基于 MAC 的 ACL 的驱动程序必须实现此回调。
start_radar_detection
启动驱动程序中的雷达检测。
end_cac
结束正在运行的 CAC,可能是因为相关的 CAC 在另一个 phy 上完成。
update_ft_ies
向驱动程序提供更新的快速 BSS 转换信息。 如果 SME 在驱动程序/固件中,则可以在构建身份验证和重新关联请求帧中使用此信息。
crit_proto_start
指示关键协议需要给定的持续时间(毫秒)内更高的链路可靠性。 提供了该协议,以便驱动程序可以采取最适当的操作。
crit_proto_stop
指示关键协议不再需要更高的链路可靠性。 此操作不会失败。
set_coalesce
设置合并参数。
channel_switch
启动信道切换过程(使用 CSA)。 驱动程序负责验证切换是否可行。 由于这本质上很棘手,因此驱动程序可能会决定稍后使用 cfg80211_stop_iface() 断开接口的连接。 这并不意味着驱动程序可以接受所有内容。 它应该尽最大努力验证请求并尽快拒绝它们。
set_qos_map
将 QoS 映射信息设置到驱动程序
set_ap_chanwidth
为给定的接口设置 AP(包括 P2P GO)模式信道宽度。 这用于例如在 BSS 的生命周期内动态更改 HT 20/40 MHz 信道宽度。
add_tx_ts
使用给定的参数验证(如果 admitted_time 为 0)或向设备添加 TX TS; 操作帧交换已由用户空间处理,因此这只需要修改 TX 路径以考虑 TS。 如果 admitted 时间为 0,则仅验证参数以确保会话可以完全创建; 仅为它始终返回成功是有效的,但这可能会导致低效的行为(与对等方的握手,随后在稍后拒绝添加时立即拆除)
del_tx_ts
移除现有 TX TS
tdls_channel_switch
与 TDLS 对等方开始信道切换。 驱动程序负责不断启动信道切换操作并返回到基本信道以与 AP 进行通信。
tdls_cancel_channel_switch
停止与 TDLS 对等方的信道切换。 调用完成时,两个对等方都必须位于基本信道上。
start_nan
启动 NAN 接口。
stop_nan
停止 NAN 接口。
add_nan_func
添加 NAN 函数。 失败时返回负值。 成功后,nan_func 所有权将转移到驱动程序,并且可以在此函数范围之外访问它。 当驱动程序不再需要 nan_func 时,应通过调用 cfg80211_free_nan_func() 来释放它。 成功后,驱动程序应在提供的 nan_func 中分配 instance_id。
del_nan_func
删除 NAN 函数。
nan_change_conf
更改 NAN 配置。 更改的参数必须在 changes 中指定(使用
enum cfg80211_nan_conf_changes
); 所有其他参数必须忽略。set_multicast_to_unicast
配置 BSS 的多播到单播转换
get_txq_stats
获取接口或 phy 的 TXQ 统计信息。 如果 wdev 为
NULL
,则此函数应返回 phy 统计信息,否则返回接口统计信息。set_pmk
配置 PMK 以用于卸载的 802.1X 4 向握手。 如果未通过 del_pmk 删除,则 PMK 将保持有效,直到断开连接,驱动程序应在断开连接时清除它。(在保持 wireless_dev 互斥锁的情况下调用)
del_pmk
删除先前为给定身份验证器配置的 PMK。(在保持 wireless_dev 互斥锁的情况下调用)
external_auth
指示用户空间卸载的身份验证处理结果
tx_control_port
TX 控制端口帧 (EAPoL)。 noencrypt 参数告诉驱动程序不应加密该帧。
get_ftm_responder_stats
检索 FTM 响应器统计信息(如果可用)。 统计信息应该是累积的,目前没有提供重置方法。
start_pmsr
启动对等测量(例如 FTM)
abort_pmsr
中止对等测量
update_owe_info
向驱动程序提供更新的 OWE 信息。 实现 SME 但将 OWE 处理卸载到用户空间的驱动程序将通过此接口获取更新的 DH IE。
probe_mesh_link
通过发送数据帧来探测直接网格对等方的链路质量,并覆盖 HWMP 路径选择算法。
set_tid_config
TID 特定配置,可以是针对对等方或 BSS 的。 此回调可能会休眠。
reset_tid_config
为对等方重置 TID 特定配置,适用于给定的 TID。 此回调可能会休眠。
set_sar_specs
更新 SAR(TX 功率)设置。
color_change
启动颜色更改。
set_fils_aad
将 FILS AAD 数据设置到 AP 驱动程序,以便驱动程序可以使用这些数据来解密(重新)关联请求并加密(重新)关联响应帧。
set_radar_background
配置专用的异频链,该链可用于某些硬件上的雷达/CAC 检测。 此链不能用于发送或接收帧,并且它绑定到正在运行的 wdev。 后台雷达/CAC 检测允许避免 CAC 停机时间,从而在所选雷达信道上进行 CAC 检测期间切换到其他信道。 调用方应将 chandef 指针设置为 NULL,以便禁用后台 CAC/雷达检测。
add_link_station
将链路添加到站点。
mod_link_station
修改站点的链路。
del_link_station
删除站点的链路。
set_hw_timestamp
启用/禁用 TM/FTM 帧的硬件时间戳。
set_ttlm
设置 TID 到链路的映射。
get_radio_mask
获取正在使用的无线电的位掩码。(在保持 wiphy 互斥锁的情况下调用)
assoc_ml_reconf
请求非 AP MLO 连接来执行 ML 重新配置,即,使用 ML 重新配置操作帧添加链路和/或从关联中移除链路。 成功添加的链路将被添加到有效链路集中。 成功移除的链路将从有效链路集中移除。 驱动程序必须通过调用 cfg80211_links_removed() 来指示移除的链路,并通过调用 cfg80211_mlo_reconf_add_done() 来指示添加的链路。 在调用 cfg80211_mlo_reconf_add_done() 时,必须为请求 MLO 重新配置“添加”操作的每个链路提供 bss 指针。
set_epcs
为站点模式启用/禁用 EPCS。
描述
此结构体由 fullmac 卡驱动程序和/或无线堆栈注册,以便处理对其接口的配置请求。
除非另有说明,否则所有回调函数成功时应返回 0,否则返回负错误代码。
所有操作都在保持 wiphy 互斥锁的情况下调用。 RTNL 可能会额外保持(由于无线扩展),但在下面记录的情况除外,不能依赖这一点。 请注意,由于排序,RTNL 也无法在任何处理程序中获取。
-
void cfg80211_rx_mlme_mgmt(struct net_device *dev, const u8 *buf, size_t len)¶
已处理的 MLME 管理帧的通知
参数
struct net_device *dev
网络设备
const u8 *buf
身份验证帧(标头 + 正文)
size_t len
帧数据的长度
描述
每当收到身份验证、解除关联或取消身份验证帧并在站点模式下进行处理时,都会调用此函数。 在被要求通过 cfg80211_ops::auth() 进行身份验证后,驱动程序必须调用此函数或 cfg80211_auth_timeout()
。 在被要求通过 cfg80211_ops::assoc() 进行关联后,驱动程序必须调用此函数或 cfg80211_auth_timeout()
。 连接后,驱动程序必须针对收到的和处理的解除关联和取消身份验证帧调用此函数。 如果该帧由于未受保护而无法使用,则驱动程序必须改为调用函数 cfg80211_rx_unprot_mlme_mgmt()。
此函数可能会休眠。 调用方必须保持相应的 wdev 互斥锁。
-
void cfg80211_auth_timeout(struct net_device *dev, const u8 *addr)¶
身份验证超时的通知
参数
struct net_device *dev
网络设备
const u8 *addr
身份验证超时的设备的 MAC 地址
描述
此函数可能会休眠。 调用方必须保持相应的 wdev 互斥锁。
-
void cfg80211_rx_assoc_resp(struct net_device *dev, const struct cfg80211_rx_assoc_resp_data *data)¶
已处理的关联响应的通知
参数
struct net_device *dev
网络设备
const struct cfg80211_rx_assoc_resp_data *data
关联响应数据,
struct cfg80211_rx_assoc_resp_data
描述
在被要求通过 cfg80211_ops::assoc() 进行关联后,驱动程序必须调用此函数或 cfg80211_auth_timeout()
。
此函数可能会休眠。 调用方必须保持相应的 wdev 互斥锁。
-
void cfg80211_tx_mlme_mgmt(struct net_device *dev, const u8 *buf, size_t len, bool reconnect)¶
已传输的取消身份验证/解除关联帧的通知
参数
struct net_device *dev
网络设备
const u8 *buf
802.11 帧(标头 + 正文)
size_t len
帧数据的长度
bool reconnect
需要立即重新连接(包括 nl80211 属性)
描述
每当在站点模式下处理完取消身份验证时,都会调用此函数。 这包括收到的取消身份验证帧和本地生成的帧。 此函数可能会休眠。 调用方必须保持相应的 wdev 互斥锁。
-
void cfg80211_michael_mic_failure(struct net_device *dev, const u8 *addr, enum nl80211_key_type key_type, int key_id, const u8 *tsc, gfp_t gfp)¶
Michael MIC 故障(TKIP)通知
参数
struct net_device *dev
网络设备
const u8 *addr
帧的源 MAC 地址
enum nl80211_key_type key_type
接收到的帧使用的密钥类型
int key_id
密钥标识符 (0..3)。如果缺失,则可以为 -1。
const u8 *tsc
生成 MIC 故障的帧的 TSC 值(6 个八位字节)
gfp_t gfp
分配标志
描述
每当本地 MAC 在接收到的帧中检测到 MIC 故障时,都会调用此函数。这与 MLME-MICHAELMICFAILURE.indication() 原语匹配。
-
void cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid, struct ieee80211_channel *channel, gfp_t gfp)¶
通知 cfg80211 设备已加入 IBSS
参数
struct net_device *dev
网络设备
const u8 *bssid
加入的 IBSS 的 BSSID
struct ieee80211_channel *channel
加入的 IBSS 的信道
gfp_t gfp
分配标志
描述
此函数通知 cfg80211 设备已加入 IBSS 或切换到不同的 BSSID。 在调用此函数之前,必须从 IBSS 接收到信标,或者必须使用本地生成的信标调用 cfg80211_inform_bss{,_frame} 函数之一 - 这保证了此 IBSS 始终存在扫描结果。 cfg80211 将处理其余部分。
-
struct cfg80211_connect_resp_params¶
连接响应参数
定义:
struct cfg80211_connect_resp_params {
int status;
const u8 *req_ie;
size_t req_ie_len;
const u8 *resp_ie;
size_t resp_ie_len;
struct cfg80211_fils_resp_params fils;
enum nl80211_timeout_reason timeout_reason;
const u8 *ap_mld_addr;
u16 valid_links;
struct {
const u8 *addr;
const u8 *bssid;
struct cfg80211_bss *bss;
u16 status;
} links[IEEE80211_MLD_MAX_NUM_LINKS];
};
成员
状态
状态码,连接成功时为
WLAN_STATUS_SUCCESS
,如果您的设备无法为您提供失败的实际状态码,请使用WLAN_STATUS_UNSPECIFIED_FAILURE
。 如果此调用用于报告由于超时导致的失败(例如,未从 AP 接收到身份验证帧),而不是 AP 的显式拒绝,则使用 -1 表示这是一个失败,但没有状态码。 在这种情况下,**timeout_reason** 用于报告超时的原因。req_ie
关联请求 IE(可能为
NULL
)req_ie_len
关联请求 IE 长度
resp_ie
关联响应 IE(可能为
NULL
)resp_ie_len
关联响应 IE 长度
fils
FILS 连接响应参数。
timeout_reason
连接超时的原因。 当连接由于超时而不是来自 AP 的显式拒绝而失败时,将使用此方法。 当超时原因未知时,使用
NL80211_TIMEOUT_UNSPECIFIED
。 仅当 **status** < 0 以指示失败是由于超时而不是由于 AP 的显式拒绝时,才使用此值。 在其他情况下(**status** >= 0),将忽略此值。ap_mld_addr
对于 MLO 连接,AP 的 MLD 地址。 否则为
NULL
。valid_links
对于 MLO 连接,有效链接 ID 的位掩码。 否则为零。
links
对于 MLO 连接,包含使用 **valid_links** 指示的有效链接的链接信息。 对于非 MLO 连接,links[0] 包含连接的 AP 信息。
links.addr
对于 MLO 连接,STA 链接的 MAC 地址。 否则为
NULL
。links.bssid
对于 MLO 连接,AP 链接的 MAC 地址。 对于非 MLO 连接,links[0].bssid 指向 AP 的 BSSID(可能为
NULL
)。links.bss
对于 MLO 连接,STA 链接连接到的 bss 的条目。 对于非 MLO 连接,links[0].bss 指向 STA 连接到的 bss 的条目。 可以通过 cfg80211_get_bss() 获得(可能为
NULL
)。 建议存储来自 connect_request 的 bss 并保持对其的引用,并通过此参数返回,以避免在连接期间 bss 过期时发出警告,特别是对于那些实现 connect 操作的驱动程序。 只需要指定 **bssid** 和 **bss** 中的一个参数。links.status
每个链接的状态代码,要报告给定链接的非
WLAN_STATUS_SUCCESS
的状态代码,它也必须在 **valid_links** 位图中,并且可能具有 BSS 指针(然后将其释放)
-
void cfg80211_connect_done(struct net_device *dev, struct cfg80211_connect_resp_params *params, gfp_t gfp)¶
通知 cfg80211 连接结果
参数
struct net_device *dev
网络设备
struct cfg80211_connect_resp_params *params
连接响应参数
gfp_t gfp
分配标志
描述
一旦执行完 connect() 中的连接请求,底层驱动程序应调用此函数。 这类似于 cfg80211_connect_bss()
,但采用连接响应参数的结构指针。 cfg80211_connect_bss()
、cfg80211_connect_result()
、cfg80211_connect_timeout()
和 cfg80211_connect_done()
函数中应只调用一个。
-
void cfg80211_connect_bss(struct net_device *dev, const u8 *bssid, struct cfg80211_bss *bss, const u8 *req_ie, size_t req_ie_len, const u8 *resp_ie, size_t resp_ie_len, int status, gfp_t gfp, enum nl80211_timeout_reason timeout_reason)¶
通知 cfg80211 连接结果
参数
struct net_device *dev
网络设备
const u8 *bssid
AP 的 BSSID
struct cfg80211_bss *bss
STA 连接到的 bss 的条目,可以通过 cfg80211_get_bss() 获得(可能为
NULL
)。 但建议存储来自 connect_request 的 bss 并保持对其的引用,并通过此参数返回,以避免在连接期间 bss 过期时发出警告,特别是对于那些实现 connect 操作的驱动程序。 只需要指定 **bssid** 和 **bss** 中的一个参数。const u8 *req_ie
关联请求 IE(可能为
NULL
)size_t req_ie_len
关联请求 IE 长度
const u8 *resp_ie
关联响应 IE(可能为
NULL
)size_t resp_ie_len
关联响应 IE 长度
int status
状态码,连接成功时为
WLAN_STATUS_SUCCESS
,如果您的设备无法为您提供失败的实际状态码,请使用WLAN_STATUS_UNSPECIFIED_FAILURE
。 如果此调用用于报告由于超时导致的失败(例如,未从 AP 接收到身份验证帧),而不是 AP 的显式拒绝,则使用 -1 表示这是一个失败,但没有状态码。 在这种情况下,**timeout_reason** 用于报告超时的原因。gfp_t gfp
分配标志
enum nl80211_timeout_reason timeout_reason
连接超时的原因。 当连接由于超时而不是来自 AP 的显式拒绝而失败时,将使用此方法。 当超时原因未知时,使用
NL80211_TIMEOUT_UNSPECIFIED
。 仅当 **status** < 0 以指示失败是由于超时而不是由于 AP 的显式拒绝时,才使用此值。 在其他情况下(**status** >= 0),将忽略此值。
描述
一旦执行完 connect() 中的连接请求,底层驱动程序应调用此函数。 这类似于 cfg80211_connect_result()
,但可以选择标识连接的实际 bss 条目。 cfg80211_connect_bss()
、cfg80211_connect_result()
、cfg80211_connect_timeout()
和 cfg80211_connect_done()
函数中应只调用一个。
-
void cfg80211_connect_result(struct net_device *dev, const u8 *bssid, const u8 *req_ie, size_t req_ie_len, const u8 *resp_ie, size_t resp_ie_len, u16 status, gfp_t gfp)¶
通知 cfg80211 连接结果
参数
struct net_device *dev
网络设备
const u8 *bssid
AP 的 BSSID
const u8 *req_ie
关联请求 IE(可能为
NULL
)size_t req_ie_len
关联请求 IE 长度
const u8 *resp_ie
关联响应 IE(可能为
NULL
)size_t resp_ie_len
关联响应 IE 长度
u16 status
状态码,连接成功时为
WLAN_STATUS_SUCCESS
,如果您的设备无法为您提供失败的实际状态码,请使用WLAN_STATUS_UNSPECIFIED_FAILURE
。gfp_t gfp
分配标志
描述
一旦执行完 connect() 中的连接请求,底层驱动程序应调用此函数。 这类似于 cfg80211_connect_bss()
,后者允许指定实际的 bss 条目。 cfg80211_connect_bss()
、cfg80211_connect_result()
、cfg80211_connect_timeout()
和 cfg80211_connect_done()
函数中应只调用一个。
-
void cfg80211_connect_timeout(struct net_device *dev, const u8 *bssid, const u8 *req_ie, size_t req_ie_len, gfp_t gfp, enum nl80211_timeout_reason timeout_reason)¶
通知 cfg80211 连接超时
参数
struct net_device *dev
网络设备
const u8 *bssid
AP 的 BSSID
const u8 *req_ie
关联请求 IE(可能为
NULL
)size_t req_ie_len
关联请求 IE 长度
gfp_t gfp
分配标志
enum nl80211_timeout_reason timeout_reason
连接超时的原因。
描述
每当 connect() 在没有从 AP 接收到显式身份验证/关联拒绝的序列中失败时,底层驱动程序应调用此函数。 例如,由于无法发送身份验证或关联请求帧或在等待响应时超时,可能会发生这种情况。 cfg80211_connect_bss()
、cfg80211_connect_result()
、cfg80211_connect_timeout()
和 cfg80211_connect_done()
函数中应只调用一个。
-
void cfg80211_roamed(struct net_device *dev, struct cfg80211_roam_info *info, gfp_t gfp)¶
通知 cfg80211 漫游
参数
struct net_device *dev
网络设备
struct cfg80211_roam_info *info
有关新 BSS 的信息。struct
cfg80211_roam_info
。gfp_t gfp
分配标志
描述
可以调用此函数,驱动程序传递新 AP 的 BSSID 或传递 bss 条目,以避免 bss 条目超时的竞争。 底层驱动程序应在连接时从一个 AP 漫游到另一个 AP 时调用此函数。 在固件中实现了漫游的驱动程序应传递 bss 条目,以避免 bss 条目超时中的竞争,在这种情况下,驱动程序中会看到新 AP 的 bss 条目,但由于计划 rdev->event_work 的延迟,在 __cfg80211_roamed() 中访问时会超时。 如果出现任何故障,则引用将在 cfg80211_roamed()
或 __cfg80211_romed() 中释放。 否则,它将在与当前 bss 断开连接时释放。
-
void cfg80211_disconnected(struct net_device *dev, u16 reason, const u8 *ie, size_t ie_len, bool locally_generated, gfp_t gfp)¶
通知 cfg80211 连接已断开
参数
struct net_device *dev
网络设备
u16 reason
断开连接的原因代码,如果未知,则设置为 0
const u8 *ie
取消身份验证/取消关联帧的信息元素(可能为
NULL
)size_t ie_len
IE 的长度
bool locally_generated
本地请求断开连接
gfp_t gfp
分配标志
描述
调用此函数后,驱动程序应进入空闲状态,并且不再尝试连接到任何 AP。
-
void cfg80211_ready_on_channel(struct wireless_dev *wdev, u64 cookie, struct ieee80211_channel *chan, unsigned int duration, gfp_t gfp)¶
remain_on_channel 启动通知
参数
struct wireless_dev *wdev
无线设备
u64 cookie
请求 Cookie
struct ieee80211_channel *chan
当前信道(来自 remain_on_channel 请求)
unsigned int duration
驱动程序打算在信道上保持的持续时间(以毫秒为单位)
gfp_t gfp
分配标志
-
void cfg80211_remain_on_channel_expired(struct wireless_dev *wdev, u64 cookie, struct ieee80211_channel *chan, gfp_t gfp)¶
remain_on_channel 持续时间已过期
参数
struct wireless_dev *wdev
无线设备
u64 cookie
请求 Cookie
struct ieee80211_channel *chan
当前信道(来自 remain_on_channel 请求)
gfp_t gfp
分配标志
-
void cfg80211_new_sta(struct net_device *dev, const u8 *mac_addr, struct station_info *sinfo, gfp_t gfp)¶
通知用户空间有关站点的信息
参数
struct net_device *dev
netdev
const u8 *mac_addr
站点的地址
struct station_info *sinfo
站点信息
gfp_t gfp
分配标志
-
bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq, int sig_dbm, const u8 *buf, size_t len, u32 flags)¶
接收到的未处理的管理帧通知
参数
struct wireless_dev *wdev
接收帧的无线设备
int freq
接收帧的频率(以 MHz 为单位)
int sig_dbm
信号强度(以 dBm 为单位),如果未知则为 0
const u8 *buf
管理帧(标头 + 正文)
size_t len
帧数据的长度
u32 flags
标志,如 enum nl80211_rxmgmt_flags 中定义
描述
每当收到站点模式接口的操作帧,但未在内核中处理时,都会调用此函数。
Return
如果用户空间应用程序已为此帧注册,则为 true
。 对于操作帧,这使其负责拒绝无法识别的操作帧; 否则为 false
,在这种情况下,对于操作帧,驱动程序负责拒绝该帧。
-
void cfg80211_mgmt_tx_status(struct wireless_dev *wdev, u64 cookie, const u8 *buf, size_t len, bool ack, gfp_t gfp)¶
管理帧的 TX 状态通知
参数
struct wireless_dev *wdev
接收帧的无线设备
u64 cookie
cfg80211_ops::mgmt_tx() 返回的 Cookie
const u8 *buf
管理帧(标头 + 正文)
size_t len
帧数据的长度
bool ack
帧是否已确认
gfp_t gfp
上下文标志
描述
每当请求使用 cfg80211_ops::mgmt_tx() 传输管理帧时,都会调用此函数以报告传输尝试的 TX 状态。
-
void cfg80211_cqm_rssi_notify(struct net_device *dev, enum nl80211_cqm_rssi_threshold_event rssi_event, s32 rssi_level, gfp_t gfp)¶
连接质量监控 RSSI 事件
参数
struct net_device *dev
网络设备
enum nl80211_cqm_rssi_threshold_event rssi_event
触发的 RSSI 事件
s32 rssi_level
新的 RSSI 电平值,如果不可用则为 0
gfp_t gfp
上下文标志
描述
当配置的连接质量监控 RSSI 阈值达到事件发生时,将调用此函数。
-
void cfg80211_cqm_pktloss_notify(struct net_device *dev, const u8 *peer, u32 num_packets, gfp_t gfp)¶
通知用户空间有关与对等方的丢包
参数
struct net_device *dev
网络设备
const u8 *peer
对等方的 MAC 地址
u32 num_packets
丢失了多少个数据包 -- 应该是一个固定的阈值,但可能不少于 50 个,或者可能是一个取决于吞吐量的阈值(以应对临时干扰)
gfp_t gfp
上下文标志
扫描和 BSS 列表处理¶
扫描过程本身相当简单,但 cfg80211 提供了相当多的辅助功能。要启动扫描,将使用扫描定义调用扫描操作。此扫描定义包含要扫描的信道,以及要发送探测请求的 SSID(包括通配符,如果需要)。无源扫描通过没有要探测的 SSID 来指示。此外,扫描请求可能包含应添加到探测请求的额外信息元素。保证 IE 格式良好,并且不会超过驱动程序在 wiphy 结构中公布的最大长度。
当扫描找到 BSS 时,需要通知 cfg80211,因为它负责维护 BSS 列表;驱动程序不应自己维护列表。为此通知,存在各种函数。
由于驱动程序不维护 BSS 列表,因此还有许多函数可以搜索 BSS 并从 cfg80211 维护的 BSS 结构中获取有关它的信息。BSS 列表也可供用户空间使用。
-
struct cfg80211_ssid¶
SSID 描述
定义:
struct cfg80211_ssid {
u8 ssid[IEEE80211_MAX_SSID_LEN];
u8 ssid_len;
};
成员
ssid
SSID
ssid_len
ssid 的长度
-
struct cfg80211_scan_request¶
扫描请求描述
定义:
struct cfg80211_scan_request {
struct cfg80211_ssid *ssids;
int n_ssids;
u32 n_channels;
const u8 *ie;
size_t ie_len;
u16 duration;
bool duration_mandatory;
u32 flags;
u32 rates[NUM_NL80211_BANDS];
struct wireless_dev *wdev;
u8 mac_addr[ETH_ALEN] ;
u8 mac_addr_mask[ETH_ALEN] ;
u8 bssid[ETH_ALEN] ;
struct wiphy *wiphy;
unsigned long scan_start;
struct cfg80211_scan_info info;
bool notified;
bool no_cck;
bool scan_6ghz;
u32 n_6ghz_params;
struct cfg80211_scan_6ghz_params *scan_6ghz_params;
s8 tsf_report_link_id;
struct ieee80211_channel *channels[] ;
};
成员
ssids
要扫描的 SSID(仅限主动扫描)
n_ssids
SSID 的数量
n_channels
要扫描的信道总数
ie
要添加到探测请求中的可选信息元素或
NULL
ie_len
ie 的长度(以八位字节为单位)
duration
在每个信道上侦听的时间长度,以 TU 为单位。如果未设置
duration_mandatory
,则这是最大停留时间,实际停留时间可能会更短。duration_mandatory
如果设置,则扫描持续时间必须由
duration
字段指定。flags
来自
enum nl80211_scan_flags
的控制标志rates
为每个频段公布的速率的位图
wdev
要扫描的无线设备
mac_addr
与随机化一起使用的 MAC 地址
mac_addr_mask
与随机化一起使用的 MAC 地址掩码,掩码中为 0 的位应随机化,为 1 的位应从 mac_addr 中获取
bssid
要扫描的 BSSID(最常见的是通配符 BSSID)
wiphy
此扫描请求所属的 wiphy
scan_start
扫描开始的时间(以节拍为单位)
info
(内部)有关已完成扫描的信息
notified
(内部)扫描请求已通知为完成或中止
no_cck
用于在 2GHz 频段以非 CCK 速率发送探测请求
scan_6ghz
仅与拆分扫描请求相关,如果这是第二个扫描请求,则为 true
n_6ghz_params
6 GHz 参数的数量
scan_6ghz_params
6 GHz 参数
tsf_report_link_id
对于 MLO,指示应用于 TSF 报告的 BSS 的链路 ID。可以设置为 -1 以指示没有偏好。
channels
要在其上扫描的信道。
-
struct cfg80211_inform_bss¶
BSS 信息数据
定义:
struct cfg80211_inform_bss {
struct ieee80211_channel *chan;
s32 signal;
u64 boottime_ns;
u64 parent_tsf;
u8 parent_bssid[ETH_ALEN] ;
u8 chains;
s8 chain_signal[IEEE80211_MAX_CHAINS];
u8 restrict_use:1, use_for:7;
u8 cannot_use_reasons;
void *drv_data;
};
成员
chan
接收帧的信道
signal
信号强度值,根据 wiphy 的信号类型
boottime_ns
接收信息时的时间戳 (CLOCK_BOOTTIME);应与设备实际接收帧的时间匹配(不仅仅是主机,以防它在设备上缓冲)并且精确到大约 10 毫秒。如果帧未缓冲,则传递
ktime_get_boottime_ns()
的返回值可能就足够了。parent_tsf
在接收帧的时间戳字段的第一个八位字节开始时的时间。该时间是由
parent_bssid
指定的 BSS 的 TSF。parent_bssid
设置
parent_tsf
所依据的 BSS。这设置为在接收到信标/探测的扫描中请求扫描的 BSS。chains
chain_signal 中填充值的位掩码。
chain_signal
最后接收的 BSS 的每个链信号强度(以 dBm 为单位)。
restrict_use
限制使用,如果未设置,则假定 use_for 为
NL80211_BSS_USE_FOR_NORMAL
。use_for
此 BSS 的可能用途的位图,请参阅
enum nl80211_bss_use_for
cannot_use_reasons
如果设置了 restrict_use 且 use_for 为零(空),则无法连接的原因(位图);如果未指定原因,则可能为 0;请参阅
enum nl80211_bss_cannot_use_reasons
drv_data
要传递到 inform_bss 的数据
-
struct cfg80211_bss¶
BSS 描述
定义:
struct cfg80211_bss {
struct ieee80211_channel *channel;
const struct cfg80211_bss_ies __rcu *ies;
const struct cfg80211_bss_ies __rcu *beacon_ies;
const struct cfg80211_bss_ies __rcu *proberesp_ies;
struct cfg80211_bss *hidden_beacon_bss;
struct cfg80211_bss *transmitted_bss;
struct list_head nontrans_list;
s32 signal;
u64 ts_boottime;
u16 beacon_interval;
u16 capability;
u8 bssid[ETH_ALEN];
u8 chains;
s8 chain_signal[IEEE80211_MAX_CHAINS];
u8 proberesp_ecsa_stuck:1;
u8 bssid_index;
u8 max_bssid_indicator;
u8 use_for;
u8 cannot_use_reasons;
u8 priv[] ;
};
成员
channel
此 BSS 所在的信道
ies
信息元素(请注意,不保证这些格式良好!);这是一个指向 beacon_ies 或 proberesp_ies 的指针,具体取决于是否已收到探测响应帧。它始终为非
NULL
。beacon_ies
来自最后信标帧的信息元素(实现说明:如果设置了 hidden_beacon_bss,则此结构不拥有 beacon_ies,但它们只是指向 hidden_beacon_bss 结构中的那些的指针)
proberesp_ies
来自最后探测响应帧的信息元素
hidden_beacon_bss
如果此 BSS 结构表示来自 BSS 的探测响应,该 BSS 在其信标中隐藏了 SSID,则这指向保存信标数据的 BSS 结构。当然,beacon_ies 仍然有效,并且在这种情况下指向与 hidden_beacon_bss->beacon_ies 相同的数据。
transmitted_bss
指向已传输 BSS 的指针,如果这是一个非传输 BSS(多 BSSID 支持)
nontrans_list
如果这是一个已传输 BSS(多 BSSID 支持),则非传输 BSS 列表
signal
信号强度值(类型取决于 wiphy 的 signal_type)
ts_boottime
自启动以来的最后 BSS 更新的时间戳(以纳秒为单位)
beacon_interval
来自帧的信标间隔
capability
主机字节顺序的功能字段
bssid
BSS 的 BSSID
chains
chain_signal 中填充值的位掩码。
chain_signal
最后接收的 BSS 的每个链信号强度(以 dBm 为单位)。
proberesp_ecsa_stuck
ECSA 元素卡在探测响应帧中,无法依赖它具有有效数据
bssid_index
在多个 BSS 集中的索引
max_bssid_indicator
BSS 集中成员的最大数量
use_for
此 BSS 的可能用途的位图,请参阅
enum nl80211_bss_use_for
cannot_use_reasons
如果设置了 restrict_use 且 use_for 为零(空),则无法连接的原因(位图);如果未指定原因,则可能为 0;请参阅
enum nl80211_bss_cannot_use_reasons
priv
驱动程序使用的私有区域,至少有 wiphy->bss_priv_size 个字节
描述
此结构描述了 BSS(也可能是网状网络),用于扫描结果等。
-
const u8 *ieee80211_bss_get_ie(struct cfg80211_bss *bss, u8 id)¶
查找具有给定 ID 的 IE
参数
struct cfg80211_bss *bss
要搜索的 bss
u8 id
元素 ID
描述
请注意,返回值是一个 RCU 保护的指针,因此调用此函数时必须持有 rcu_read_lock()
。
Return
NULL
如果未找到。
-
const u8 *cfg80211_find_ie(u8 eid, const u8 *ies, int len)¶
在数据中查找信息元素
参数
u8 eid
元素 ID
const u8 *ies
由 IE 组成的数据
int len
数据长度
Return
如果找不到元素 ID 或者元素无效(声明比给定数据长),则为 NULL
,或者指向所请求元素的第一个字节的指针,即包含元素 ID 的字节。
注意
除了必须适合给定的数据之外,没有对元素长度进行检查。
-
void cfg80211_scan_done(struct cfg80211_scan_request *request, struct cfg80211_scan_info *info)¶
通知扫描已完成
参数
struct cfg80211_scan_request *request
相应的扫描请求
struct cfg80211_scan_info *info
有关已完成扫描的信息
-
struct cfg80211_bss *cfg80211_inform_bss_frame_data(struct wiphy *wiphy, struct cfg80211_inform_bss *data, struct ieee80211_mgmt *mgmt, size_t len, gfp_t gfp)¶
通知 cfg80211 收到的 BSS 帧
参数
struct wiphy *wiphy
报告 BSS 的 wiphy
struct cfg80211_inform_bss *data
BSS 元数据
struct ieee80211_mgmt *mgmt
管理帧(探测响应或信标)
size_t len
管理帧的长度
gfp_t gfp
上下文标志
描述
这会通知 cfg80211 找到了 BSS 信息,并且应该更新/添加 BSS。
Return
引用的结构,必须使用 cfg80211_put_bss() 释放!或出错时为 NULL
。
-
struct cfg80211_bss *cfg80211_inform_bss_data(struct wiphy *wiphy, struct cfg80211_inform_bss *data, enum cfg80211_bss_frame_type ftype, const u8 *bssid, u64 tsf, u16 capability, u16 beacon_interval, const u8 *ie, size_t ielen, gfp_t gfp)¶
通知 cfg80211 新的 BSS
参数
struct wiphy *wiphy
报告 BSS 的 wiphy
struct cfg80211_inform_bss *data
BSS 元数据
enum cfg80211_bss_frame_type ftype
帧类型(如果已知)
const u8 *bssid
BSS 的 BSSID
u64 tsf
对等方在信标/探测响应中发送的 TSF(或 0)
u16 capability
对等方发送的功能字段
u16 beacon_interval
对等方公布的信标间隔
const u8 *ie
对等方发送的其他 IE
size_t ielen
其他 IE 的长度
gfp_t gfp
上下文标志
描述
这会通知 cfg80211 找到了 BSS 信息,并且应该更新/添加 BSS。
Return
引用的结构,必须使用 cfg80211_put_bss() 释放!或出错时为 NULL
。
-
void cfg80211_unlink_bss(struct wiphy *wiphy, struct cfg80211_bss *bss)¶
从内部数据结构中取消链接 BSS
参数
struct wiphy *wiphy
wiphy
struct cfg80211_bss *bss
要删除的 bss
描述
此函数从内部数据结构中删除给定的 BSS,从而使其不再显示在扫描结果等中。当您检测到 BSS 消失时,请使用此函数。通常 BSS 也会超时,因此根本不需要使用此函数。
实用函数¶
cfg80211 提供了许多可能有用的实用函数。
-
int ieee80211_channel_to_frequency(int chan, enum nl80211_band band)¶
将信道号转换为频率
参数
int chan
信道号
enum nl80211_band band
由于信道号重叠而需要的频段
Return
相应的频率(以 MHz 为单位),如果转换失败,则为 0。
-
int ieee80211_frequency_to_channel(int freq)¶
将频率转换为信道号
参数
int freq
中心频率,以 MHz 为单位
Return
相应的信道,如果转换失败,则为 0。
-
struct ieee80211_channel *ieee80211_get_channel(struct wiphy *wiphy, int freq)¶
从 wiphy 获取指定频率的信道结构
-
const struct ieee80211_rate *ieee80211_get_response_rate(struct ieee80211_supported_band *sband, u32 basic_rates, int bitrate)¶
获取给定速率的基本速率
参数
struct ieee80211_supported_band *sband
要在其中查找速率的频段
u32 basic_rates
基本速率的位图
int bitrate
要查找基本速率的比特率
Return
与给定比特率相对应的基本速率,即基本速率图中包含的下一个较低的比特率,对于此函数,给定为频段比特率表中速率索引的位图。
-
struct ieee80211_radiotap_iterator¶
跟踪遍历当前 radiotap 参数
定义:
struct ieee80211_radiotap_iterator {
struct ieee80211_radiotap_header *_rtheader;
const struct ieee80211_radiotap_vendor_namespaces *_vns;
const struct ieee80211_radiotap_namespace *current_namespace;
unsigned char *_arg, *_next_ns_data;
__le32 *_next_bitmap;
unsigned char *this_arg;
int this_arg_index;
int this_arg_size;
int is_radiotap_ns;
int _max_length;
int _arg_index;
uint32_t _bitmap_shifter;
int _reset_on_ext;
};
成员
_rtheader
指向我们正在遍历的 radiotap 标头的指针
_vns
供应商命名空间定义
current_namespace
指向当前命名空间定义的指针(或者如果当前命名空间未知,则内部为
NULL
)_arg
下一个参数指针
_next_ns_data
下一个命名空间数据的开头
_next_bitmap
指向下一个当前 u32 的内部指针
this_arg
指向当前 radiotap 参数的指针;它在每次调用 ieee80211_radiotap_iterator_next() 之后有效,也在 ieee80211_radiotap_iterator_init() 之后有效,其中它将指向实际数据部分的开头
this_arg_index
当前参数的索引,在每次成功调用 ieee80211_radiotap_iterator_next() 之后有效
this_arg_size
当前参数的长度,为了方便
is_radiotap_ns
指示当前命名空间是否为默认 radiotap 命名空间
_max_length
radiotap 标头的长度(以 CPU 字节顺序)
_arg_index
下一个参数索引
_bitmap_shifter
当前 u32 位图的内部移位器,b0 设置 == 参数存在
_reset_on_ext
内部;当转到下一个位图字时,将参数索引重置为 0
描述
描述 radiotap 解析器状态。带有下划线前缀的字段不得被解析器的用户使用,只能在解析器内部使用。
参数
const struct sk_buff *skb
帧
描述
给定一个 skb,其数据指针处有一个原始 802.11 标头,此函数返回 802.11 标头长度。
Return
802.11 标头长度(以字节为单位,不包括加密标头)。或者,如果 sk_buff 中的数据太短,无法包含有效的 802.11 标头,则为 0。
-
unsigned int ieee80211_hdrlen(__le16 fc)¶
从帧控制获取标头长度(以字节为单位)
参数
__le16 fc
小端格式的帧控制字段
Return
标头长度(以字节为单位)。
数据路径助手¶
除了通用实用程序外,cfg80211 还提供了一些函数,可以帮助实现未在设备上执行 802.11/802.3 转换的设备的数据路径。
-
int ieee80211_data_to_8023(struct sk_buff *skb, const u8 *addr, enum nl80211_iftype iftype)¶
将 802.11 数据帧转换为 802.3
参数
struct sk_buff *skb
802.11 数据帧
const u8 *addr
设备 MAC 地址
enum nl80211_iftype iftype
虚拟接口类型
Return
成功时为 0。出错时为非零。
-
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)¶
解码 IEEE 802.11n A-MSDU 帧
参数
struct sk_buff *skb
没有任何标头的输入 A-MSDU 帧。
struct sk_buff_head *list
802.3 帧的输出列表。它必须由调用方分配和初始化。
const u8 *addr
设备 MAC 地址。
enum nl80211_iftype iftype
设备接口类型。
const unsigned int extra_headroom
list 中 SKB 的硬件额外净空。
const u8 *check_da
要在内部以太网标头中检查的 DA,或者为 NULL
const u8 *check_sa
要在内部以太网标头中检查的 SA,或者为 NULL
u8 mesh_control
请参阅 ieee80211_is_valid_amsdu 中的 mesh_hdr
描述
解码 IEEE 802.11 A-MSDU 并将其转换为 802.3 帧列表。如果解码失败,则 list 将为空。skb 必须在传入此处之前完全没有标头;它在此函数中被释放。
-
unsigned int cfg80211_classify8021d(struct sk_buff *skb, struct cfg80211_qos_map *qos_map)¶
确定数据帧的 802.1p/1d 标签
参数
struct sk_buff *skb
数据帧
struct cfg80211_qos_map *qos_map
互通 QoS 映射或如果未使用则为
NULL
Return
802.1p/1d 标签。
法规实施基础设施¶
待办事项
参数
struct wiphy *wiphy
提供提示的无线设备(仅用于报告冲突)
const char *alpha2
驱动程序声称其管制域应位于的 ISO/IEC 3166 alpha2。如果设置了 rd,则应为 NULL。请注意,如果将其设置为 NULL,您仍然应该将 rd->alpha2 设置为某个接受的 alpha2。
描述
无线驱动程序可以使用此函数向无线核心提示它认为应该是当前的管制域,方法是提供一个它知道其管制域应位于的 ISO/IEC 3166 alpha2 国家/地区代码,或提供一个完全构建的管制域。如果驱动程序提供 ISO/IEC 3166 alpha2,则将查询用户空间以获取相应国家/地区的管制域结构。
wiphy 必须在此调用之前已注册到 cfg80211。对于 cfg80211 驱动程序,这意味着您必须首先使用 wiphy_register()
,对于 mac80211 驱动程序,您必须首先使用 ieee80211_register_hw()
。
驱动程序应检查返回值,可能会收到 -ENOMEM。
Return
成功时返回 0。 -ENOMEM。
-
void wiphy_apply_custom_regulatory(struct wiphy *wiphy, const struct ieee80211_regdomain *regd)¶
应用自定义驱动程序管制域
参数
struct wiphy *wiphy
我们希望在其上处理管制域的无线设备
const struct ieee80211_regdomain *regd
用于此 wiphy 的自定义管制域
描述
驱动程序有时可能具有不适用于特定国家/地区的自定义管制域。驱动程序可以使用此功能来应用此类自定义管制域。必须在 wiphy 注册之前调用此例程。自定义管制域将完全受到信任,因此以前的默认通道设置将被忽略。如果在管制域中找不到通道的规则,则该通道将被禁用。对此 wiphy 使用此功能的驱动程序还应设置 wiphy 标志 REGULATORY_CUSTOM_REG,否则 cfg80211 将为调用此帮助程序的 wiphy 设置该标志。
参数
struct wiphy *wiphy
我们希望处理此规则的 wiphy
u32 center_freq
我们希望获取其管制信息的频率(以 KHz 为单位)
描述
使用此函数获取给定无线设备上特定频率的管制规则。如果设备有它想要遵循的特定管制域,除非已收到并处理了国家/地区 IE,否则我们会尊重该管制域。
Return
一个有效的指针,或者,当发生错误时,例如如果找不到规则,则返回值使用 ERR_PTR()
进行编码。使用 IS_ERR()
进行检查,使用 PTR_ERR()
获取数字返回值。如果我们确定给定的 center_freq 甚至没有 center_freq 频段内的频率范围的管制规则,则数字返回值将为 -ERANGE。有关我们当前频段定义的 freq_in_rule_band() - 这纯粹是主观的,现在是 802.11 特定的。
RFkill 集成¶
cfg80211 中的 RFkill 集成对于驱动程序来说几乎是不可见的,因为 cfg80211 会自动为其知道的每个无线设备注册一个 rfkill 实例。软杀死也会转换为断开连接并关闭所有接口。当所有接口都关闭时,预计驱动程序会关闭设备。
但是,设备可能具有硬 RFkill 线,在这种情况下,它们还需要通过 cfg80211 与 rfkill 子系统交互。它们可以使用此处记录的几个帮助程序函数来做到这一点。
参数
struct wiphy *wiphy
wiphy
参数
struct wiphy *wiphy
wiphy
测试模式¶
测试模式是一组实用程序函数,允许驱动程序与特定于驱动程序的工具交互,以帮助(例如)工厂编程。
本章介绍驱动程序如何与其交互。有关更多信息,请参见 nl80211 书中有关它的章节。
参数
struct wiphy *wiphy
wiphy
int approxlen
将放入 skb 中的数据长度的上限
描述
此函数分配并预填充一个 skb 以回复测试模式命令。由于它是用于回复的,因此在 testmode_cmd 操作之外调用它无效。
返回的 skb 预填充了 wiphy 索引,并以一种方式设置,即放入 skb 中的任何数据(使用 skb_put()
、nla_put() 或类似方法)最终将位于 NL80211_ATTR_TESTDATA
属性中,因此需要对 skb 执行的所有操作都是为相应的用户空间工具添加数据,该工具可以从测试数据属性中读取该数据。您不得以任何其他方式修改 skb。
完成后,使用 skb 调用 cfg80211_testmode_reply()
,并将它的错误代码作为 testmode_cmd 操作的结果返回。
Return
分配并预填充的 skb。如果发生任何错误,则为 NULL
。
参数
struct sk_buff *skb
skb 必须使用
cfg80211_testmode_alloc_reply_skb()
分配
描述
由于调用此函数通常是在从 testmode_cmd 返回之前的最后一件事,因此您应该返回错误代码。请注意,此函数会消耗 skb,而不管返回值如何。
Return
错误代码或成功时返回 0。
-
struct sk_buff *cfg80211_testmode_alloc_event_skb(struct wiphy *wiphy, int approxlen, gfp_t gfp)¶
分配测试模式事件
参数
struct wiphy *wiphy
wiphy
int approxlen
将放入 skb 中的数据长度的上限
gfp_t gfp
分配标志
描述
此函数为测试模式多播组上的事件分配并预填充一个 skb。
返回的 skb 的设置方式与 cfg80211_testmode_alloc_reply_skb()
相同,但为事件准备的。与那里一样,您应该简单地向其中添加数据,这些数据随后将最终出现在 NL80211_ATTR_TESTDATA
属性中。同样,您不得以任何其他方式修改 skb。
完成填充 skb 后,使用 skb 调用 cfg80211_testmode_event()
以发送事件。
Return
分配并预填充的 skb。如果发生任何错误,则为 NULL
。
参数
struct sk_buff *skb
skb 必须使用
cfg80211_testmode_alloc_event_skb()
分配gfp_t gfp
分配标志
描述
此函数发送给定的 skb,该 skb 必须由 cfg80211_testmode_alloc_event_skb()
分配,作为事件。它总是消耗它。