STRUCT WIPHY(9)
okay so, bestie, welcome to struct wiphy(9) β the manual page for struct wiphy, aka the wireless hardware description β¨ this thing is a whole mood, and weβre going member by member, no cap.
πΈ NAME πΈ
struct wiphy - wireless hardware description
β¨ SYNOPSIS β¨
hereβs the full struct, copied exactly because we do not mess with source, periodt:
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);
struct wiphy_radio_cfg *radio_cfg;
const struct ieee80211_regdomain *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_param_support;
u32 bss_select_support;
u8 nan_supported_bands;
struct wiphy_nan_capa nan_capa;
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[];
};
π§ Members π§
okay, member-by-member tour, part 1 energy, letβs go π«Ά
mtxβ mutex for the data (structures) of this device.perm_addrβ permanent MAC address of this device.addr_maskβ if the device supports multiple MAC addresses by masking, set this to a mask with variable bits set to1, e.g. if the last four bits are variable then set it to00-00-00-00-00-0f. The actual variable bits shall be determined by the interfaces added, with interfaces not matching the mask being rejected to be brought up.addressesβ if the device has more than one address, set this pointer to a list of addresses (6 bytes each). The first one will be used by default forperm_addr. In this case, the mask should be set to all-zeroes. In this case it is assumed that the device can handle the same number of arbitrary MAC addresses.mgmt_stypesβ bitmasks of frame subtypes that can be subscribed to or transmitted throughnl80211, points to an array indexed by interface type.iface_combinationsβ valid interface combinations array, should not list single interface types.n_iface_combinationsβ number of entries iniface_combinationsarray.software_iftypesβ bitmask of software interface types, these are not subject to any restrictions since they are purely managed in SW.n_addressesβ number of addresses inaddresses.interface_modesβ bitmask of interfaces types valid for this wiphy, must be set by driver.max_acl_mac_addrsβ maximum number of MAC addresses that the device supports for ACL.flagsβ wiphy flags, seeenum wiphy_flags.regulatory_flagsβ wiphy regulatory flags, seeenum ieee80211_regulatory_flags.featuresβ features advertised tonl80211, seeenum nl80211_feature_flags.ext_featuresβ extended features advertised tonl80211, seeenum nl80211_ext_feature_index.ap_sme_capaβ AP SME capabilities, flags fromenum nl80211_ap_sme_features.signal_typeβ signal type reported instruct cfg80211_bss.bss_priv_sizeβ each BSS struct has private data allocated with it, this variable determines its size.max_scan_ssidsβ maximum number of SSIDs the device can scan for in any given scan.max_sched_scan_reqsβ maximum number of scheduled scan requests that the device can run concurrently.max_sched_scan_ssidsβ maximum number of SSIDs the device can scan for in any given scheduled scan.max_match_setsβ maximum number of match sets the device can handle when performing a scheduled scan,0if filtering is not supported.max_scan_ie_lenβ maximum length of user-controlled IEs device can add to probe request frames transmitted during a scan, must not include fixed IEs like supported rates.max_sched_scan_ie_lenβ same asmax_scan_ie_len, but for scheduled scans.max_sched_scan_plansβ maximum number of scan plans (scan interval and number of iterations) for scheduled scan supported by the device.max_sched_scan_plan_intervalβ maximum interval (in seconds) for a single scan plan supported by the device.max_sched_scan_plan_iterationsβ maximum number of iterations for a single scan plan supported by the device.n_cipher_suitesβ number of supported cipher suites.cipher_suitesβ supported cipher suites.n_akm_suitesβ number of supported AKM suites.akm_suitesβ supported AKM suites. These are the default AKMs supported if the supported AKMs not advertized for a specific interface type iniftype_akm_suites.iftype_akm_suitesβ array of supported akm suites info per interface type. Note that the bits iniftypes_maskinside this structure cannot overlap (i.e. only one occurrence of each type is allowed across all instances ofiftype_akm_suites).num_iftype_akm_suitesβ number of interface types for which supported akm suites are specified separately.retry_shortβ Retry limit for short frames (dot11ShortRetryLimit).retry_longβ Retry limit for long frames (dot11LongRetryLimit).frag_thresholdβ Fragmentation threshold (dot11FragmentationThreshold);-1= fragmentation disabled, only odd values>= 256used.rts_thresholdβ RTS threshold (dot11RTSThreshold);-1= RTS/CTS disabled.coverage_classβ current coverage class.fw_versionβ firmware version for ethtool reporting.hw_versionβ hardware version for ethtool reporting.wowlanβ WoWLAN support information.wowlan_configβ current WoWLAN configuration; this should usually not be used since access to it is necessarily racy, use the parameter passed to the suspend operation instead.max_remain_on_channel_durationβ Maximum time a remain-on-channel operation may request, if implemented.max_num_pmkidsβ maximum number of PMKIDs supported by device.available_antennas_txβ bitmap of antennas which are available to be configured as TX antennas. Antenna configuration commands will be rejected unless this oravailable_antennas_rxis set.available_antennas_rxβ bitmap of antennas which are available to be configured as RX antennas. Antenna configuration commands will be rejected unless this oravailable_antennas_txis set.probe_resp_offloadβ Bitmap of supported protocols for probe response offloading. Seeenum nl80211_probe_resp_offload_support_attr. Only valid when the wiphy flagWIPHY_FLAG_AP_PROBE_RESP_OFFLOADis set.extended_capabilitiesβ extended capabilities supported by the driver, additional capabilities might be supported by userspace; these are the 802.11 extended capabilities ("Extended Capabilities element") and are in the same format as in the information element. See802.11-2012 8.4.2.29for the defined fields. These are the default extended capabilities to be used if the capabilities are not specified for a specific interface type iniftype_ext_capab.extended_capabilities_maskβ mask of the valid values.extended_capabilities_lenβ length of the extended capabilities.iftype_ext_capabβ array of extended capabilities per interface type.num_iftype_ext_capabβ number of interface types for which extended capabilities are specified separately.prividβ a pointer that drivers can use to figure out whether some random wiphy is actually theirs, like in global notifiers. your personal little name tag for the wiphy πbandsβ the info about all the bands/channels this device supports. literally the whole map of what it can do β¨reg_notifierβ the driver's regulatory notification callback. heads up: if your driver useswiphy_apply_custom_regulatory, then thereg_notifier's request can be passed asNULL. no cap.radio_cfgβ configuration of radios belonging to amuli-radiowiphy. this struct contains a list of all radio specific attributes and should be used only for multi-radio wiphy. don't be out here using it for single-radio setups bestie πregdβ the driver's regulatory domain, if one was requested via theregulatory_hintAPI. the driver can use this on thereg_notifierif it chooses to ignore future regulatory domain changes caused by other drivers. main character energy: you get to opt out of the drama π₯devβ the (virtual)struct devicefor this wiphy. the item in/sys/class/ieee80211/points to this. you need useset_wiphy_dev(see below). yes, actually β it's required.registeredβ protects->resumeand->suspendsysfs callbacks against unregister hardware. it's giving bodyguard for your sysfs callbacks π«Άdebugfsdirβ debugfs directory used for this wiphy (ieee80211/<wiphyname>). it will be renamed automatically on wiphy renames. iconic, it handles its own glow-up β¨ht_capa_mod_maskβ specify what ht_cap values can be over-ridden. if null, then none can be over-ridden.vht_capa_mod_maskβ specify what VHT capabilities can be over-ridden. if null, then none can be over-ridden.wdev_listβ the list of associated (virtual) interfaces. β οΈ this list must not be modified by the driver, but it can be read with RTNL/RCU protection. look but don't touch, fr fr._netβ the network namespace this wiphy currently lives in.wextβ wireless extension handlers.coalesceβ packet coalescing support information.vendor_commandsβ array of vendor commands supported by the hardware.vendor_eventsβ array of vendor events supported by the hardware.n_vendor_commandsβ number of vendor commands.n_vendor_eventsβ number of vendor events.max_ap_assoc_staβ maximum number of associated stations supported in AP mode (including P2P GO) or0to indicate no such limit is advertised. the driver is allowed to advertise a theoretical limit that it can reach in some cases, but may not always reach. so like, a vibe-based ceiling, not a promise πmax_num_csa_countersβ Number of supportedcsa_countersin beacons and probe responses. this value should be set if the driver wishes to limit the number of csa counters. Default (0) means infinite. no limits, just vibes πbss_param_supportβ bitmask indicating whichbss_parametersas defined instruct bss_parametersthe driver can actually handle in the.change_bsscallback. the bit positions are defined inenum wiphy_bss_param_flags.bss_select_supportβ bitmask indicating the BSS selection criteria supported by the driver in the.connectcallback. the bit position maps to the attribute indices defined inenum nl80211_bss_select_attr.nan_supported_bandsβ bands supported by the device in NAN mode, a bitmap ofenum nl80211_bandvalues. for instance, forNL80211_BAND_2GHZ, bit 0 would be set (i.e.BIT(NL80211_BAND_2GHZ)). iykyk π¦nan_capaβ NAN capabilities.txq_limitβ configuration of internal TX queue frame limit.txq_memory_limitβ configuration internal TX queue memory limit.txq_quantumβ configuration of internal TX queue scheduler quantum.tx_queue_lenβ allow setting transmit queue len for drivers not usingwake_tx_queue.support_mbssidβ can HW support association with nontransmitted AP.support_only_he_mbssidβ don't parse MBSSID elements if it is not HE AP, in order to avoid compatibility issues.support_mbssidmust be set for this to have any effect. πpmsr_capaβ peer measurement capabilities.tid_config_supportβ describes the per-TID config support that the device has.tid_config_support.peerβ bitmap of attributes (configurations) supported by the driver for each peer.tid_config_support.vifβ bitmap of attributes (configurations) supported by the driver for each vif.tid_config_support.max_retryβ maximum supported retry count for long/short retry configuration.max_data_retry_countβ maximum supported per TID retry count for configuration through theNL80211_TID_CONFIG_ATTR_RETRY_SHORTandNL80211_TID_CONFIG_ATTR_RETRY_LONGattributes.sar_capaβ SAR control capabilities.rfkillβ a pointer to therfkillstructure.mbssid_max_interfacesβ maximum number of interfaces supported by the driver in a multiple BSSID set. this field must be set to a non-zero value by the driver to advertise MBSSID support. no zero, no support, periodt πema_max_profile_periodicityβ maximum profile periodicity supported by the driver. setting this field to a non-zero value indicates that the driver supports enhanced multi-BSSID advertisements (EMA AP).max_num_akm_suitesβ maximum number of AKM suites allowed for configuration throughNL80211_CMD_CONNECT,NL80211_CMD_ASSOCIATEandNL80211_CMD_START_AP. set toNL80211_MAX_NR_AKM_SUITESif not set by driver. if set by driver, minimum allowed value isNL80211_MAX_NR_AKM_SUITESin order to avoid compatibility issues with legacy userspace and maximum allowed value isCFG80211_MAX_NUM_AKM_SUITES. boundaries bestie, respect them π§hw_timestamp_max_peersβ maximum number of peers that the driver supports enabling HW timestamping for concurrently. setting this field to a non-zero value indicates that the driver supports HW timestamping. a value ofCFG80211_HW_TIMESTAMP_ALL_PEERSindicates the driver supports enabling HW timestamping for all peers (i.e. no need to specify a mac address). everyone invited to the party πn_radioβ number of radios.radioβ radios belonging to this wiphy.privβ driver private data (sized according towiphy_newparameter).
π SEE ALSO π
okay so this section is literally the guest list of the whole party π
every single related page gets a shoutout here, and there areβ¦ a lot of them. no skipping, bestie β we're going through all of them, and they all live in the kernel file ./include/net/cfg80211.h. buckle up π
Introduction(9)Device registration(9)enum ieee80211_channel_flags(9)struct ieee80211_channel(9)enum ieee80211_rate_flags(9)enum ieee80211_bss_type(9)enum ieee80211_privacy(9)struct ieee80211_rate(9)struct ieee80211_he_obss_pd(9)struct cfg80211_he_bss_color(9)struct ieee80211_sta_ht_cap(9)struct ieee80211_sta_vht_cap(9)struct ieee80211_sta_he_cap(9)struct ieee80211_eht_mcs_nss_supp(9)struct ieee80211_sta_eht_cap(9)struct ieee80211_sta_uhr_cap(9)struct ieee80211_sband_iftype_data(9)enum ieee80211_edmg_bw_config(9)struct ieee80211_edmg(9)struct ieee80211_sta_s1g_cap(9)struct ieee80211_supported_band(9)_ieee80211_set_sband_iftype_data(9)ieee80211_set_sband_iftype_data(9)for_each_sband_iftype_data(9)ieee80211_get_sband_iftype_data(9)ieee80211_get_he_iftype_cap(9)ieee80211_get_he_6ghz_capa(9)ieee80211_get_eht_iftype_cap(9)ieee80211_get_uhr_iftype_cap(9)wiphy_read_of_freq_limits(9)
see, that wasn't so bad π¦ next batch:
Actions and configuration(9)struct vif_params(9)struct key_params(9)struct cfg80211_chan_def(9)struct cfg80211_tid_cfg(9)struct cfg80211_tid_config(9)struct cfg80211_fils_aad(9)struct cfg80211_set_hw_timestamp(9)cfg80211_get_chandef_type(9)cfg80211_chandef_create(9)cfg80211_chandef_identical(9)cfg80211_chandef_is_edmg(9)cfg80211_chandef_is_s1g(9)cfg80211_chandef_compatible(9)nl80211_chan_width_to_mhz(9)cfg80211_chandef_get_width(9)cfg80211_chandef_valid(9)cfg80211_chandef_usable(9)cfg80211_chandef_dfs_required(9)cfg80211_chandef_dfs_usable(9)cfg80211_chandef_dfs_cac_time(9)cfg80211_chandef_primary(9)cfg80211_chandef_npca_valid(9)cfg80211_chandef_add_npca(9)cfg80211_chandef_add_dbe(9)nl80211_send_chandef(9)ieee80211_chandef_max_power(9)cfg80211_chandef_s1g_pri_width(9)cfg80211_any_usable_channels(9)enum survey_info_flags(9)struct survey_info(9)struct cfg80211_crypto_settings(9)struct cfg80211_mbssid_config(9)struct cfg80211_mbssid_elems(9)struct cfg80211_rnr_elems(9)struct cfg80211_beacon_data(9)struct cfg80211_acl_data(9)struct cfg80211_fils_discovery(9)struct cfg80211_unsol_bcast_probe_resp(9)struct cfg80211_s1g_short_beacon(9)struct cfg80211_ap_settings(9)struct cfg80211_ap_update(9)struct cfg80211_csa_settings(9)struct cfg80211_color_change_settings(9)struct iface_combination_params(9)enum station_parameters_apply_mask(9)struct sta_txpwr(9)struct link_station_parameters(9)struct link_station_del_parameters(9)struct cfg80211_ttlm_params(9)struct station_parameters(9)struct station_del_parameters(9)enum cfg80211_station_type(9)cfg80211_check_station_change(9)enum rate_info_flags(9)enum rate_info_bw(9)struct rate_info(9)enum bss_param_flags(9)struct sta_bss_parameters(9)struct cfg80211_txq_stats(9)struct cfg80211_tid_stats(9)struct link_station_info(9)struct station_info(9)struct cfg80211_sar_sub_specs(9)struct cfg80211_sar_specs(9)struct cfg80211_sar_freq_ranges(9)struct cfg80211_sar_capa(9)cfg80211_get_station(9)enum monitor_flags(9)enum mpath_info_flags(9)struct mpath_info(9)enum wiphy_bss_param_flags(9)struct bss_parameters(9)struct mesh_config(9)struct mesh_setup(9)struct ocb_setup(9)struct ieee80211_txq_params(9)
still hydrated? good, keep going π
Scanning and BSS list handling(9)struct cfg80211_ssid(9)struct cfg80211_scan_info(9)struct cfg80211_scan_6ghz_params(9)struct cfg80211_scan_request(9)struct cfg80211_match_set(9)struct cfg80211_sched_scan_plan(9)struct cfg80211_bss_select_adjust(9)struct cfg80211_sched_scan_request(9)enum cfg80211_signal_type(9)struct cfg80211_inform_bss(9)struct cfg80211_bss_ies(9)struct cfg80211_bss(9)ieee80211_bss_get_elem(9)ieee80211_bss_get_ie(9)struct cfg80211_auth_request(9)struct cfg80211_assoc_link(9)struct cfg80211_ml_reconf_req(9)enum cfg80211_assoc_req_flags(9)struct cfg80211_assoc_request(9)struct cfg80211_deauth_request(9)struct cfg80211_disassoc_request(9)struct cfg80211_ibss_params(9)struct cfg80211_bss_selection(9)struct cfg80211_connect_params(9)enum cfg80211_connect_params_changed(9)enum wiphy_params_flags(9)struct cfg80211_pmksa(9)struct cfg80211_pkt_pattern(9)struct cfg80211_wowlan_tcp(9)struct cfg80211_wowlan(9)struct cfg80211_coalesce_rules(9)struct cfg80211_coalesce(9)struct cfg80211_wowlan_nd_match(9)struct cfg80211_wowlan_nd_info(9)struct cfg80211_wowlan_wakeup(9)struct cfg80211_gtk_rekey_data(9)struct cfg80211_update_ft_ies_params(9)struct cfg80211_mgmt_tx_params(9)struct cfg80211_dscp_exception(9)struct cfg80211_dscp_range(9)struct cfg80211_qos_map(9)
and then the NAN era π§:
Neighbor Awareness Networking (NAN)(9)struct cfg80211_nan_band_config(9)struct cfg80211_nan_conf(9)struct cfg80211_nan_channel(9)struct cfg80211_nan_local_sched(9)struct cfg80211_nan_peer_map(9)struct cfg80211_nan_peer_sched(9)enum cfg80211_nan_conf_changes(9)struct cfg80211_nan_func_filter(9)struct cfg80211_nan_func(9)struct cfg80211_pmk_conf(9)struct cfg80211_external_auth_params(9)struct cfg80211_ftm_responder_stats(9)struct cfg80211_pmsr_ftm_result(9)struct cfg80211_pmsr_result(9)struct cfg80211_pmsr_ftm_request_peer(9)struct cfg80211_pmsr_request_peer(9)struct cfg80211_pmsr_request(9)struct cfg80211_update_owe_info(9)struct mgmt_frame_regs(9)struct cfg80211_ops(9)enum wiphy_flags(9)struct ieee80211_iface_limit(9)struct ieee80211_iface_combination(9)enum wiphy_wowlan_support_flags(9)struct wiphy_wowlan_support(9)struct wiphy_coalesce_support(9)enum wiphy_vendor_command_flags(9)enum wiphy_opmode_flag(9)struct sta_opmode_info(9)struct wiphy_vendor_command(9)struct wiphy_iftype_ext_capab(9)cfg80211_get_iftype_ext_capa(9)struct cfg80211_pmsr_capabilities(9)struct wiphy_iftype_akm_suites(9)struct wiphy_radio_cfg(9)struct wiphy_radio_freq_range(9)struct wiphy_radio(9)enum wiphy_nan_flags(9)struct wiphy_nan_capa(9)wiphy_priv(9)priv_to_wiphy(9)set_wiphy_dev(9)wiphy_dev(9)wiphy_name(9)wiphy_new_nm(9)wiphy_new(9)wiphy_register(9)rcu_dereference_wiphy(9)wiphy_dereference(9)get_wiphy_regdom(9)wiphy_unregister(9)wiphy_free(9)wiphy_lock(9)wiphy_unlock(9)wiphy_work_queue(9)wiphy_work_cancel(9)wiphy_work_flush(9)wiphy_delayed_work_queue(9)wiphy_delayed_work_cancel(9)wiphy_delayed_work_flush(9)wiphy_delayed_work_pending(9)wiphy_hrtimer_work_queue(9)wiphy_hrtimer_work_cancel(9)wiphy_hrtimer_work_flush(9)wiphy_hrtimer_work_pending(9)enum ieee80211_ap_reg_power(9)struct wireless_dev(9)wdev_priv(9)wdev_chandef(9)
halfway-ish, no cap π₯
Utility functions(9)ieee80211_channel_equal(9)ieee80211_channel_to_khz(9)ieee80211_channel_to_freq_khz(9)ieee80211_channel_to_frequency(9)ieee80211_freq_khz_to_channel(9)ieee80211_frequency_to_channel(9)ieee80211_get_channel_khz(9)ieee80211_get_channel(9)cfg80211_channel_is_psc(9)ieee80211_radio_freq_range_valid(9)cfg80211_radio_chandef_valid(9)cfg80211_wdev_channel_allowed(9)ieee80211_get_response_rate(9)ieee80211_mandatory_rates(9)struct ieee80211_radiotap_iterator(9)ieee80211_get_hdrlen_from_skb(9)ieee80211_hdrlen(9)ieee80211_get_mesh_hdrlen(9)Data path helpers(9)ieee80211_data_to_8023_exthdr(9)ieee80211_data_to_8023(9)ieee80211_is_valid_amsdu(9)ieee80211_amsdu_to_8023s(9)ieee80211_get_8023_tunnel_proto(9)ieee80211_strip_8023_mesh_hdr(9)cfg80211_classify8021d(9)cfg80211_find_elem_match(9)cfg80211_find_ie_match(9)cfg80211_find_elem(9)cfg80211_find_ie(9)cfg80211_find_ext_elem(9)cfg80211_find_ext_ie(9)cfg80211_find_vendor_elem(9)cfg80211_find_vendor_ie(9)enum cfg80211_rnr_iter_ret(9)cfg80211_iter_rnr(9)cfg80211_defragment_element(9)cfg80211_send_layer2_update(9)
regulatory girlies rise π:
Regulatory enforcement infrastructure(9)regulatory_hint(9)regulatory_set_wiphy_regd(9)regulatory_set_wiphy_regd_sync(9)wiphy_apply_custom_regulatory(9)freq_reg_info(9)reg_initiator_name(9)regulatory_pre_cac_allowed(9)Internal regulatory db functions(9)reg_query_regdb_wmm(9)cfg80211_scan_done(9)cfg80211_sched_scan_results(9)cfg80211_sched_scan_stopped(9)cfg80211_sched_scan_stopped_locked(9)cfg80211_inform_bss_frame_data(9)cfg80211_gen_new_bssid(9)cfg80211_is_element_inherited(9)cfg80211_merge_profile(9)enum cfg80211_bss_frame_type(9)cfg80211_get_ies_channel_number(9)cfg80211_ssid_eq(9)cfg80211_inform_bss_data(9)__cfg80211_get_bss(9)cfg80211_get_bss(9)cfg80211_ref_bss(9)cfg80211_put_bss(9)cfg80211_unlink_bss(9)cfg80211_bss_iter(9)cfg80211_rx_mlme_mgmt(9)cfg80211_auth_timeout(9)struct cfg80211_rx_assoc_resp_data(9)cfg80211_rx_assoc_resp(9)struct cfg80211_assoc_failure(9)cfg80211_assoc_failure(9)cfg80211_tx_mlme_mgmt(9)cfg80211_rx_unprot_mlme_mgmt(9)cfg80211_michael_mic_failure(9)cfg80211_ibss_joined(9)cfg80211_notify_new_peer_candidate(9)
final stretch, we're so close ππ«Ά:
RFkill integration(9)wiphy_rfkill_set_hw_state_reason(9)wiphy_rfkill_start_polling(9)wiphy_rfkill_stop_polling(9)Vendor commands(9)cfg80211_vendor_cmd_alloc_reply_skb(9)cfg80211_vendor_cmd_reply(9)cfg80211_vendor_cmd_get_sender(9)cfg80211_vendor_event_alloc(9)cfg80211_vendor_event_alloc_ucast(9)cfg80211_vendor_event(9)Test mode(9)cfg80211_testmode_alloc_reply_skb(9)cfg80211_testmode_reply(9)cfg80211_testmode_alloc_event_skb(9)cfg80211_testmode_event(9)struct cfg80211_fils_resp_params(9)struct cfg80211_connect_resp_params(9)cfg80211_connect_done(9)cfg80211_connect_bss(9)cfg80211_connect_result(9)cfg80211_connect_timeout(9)struct cfg80211_roam_info(9)cfg80211_roamed(9)cfg80211_port_authorized(9)cfg80211_disconnected(9)cfg80211_ready_on_channel(9)cfg80211_remain_on_channel_expired(9)cfg80211_tx_mgmt_expired(9)cfg80211_sinfo_alloc_tid_stats(9)cfg80211_link_sinfo_alloc_tid_stats(9)cfg80211_sinfo_release_content(9)cfg80211_new_sta(9)cfg80211_del_sta_sinfo(9)cfg80211_del_sta(9)cfg80211_conn_failed(9)struct cfg80211_rx_info(9)cfg80211_rx_mgmt_ext(9)cfg80211_rx_mgmt_khz(9)cfg80211_rx_mgmt(9)struct cfg80211_tx_status(9)cfg80211_mgmt_tx_status_ext(9)cfg80211_mgmt_tx_status(9)cfg80211_control_port_tx_status(9)cfg80211_rx_control_port(9)cfg80211_cqm_rssi_notify(9)cfg80211_cqm_pktloss_notify(9)cfg80211_cqm_txe_notify(9)cfg80211_cqm_beacon_loss_notify(9)__cfg80211_radar_event(9)cfg80211_sta_opmode_change_notify(9)cfg80211_cac_event(9)cfg80211_background_cac_abort(9)cfg80211_gtk_rekey_notify(9)cfg80211_pmksa_candidate_notify(9)cfg80211_rx_spurious_frame(9)cfg80211_rx_unexpected_4addr_frame(9)cfg80211_probe_status(9)cfg80211_report_obss_beacon_khz(9)cfg80211_report_obss_beacon(9)struct cfg80211_beaconing_check_config(9)
okay and that's the whole guest list β every single name, exactly as written, no cap π but bestie do NOT scroll away, there's more coming π«Ά
okay so we're picking up mid-SEE ALSO and bestieβ¦ this cross-reference list is enormous π the kernel girlies really said "link everything" and honestly? respect the commitment. no skips, no cap, here's the rest of the crew in exactly the order they show up:
cfg80211_reg_check_beaconing(9)β reg girlie #1 πcfg80211_reg_can_beacon(9)β reg girlie #2cfg80211_reg_can_beacon_relax(9)β and the relaxed sibling π«Άcfg80211_ch_switch_notify(9)β channel switch arc, notifications only β¨cfg80211_ch_switch_started_notify(9)β same arc, but "started" era
next up, the whole operating class and chandef friend group, lowkey the conversion clique of the kernel:
ieee80211_operating_class_to_band(9)ieee80211_operating_class_to_chandef(9)ieee80211_chandef_to_operating_class(9)β yes it converts back, we love a two-way street πieee80211_chandef_to_khz(9)
and then, living their best lives right after:
cfg80211_tdls_oper_request(9)cfg80211_calculate_bitrate(9)β math girlie, main character energy ngl
register/unregister block, the flop-and-slay pipeline:
fast BSS transition era, and note that one of these is a struct bestie, not a function β don't get it twisted π:
struct cfg80211_ft_event_params(9)cfg80211_ft_event(9)
then the IE crowd, aka the "say it five times fast" section of the page:
cfg80211_get_p2p_attr(9)ieee80211_ie_split_ric(9)ieee80211_ie_split(9)ieee80211_fragment_element(9)
moving right along:
cfg80211_report_wowlan_wakeup(9)β wakeup reporting, we stan a wakeup notification π€cfg80211_crit_proto_stopped(9)ieee80211_get_num_supported_channels(9)
and the channel-combination and iface-shutdown squad:
cfg80211_check_combinations(9)cfg80211_iter_combinations(9)β the iterator sibling, obviously π¦cfg80211_get_radio_idx_by_chan(9)cfg80211_stop_link(9)cfg80211_stop_iface(9)cfg80211_shutdown_all_interfaces(9)β all of them. every last one. π
ext features, tiny but mighty:
wiphy_ext_feature_set(9)wiphy_ext_feature_isset(9)β the set/isset duo, always together, never apart π«Ά
now the NAN chapter of the list, and yes the name is fun to say, iykyk:
cfg80211_free_nan_func(9)struct cfg80211_nan_match_params(9)β anotherstruct, periodtcfg80211_nan_match(9)cfg80211_nan_func_terminated(9)cfg80211_nan_sched_update_done(9)
auth and measurement time:
then these three, which are giving "I have a very specific job" β¨:
BSS and colour-change era, aka the glow-up arc π:
cfg80211_bss_flush(9)cfg80211_bss_color_notify(9)cfg80211_obss_color_collision_notify(9)β collision notification, dramatic but validcfg80211_color_change_started_notify(9)cfg80211_color_change_aborted_notify(9)β it's giving "we tried, bestie" πcfg80211_color_change_notify(9)
6 GHz and MLO girlies:
cfg80211_6ghz_power_type(9)cfg80211_links_removed(9)struct cfg80211_mlo_reconf_done_data(9)βstructnumber three, we love data πcfg80211_mlo_reconf_add_done(9)
a couple of scheduler-adjacent icons:
back to NAN for round two, because of course there's a round two:
cfg80211_next_nan_dw_notif(9)cfg80211_nan_cluster_joined(9)β cluster joined!! so happy for her πcfg80211_nan_ulw_update(9)cfg80211_nan_channel_evac(9)
debugfs duo, the quiet legends:
wiphy_locked_debugfs_read(9)wiphy_locked_debugfs_write(9)β read and write, the original iconic pair π«Ά
and finally, the S1G + incumbent-signal finale, closing out the list like the headliners they are:
cfg80211_s1g_get_start_freq_khz(9)cfg80211_s1g_get_end_freq_khz(9)cfg80211_s1g_get_primary_sibling(9)cfg80211_incumbent_signal_notify(9)
and that's a wrap on struct wiphy(9) bestie π
the source for this page lives over in ./include/net, and the version we're reading is dated October 2026 β so if your kernel is older than that, vibe check your docs before you come for me π go forth, register your wiphys, and slay β¨π¦π
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms