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_valuehw_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 能夠在其中工作的頻段。

void wiphy_read_of_freq_limits(struct wiphy *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 中設定,則組合指的是當前在該無線電上活動的介面的組合。

  1. 允許 #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,
    };
    
  2. 允許 #{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,
    };
    
  3. 允許 #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_SHORTNL80211_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_CONNECTNL80211_CMD_ASSOCIATENL80211_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() 引數確定)

void *wiphy_priv(struct wiphy *wiphy)

從 wiphy 返回 priv

引數

struct wiphy *wiphy

要返回其 priv 指標的 wiphy

Return

wiphy 的 priv。

struct wiphy *priv_to_wiphy(void *priv)

返回包含 priv 的 wiphy

引數

void *priv

先前由 wiphy_priv 返回的指標

Return

priv 的 wiphy。

void set_wiphy_dev(struct wiphy *wiphy, struct device *dev)

設定 wiphy 的裝置指標

引數

struct wiphy *wiphy

要繫結其裝置的 wiphy

struct device *dev

要將其作為父項的裝置

struct device *wiphy_dev(struct wiphy *wiphy)

獲取 wiphy dev 指標

引數

struct wiphy *wiphy

要查詢其裝置結構的 wiphy

Return

wiphy 的 dev。

const char *wiphy_name(const struct wiphy *wiphy)

獲取 wiphy 名稱

引數

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,才能正常執行。

int wiphy_register(struct wiphy *wiphy)

向 cfg80211 註冊 wiphy

引數

struct wiphy *wiphy

要註冊的 wiphy。

Return

非負 wiphy 索引或負錯誤程式碼。

void wiphy_unregister(struct wiphy *wiphy)

從 cfg80211 取消註冊 wiphy

引數

struct wiphy *wiphy

要取消註冊的 wiphy。

描述

在此呼叫之後,不能再使用此 priv 指標發出請求,但該呼叫可能會休眠以等待正在處理的未完成請求。

void wiphy_free(struct wiphy *wiphy)

釋放 wiphy

引數

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

此裝置的地址,僅當 netdevNULL 時有效

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 apclient

{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_signalchain_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_idmld_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_forNL80211_BSS_USE_FOR_NORMAL

use_for

此 BSS 的可能用途的點陣圖,請參閱 enum nl80211_bss_use_for

cannot_use_reasons

如果設定了 restrict_useuse_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_useuse_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

從內部資料結構中取消連結 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 獲取指定頻率的通道結構

引數

struct wiphy *wiphy

要獲取通道的 struct wiphy

int freq

通道的中心頻率(以 MHz 為單位)

Return

來自 wiphyfreq 的通道結構。

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 解析器狀態。帶有下劃線字首的欄位不得被解析器的使用者使用,只能在解析器內部使用。

unsigned int ieee80211_get_hdrlen_from_skb(const struct sk_buff *skb)

從資料獲取標頭長度

引數

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 標籤。

法規實施基礎設施

待辦事項

int regulatory_hint(struct wiphy *wiphy, const char *alpha2)

驅動程式向無線核心提示一個管制域

引數

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 設定該標誌。

const struct ieee80211_reg_rule *freq_reg_info(struct wiphy *wiphy, u32 center_freq)

獲取給定頻率的管制資訊

引數

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 子系統互動。它們可以使用此處記錄的幾個幫助程式函式來做到這一點。

void wiphy_rfkill_start_polling(struct wiphy *wiphy)

開始輪詢 rfkill

引數

struct wiphy *wiphy

wiphy

void wiphy_rfkill_stop_polling(struct wiphy *wiphy)

停止輪詢 rfkill

引數

struct wiphy *wiphy

wiphy

測試模式

測試模式是一組實用程式函式,允許驅動程式與特定於驅動程式的工具互動,以幫助(例如)工廠程式設計。

本章介紹驅動程式如何與其互動。有關更多資訊,請參見 nl80211 書中有關它的章節。

struct sk_buff *cfg80211_testmode_alloc_reply_skb(struct wiphy *wiphy, int approxlen)

分配測試模式回覆

引數

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

int cfg80211_testmode_reply(struct sk_buff *skb)

傳送回覆 skb

引數

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

void cfg80211_testmode_event(struct sk_buff *skb, gfp_t gfp)

傳送事件

引數

struct sk_buff *skb

skb 必須使用 cfg80211_testmode_alloc_event_skb() 分配

gfp_t gfp

分配標誌

描述

此函式傳送給定的 skb,該 skb 必須由 cfg80211_testmode_alloc_event_skb() 分配,作為事件。它總是消耗它。