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_ONLYIEEE80211_CHAN_IR_CONCURRENT請參閱
NL80211_FREQUENCY_ATTR_IR_CONCURRENTIEEE80211_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_CONCURRENTIEEE80211_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_msDFS 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_valuedriver/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_supportedSTA 是否支援 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。
bandthe band this structure represents
n_channelschannels 中的通道數
n_bitratesbitrates 中的位元率數
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_SHORTwiphy->retry_short 已更改
WIPHY_PARAM_RETRY_LONGwiphy->retry_long 已更改
WIPHY_PARAM_FRAG_THRESHOLDwiphy->frag_threshold 已更改
WIPHY_PARAM_RTS_THRESHOLDwiphy->rts_threshold 已更改
WIPHY_PARAM_COVERAGE_CLASS覆蓋範圍等級已更改
WIPHY_PARAM_DYN_ACK已啟用 dynack
WIPHY_PARAM_TXQ_LIMITTXQ 資料包限制已更改
WIPHY_PARAM_TXQ_MEMORY_LIMITTXQ 記憶體限制已更改
WIPHY_PARAM_TXQ_QUANTUMTXQ 排程程式量子
-
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_combinationsiface_combinations 陣列中的條目數。
software_iftypes軟體介面型別的位掩碼,由於它們純粹在 SW 中管理,因此不受任何限制。
n_addressesaddresses 中的地址數。
interface_modes對此 wiphy 有效的介面型別的位掩碼,必須由驅動程式設定
max_acl_mac_addrs裝置支援用於 ACL 的最大 MAC 地址數。
flagswiphy 標誌,請參閱
enum wiphy_flagsregulatory_flagswiphy 法規標誌,請參閱
enum ieee80211_regulatory_flagsfeatures通告給 nl80211 的功能,請參閱
enum nl80211_feature_flags。ext_features通告給 nl80211 的擴充套件功能,請參閱
enum nl80211_ext_feature_index。ap_sme_capaAP 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_thresholdRTS 閾值 (dot11RTSThreshold);-1 = 停用 RTS/CTS
coverage_class當前覆蓋範圍等級
fw_versionethtool 報告的韌體版本
hw_versionethtool 報告的硬體版本
wowlanWoWLAN 支援資訊
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_staAP 模式下支援的最大關聯站點數(包括 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_capaSAR 控制功能
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,可能為
NULLidentifier(私有)用於在 nl80211 中標識此無線裝置的識別符號(如果它沒有 netdev)
mgmt_registrations管理幀的註冊列表
mgmt_registrations_need_updatemgmt 註冊已更新,需要將更新傳播到驅動程式
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_msCAC 時間(毫秒)
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 *wiphywiphy
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_CHANGEDuse_4addr使用 4 地址幀
macaddr用於此虛擬介面的地址。如果此引數設定為零地址,則驅動程式可以根據需要確定地址。僅當驅動程式啟用
NL80211_FEATURE_MAC_ON_CREATE標誌時,此功能才完全受支援。其他驅動程式可能支援使用指定 MAC 建立 * 僅 p2p 裝置。vht_mumimo_groupsMU-MIMO groupID,用於監視屬於該 MU-MIMO groupID 的 MU-MIMO 資料包;如果未更改,則為
NULLvht_mumimo_follow_addrMU-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金鑰材料
seqTKIP 和 CCMP 金鑰的序列計數器 (IV/PN),僅與 get_key() 回撥一起使用,必須採用小端序,長度由 seq_len 給出。
key_len金鑰材料的長度
seq_lenseq 的長度。
vlan_idVLAN 組金鑰的 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此調查記錄報告的通道,對於報告全域性統計資訊的單個記錄,可能為
NULLtime無線電開啟的時間量(毫秒)(在通道上)
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_pairwiseAP 支援的單播密碼的數量
ciphers_pairwise單播金鑰密碼套件
n_akm_suitesakm_suites
akm_suitesAKM 套件的數量
control_port使用者空間是否控制 IEEE 802.1X 埠,即,設定/清除
NL80211_STA_FLAG_AUTHORIZED。如果為 true,則驅動程式必須假定埠未經授權,直到使用者空間授權。否則,埠預設標記為已授權。control_port_ethertype即使在未經授權的埠上,也應允許控制埠協議
control_port_no_encryptTRUE 以防止加密控制埠協議幀。
control_port_over_nl80211如果使用者空間希望透過 NL80211 而不是網路介面交換控制埠幀,則為 TRUE。
control_port_no_preauth停用 mac80211 的 nl80211 控制埠上的預授權 rx
pskPSK(對於支援 4 向握手解除安裝的裝置)
sae_pwd用於 SAE 身份驗證的密碼(對於支援 SAE 解除安裝的裝置)
sae_pwd_lenSAE 密碼的長度(對於支援 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_idAP MLD 連結傳送此信標的連結 ID
head信標的頭部(TIM IE 之前),如果未更改,則為
NULLtail信標的尾部(TIM IE 之後),如果未更改,則為
NULLbeacon_ies要新增到信標幀中的額外資訊元素,如果未新增,則為
NULLproberesp_ies要新增到探測響應幀中的額外資訊元素,如果未新增,則為
NULLassocresp_ies要新增到(重新)關聯響應幀中的額外資訊元素,如果未新增,則為
NULLprobe_resp探測響應模板(僅限 AP 模式)
lci測量報告元素內容,以測量令牌開頭(測量型別 8)
civicloc測量報告元素內容,以測量令牌開頭(測量型別 11)
mbssid_ies多個 BSSID 元素
rnr_ies縮減的鄰居報告元素
ftm_responder啟用 FTM 響應程式功能; -1 表示無更改(也意味著 LCI/公民位置資料無更改)
head_lenhead 的長度
tail_lentail 的長度
beacon_ies_lenbeacon_ies 的長度(以八位位元組為單位)
proberesp_ies_lenproberesp_ies 的長度(以八位位元組為單位)
assocresp_ies_lenassocresp_ies 的長度(以八位位元組為單位)
probe_resp_len探測響應模板 (probe_resp) 的長度
lci_lenLCI 資料長度
civicloc_len公民位置資料長度
he_bss_colorBSS 顏色設定
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_periodDTIM 週期
ssid要在 BSS 中使用的 SSID(注意:如果使用者空間未提供,則可能為
NULL)ssid_lenssid 的長度
hidden_ssid是否在信標/探測響應幀中隱藏 SSID
crypto加密設定
privacyBSS 使用隱私
auth_type身份驗證型別(演算法)
inactivity_timeout確定站點不活動的時間(以秒為單位)。
p2p_ctwindowP2P CT 視窗
p2p_opp_psP2P 機會性 PS
acl驅動程式使用的 ACL 配置,該驅動程式支援基於 MAC 地址的訪問控制
pbss如果設定,則啟動為 PCP 而不是 AP。與 DMG 網路相關。
beacon_rate用於信標的位元率
ht_capHT 功能(如果未啟用 HT,則為
NULL)vht_capVHT 功能(如果未啟用 VHT,則為
NULL)he_capHE 功能(如果未啟用 HE,則為
NULL)he_operHE 操作 IE(如果未啟用 HE,則為
NULL)eht_capEHT 功能(如果未啟用 EHT,則為
NULL)eht_operEHT 操作 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_pdOBSS 資料包檢測設定
fils_discoveryFILS 發現傳輸引數
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_masklisten_interval偵聽間隔,或 -1 表示無更改
aidAID,或零表示無更改
vlan_id站點的 VLAN ID(如果非零)
peer_aidMesh 對等 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_channelsIEEE 802.11 格式的支援通道
supported_channels_len支援的通道數
supported_oper_classesIEEE 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_MCSmcs 欄位填充了 HT MCS
RATE_INFO_FLAGS_VHT_MCSmcs 欄位填充了 VHT MCS
RATE_INFO_FLAGS_SHORT_GI400ns 保護間隔
RATE_INFO_FLAGS_DMG60GHz MCS
RATE_INFO_FLAGS_HE_MCSHE MCS 資訊
RATE_INFO_FLAGS_EDMGEDMG 模式下的 60GHz MCS
RATE_INFO_FLAGS_EXTENDED_SC_DMG60GHz 擴充套件 SC MCS
RATE_INFO_FLAGS_EHT_MCSEHT MCS 資訊
RATE_INFO_FLAGS_S1G_MCSMCS 欄位填充了 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的標誌位域legacy802.11abg 的位元率為 100kbit/s
mcs如果結構描述 HT/VHT/HE/EHT/S1G 速率,則為 mcs 索引
nss流數(僅 VHT 和 HE)
bw頻寬(來自
enum rate_info_bw)he_giHE 保護間隔(來自
enum nl80211_he_gi)he_dcmHE DCM 值
he_ru_allocHE RU 分配(來自
enum nl80211_he_ru_alloc,僅當 bw 為RATE_INFO_BW_HE_RU時有效)n_bonded_ch對於 EDMG,繫結通道的數量 (1-4)
eht_giEHT 保護間隔(來自
enum nl80211_eht_gi)eht_ru_allocEHT 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_ 表示。
chainschain_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站點標誌掩碼和值
generationnl80211 轉儲的生成號。每當站點列表發生更改時,此數字應增加,即當新增或刪除站點時,以便使用者空間可以判斷它是否獲得了連貫的快照。
beacon_loss_count信標丟失事件觸發的次數。
assoc_req_ies來自(重新)關聯請求的 IE。這僅在 AP 模式下與不使用使用者空間 MLME/SME 實現的驅動程式一起使用。該資訊提供給
cfg80211_new_sta()呼叫,以將 IE 通知使用者空間。assoc_req_ies_lenassoc_req_ies 緩衝區長度(以八位位元組為單位)。
t_offset站點相對於此主機的時差。
llidMesh 本地鏈路 id
plidMesh 對等鏈路 id
plink_statemesh peer link state
connected_to_gate如果 Mesh STA 有通往 Mesh 閘道器的路徑,則為 true
connected_to_as如果 Mesh STA 有通往身份驗證伺服器的路徑,則為 true
airtime_link_metricMesh 空中鏈路度量。
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_lenassoc_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_QLENframe_qlen 已填充
MPATH_INFO_SNsn 已填充
MPATH_INFO_METRICmetric 已填充
MPATH_INFO_EXPTIMEexptime 已填充
MPATH_INFO_DISCOVERY_TIMEOUTdiscovery_timeout 已填充
MPATH_INFO_DISCOVERY_RETRIESdiscovery_retries 已填充
MPATH_INFO_FLAGSflags 已填充
MPATH_INFO_HOP_COUNThop_count 已填充
MPATH_INFO_PATH_CHANGEpath_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_timeoutMesh 路徑發現總超時時間(毫秒)
discovery_retriesMesh 路徑發現重試次數
flags來自
enum mesh_path_flags的 Mesh 路徑標誌hop_count到目標的跳數
path_change_count到目標的路徑更改總數
generationnl80211 轉儲的生成號。每當 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_idlink_id,或 -1 表示非 MLD
use_cts_prot是否使用 CTS 保護(0 = 否,1 = 是,-1 = 不更改)
use_short_preamble是否允許使用短前導碼(0 = 否,1 = 是,-1 = 不更改)
use_short_slot_time是否允許使用短時隙時間(0 = 否,1 = 是,-1 = 不更改)
basic_ratesIEEE 802.11 格式的基本速率(或 NULL 表示不更改)
basic_rates_len基本速率數
ap_isolate不轉發已連線站點之間的 資料包(0 = 否,1 = 是,-1 = 不更改)
ht_opmodeHT 操作模式(u16 = opmode,-1 = 不更改)
p2p_ctwindowP2P CT 視窗(-1 = 不更改)
p2p_opp_psP2P 機會性 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;
};
成員
acAC 識別符號
txop最大突發時間,以 32 微秒為單位,0 表示停用
cwmin最小爭用視窗 [範圍為 1..32767 的 2^n-1 形式的值]
cwmax最大爭用視窗 [範圍為 1..32767 的 2^n-1 形式的值]
aifs仲裁幀間間隔 [0..255]
link_idlink_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 或
NULLie_lenie 緩衝區長度(以八位位元組為單位)
supported_selectors應假定站點支援的選擇器列表。如果設定為
NULL,則必須假定支援 SAE_H2E。supported_selectors_lensupported_selectors 的長度(以八位位元組為單位)。
auth_type身份驗證型別(演算法)
key用於共享金鑰身份驗證的 WEP 金鑰
key_len用於共享金鑰身份驗證的 WEP 金鑰的長度
key_idx用於共享金鑰身份驗證的 WEP 金鑰的索引
auth_data身份驗證幀中的欄位和元素。這包含身份驗證幀正文(非 IE 和 IE 資料),不包括身份驗證演算法編號,即從身份驗證事務序列號欄位開始。
auth_data_lenauth_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 或
NULLprev_bssid先前的 BSSID,如果不是
NULL,則使用重新關聯幀。這用於指示在 ESS 中重新關聯的請求,而不是與 ESS 進行初始關聯的請求。包含此資訊時,它將設定為當前關聯的 BSSID,即 Reassociation Request 幀的 Current AP address 欄位中包含的值。ie_lenie 緩衝區長度(以八位位元組為單位)
crypto加密設定
use_mfp在此關聯中使用管理幀保護 (IEEE 802.11w)
flags請參閱
enum cfg80211_assoc_req_flagssupported_selectorsIEEE 802.11 格式的支援的 BSS 選擇器(或
NULL表示不更改)。如果為NULL,則應假定支援 SAE_H2E。supported_selectors_len支援的 BSS 選擇器的數量
ht_capaHT 功能覆蓋。ht_capa_mask 中設定的值將在 ht_capa 中使用。不支援的值將被忽略。
ht_capa_mask要使用的 ht_capa 的位。
vht_capaVHT 功能覆蓋
vht_capa_maskVHT 功能掩碼,指示要使用的欄位
fils_kek用於保護(重新)關聯請求/響應幀的 FILS KEK 或
NULL(如果未使用 FILS)。fils_kek_lenfils_kek 的長度(以八位位元組為單位)
fils_noncesFILS 隨機數(AAD 的一部分),用於保護(重新)關聯請求/響應幀或
NULL(如果未使用 FILS)。此欄位以 16 個八位位元組的 STA 隨機數開頭,後跟 16 個八位位元組的 AP 隨機數。s1g_capaS1G 功能覆蓋
s1g_capa_maskS1G 功能覆蓋掩碼
linksMLO 連線的每個鏈路的資訊
ap_mld_addrMLO 關聯請求的情況下的 AP MLD 地址,僅當 link_id >= 0 時有效
link_idMLO 連線的 >= 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 或
NULLie_lenie 緩衝區長度(以八位位元組為單位)
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 或
NULLie_lenie 緩衝區長度(以八位位元組為單位)
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;
};
成員
ssidSSID,將始終為非空。
bssid請求的固定 BSSID,可能為
NULL,如果設定,則不搜尋具有不同 BSSID 的 IBSS。chandef定義如果找不到要加入的其他 IBSS,則使用的通道
ie要包含在信標中的資訊元素
ssid_lenSSID 的長度,將始終為非零。
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_capaHT 功能覆蓋。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 的通道,用於初始連線,如果未指定,則為
NULLbssidAP BSSID,如果未指定,則為
NULL(基於掃描結果自動選擇)bssid_hint用於初始連線到 BSS 的建議 AP BSSID,如果未指定,則為
NULL。與 bssid 引數不同,如果驅動程式知道要使用的更好的 BSS,則允許忽略此 bssid_hint。ssidSSID
ssid_lenssid 的長度(以八位位元組為單位)
auth_type身份驗證型別(演算法)
ie關聯請求的 IE
ie_lenassoc_ie 的長度(以八位位元組為單位)
privacy指示是否應使用啟用隱私的 AP
mfp指示是否使用管理幀保護
crypto加密設定
key用於共享金鑰身份驗證的 WEP 金鑰
key_len用於共享金鑰身份驗證的 WEP 金鑰的長度
key_idx用於共享金鑰身份驗證的 WEP 金鑰的索引
flags請參閱
enum cfg80211_assoc_req_flagsbg_scan_period後臺掃描週期(以秒為單位),或 -1 表示使用預設值。
ht_capaHT 功能覆蓋。ht_capa_mask 中設定的值將在 ht_capa 中使用。不支援的值將被忽略。
ht_capa_mask要使用的 ht_capa 的位。
vht_capaVHT 功能覆蓋
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_usernameNAI 的 EAP 重新身份驗證協議 (ERP) 使用者名稱部分,如果未指定,則為
NULL。這用於構造 FILS 包裝的資料 IE。fils_erp_username_lenfils_erp_username 的長度(以八位位元組為單位)。
fils_erp_realmNAI 的 EAP 重新身份驗證協議 (ERP) 域部分,如果未指定,則為
NULL。這指定了 ER 伺服器的域名,用於構造 FILS 包裝的資料 IE。fils_erp_realm_lenfils_erp_realm 的長度(以八位位元組為單位)。
fils_erp_next_seq_numFILS ERP 訊息中要使用的下一個序列號。這也用於構造 FILS 包裝的資料 IE。
fils_erp_rrk用於在 FILS 中派生其他金鑰的 ERP 重新身份驗證根金鑰 (rRK),如果未指定,則為
NULL。fils_erp_rrk_lenfils_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;
};
成員
bssidAP 的 BSSID(可能為
NULL)。pmkid用於引用 PMKSA 的識別符號。
pmk由 pmkid 標識的 PMKSA 的 PMK。這由 FILS STA 用於金鑰派生。否則為
NULL。pmk_lenpmk 的長度。 pmk 的長度可能因用於生成此雜湊的演算法而異。
ssidSSID,用於在使用 FILS 快取識別符號時指定 PMKSA 有效的 ESS(可能為
NULL)。ssid_lenssid 的長度,以八位位元組為單位。
cache_id由 FILS AP 釋出的 2 位元組快取識別符號,用於標識 PMKSA 的範圍。 僅當 ssid_len 非零時有效(可能為
NULL)。pmk_lifetimePMKSA 的最長生存期(以秒為單位)(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);
};
成員
suspendwiphy 裝置需要被掛起。 變數 wow 將為
NULL或包含為裝置配置的已啟用的無線喚醒觸發器。resumewiphy 裝置需要被恢復
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 可能為
NULLtestmode_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_portTX 控制埠幀 (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_configTID 特定配置,可以是針對對等方或 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 *buf802.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 長度
filsFILS 連線響應引數。
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 *bssidAP 的 BSSID
struct cfg80211_bss *bssSTA 連線到的 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 *bssidAP 的 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 *bssidAP 的 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_lenIE 的長度
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 *devnetdev
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 cookiecfg80211_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;
};
成員
ssidSSID
ssid_lenssid 的長度
-
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_ssidsSSID 的數量
n_channels要掃描的通道總數
ie要新增到探測請求中的可選資訊元素或
NULLie_lenie 的長度(以八位位元組為單位)
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_params6 GHz 引數的數量
scan_6ghz_params6 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。chainschain_signal 中填充值的位掩碼。
chain_signal最後接收的 BSS 的每個鏈訊號強度(以 dBm 為單位)。
restrict_use限制使用,如果未設定,則假定 use_for 為
NL80211_BSS_USE_FOR_NORMAL。use_for此 BSS 的可能用途的點陣圖,請參閱
enum nl80211_bss_use_forcannot_use_reasons如果設定了 restrict_use 且 use_for 為零(空),則無法連線的原因(點陣圖);如果未指定原因,則可能為 0;請參閱
enum nl80211_bss_cannot_use_reasonsdrv_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主機位元組順序的功能欄位
bssidBSS 的 BSSID
chainschain_signal 中填充值的位掩碼。
chain_signal最後接收的 BSS 的每個鏈訊號強度(以 dBm 為單位)。
proberesp_ecsa_stuckECSA 元素卡在探測響應幀中,無法依賴它具有有效資料
bssid_index在多個 BSS 集中的索引
max_bssid_indicatorBSS 集中成員的最大數量
use_for此 BSS 的可能用途的點陣圖,請參閱
enum nl80211_bss_use_forcannot_use_reasons如果設定了 restrict_use 且 use_for 為零(空),則無法連線的原因(點陣圖);如果未指定原因,則可能為 0;請參閱
enum nl80211_bss_cannot_use_reasonspriv驅動程式使用的私有區域,至少有 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 *dataBSS 元資料
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 *dataBSS 元資料
enum cfg80211_bss_frame_type ftype幀型別(如果已知)
const u8 *bssidBSS 的 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 *wiphywiphy
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_lengthradiotap 標頭的長度(以 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 *skb802.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 *list802.3 幀的輸出列表。它必須由呼叫方分配和初始化。
const u8 *addr裝置 MAC 地址。
enum nl80211_iftype iftype裝置介面型別。
const unsigned int extra_headroomlist 中 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 *wiphywiphy
引數
struct wiphy *wiphywiphy
測試模式¶
測試模式是一組實用程式函式,允許驅動程式與特定於驅動程式的工具互動,以幫助(例如)工廠程式設計。
本章介紹驅動程式如何與其互動。有關更多資訊,請參見 nl80211 書中有關它的章節。
引數
struct wiphy *wiphywiphy
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 *skbskb 必須使用
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 *wiphywiphy
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 *skbskb 必須使用
cfg80211_testmode_alloc_event_skb()分配gfp_t gfp分配標誌
描述
此函式傳送給定的 skb,該 skb 必須由 cfg80211_testmode_alloc_event_skb() 分配,作為事件。它總是消耗它。