STRUCT LINK_STATION_PARAMETERS(9)
π struct link_station_parameters(9)
okay so bestie, welcome to the Kernel API Manual β yes, that Kernel API Manual β and today's main character is struct link_station_parameters. Say it with me: link station parameters. It's giving "the blueprint for a link station" and honestly? iconic. Let's get into it β¨
πΈ NAME
struct link_station_parameters β link station parameters π
Like. That's literally what it is. Link station. Parameters. No notes. π
π¦ SYNOPSIS
okay here's the whole struct, and I'm giving it to you exactly as it is, no cap, character for character β do not come for me about the spacing, this is the real deal:
struct link_station_parameters {
const u8 *mld_mac;
int link_id;
const u8 *link_mac;
const u8 *supported_rates;
u8 supported_rates_len;
const struct ieee80211_ht_cap *ht_capa;
const struct ieee80211_vht_cap *vht_capa;
u8 opmode_notif;
bool opmode_notif_used;
const struct ieee80211_he_cap_elem *he_capa;
u8 he_capa_len;
struct sta_txpwr txpwr;
bool txpwr_set;
const struct ieee80211_he_6ghz_capa *he_6ghz_capa;
const struct ieee80211_eht_cap_elem *eht_capa;
u8 eht_capa_len;
const struct ieee80211_s1g_cap *s1g_capa;
const struct ieee80211_uhr_cap *uhr_capa;
u8 uhr_capa_len;
};
lowkey a lot of fields but we're gonna go through every single one, bestie. buckle up. π
π Members
mld_macβ the MAC address of the station π fr fr, that's the whole vibe.link_idβ the link id. and oop, it's-1for a non-MLD station, iykyk πlink_macβ MAC address of the link β¨supported_ratesβ supported rates, in IEEE 802.11 format. orNULLfor no change β yes,NULLis a valid mood here π«Άsupported_rates_lenβ how many supported rates there are. the count. the receipts. π₯ht_capaβ HT capabilities of the station βvht_capaβ VHT capabilities of the station πopmode_notifβ the operating mode field, straight from Operating Mode Notification πopmode_notif_usedβ tells you whether the operating mode field is used. it's a yes/no situation, bestie πhe_capaβ HE capabilities of the station πΈhe_capa_lenβ the length of the HE capabilities. gotta know how big it is πtxpwrβ transmit power for an associated station, typestruct sta_txpwrπ₯txpwr_setβ says thetxpwrfield is set βhe_6ghz_capaβ HE 6 GHz Band capabilities of the station π¦ (6 GHz girlies rise)eht_capaβ EHT capabilities of the station β¨eht_capa_lenβ the length of the EHT capabilities πs1g_capaβ S1G capabilities of the station πΏuhr_capaβ UHR capabilities of the station π«uhr_capa_lenβ the length of the UHR capabilities π
that's the whole roster. every field accounted for. no one left behind. periodt. π
π§ Description
okay so what is this thing for? literally just: it's used to change and create a new link station. that's it. that's the whole job. it's giving "glow-up AND origin story" at the same time πβ¨
bestie we are not done β more parts are coming, so don't go anywhere π
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
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 enforcement infrastructure
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
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)
π RFkill integration
RFkill integration(9)wiphy_rfkill_set_hw_state_reason(9)wiphy_rfkill_start_polling(9)wiphy_rfkill_stop_polling(9)
β Vendor commands
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
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 so this next bit is basically the group chat roster of every other function that vibes with this struct, and yes, we're listing all of them, because gatekeeping is not the move π
cfg80211_reg_check_beaconing(9)cfg80211_reg_can_beacon(9)cfg80211_reg_can_beacon_relax(9)cfg80211_ch_switch_notify(9)cfg80211_ch_switch_started_notify(9)ieee80211_operating_class_to_band(9)ieee80211_operating_class_to_chandef(9)ieee80211_chandef_to_operating_class(9)ieee80211_chandef_to_khz(9)cfg80211_tdls_oper_request(9)cfg80211_calculate_bitrate(9)cfg80211_unregister_wdev(9)cfg80211_register_netdevice(9)cfg80211_unregister_netdevice(9)struct cfg80211_ft_event_params(9)cfg80211_ft_event(9)cfg80211_get_p2p_attr(9)ieee80211_ie_split_ric(9)ieee80211_ie_split(9)ieee80211_fragment_element(9)cfg80211_report_wowlan_wakeup(9)cfg80211_crit_proto_stopped(9)ieee80211_get_num_supported_channels(9)cfg80211_check_combinations(9)cfg80211_iter_combinations(9)cfg80211_get_radio_idx_by_chan(9)cfg80211_stop_link(9)cfg80211_stop_iface(9)cfg80211_shutdown_all_interfaces(9)wiphy_ext_feature_set(9)wiphy_ext_feature_isset(9)cfg80211_free_nan_func(9)struct cfg80211_nan_match_params(9)cfg80211_nan_match(9)cfg80211_nan_func_terminated(9)cfg80211_nan_sched_update_done(9)cfg80211_external_auth_request(9)cfg80211_pmsr_report(9)cfg80211_pmsr_complete(9)cfg80211_iftype_allowed(9)cfg80211_assoc_comeback(9)cfg80211_update_owe_info_event(9)cfg80211_bss_flush(9)cfg80211_bss_color_notify(9)cfg80211_obss_color_collision_notify(9)cfg80211_color_change_started_notify(9)cfg80211_color_change_aborted_notify(9)cfg80211_color_change_notify(9)cfg80211_6ghz_power_type(9)cfg80211_links_removed(9)struct cfg80211_mlo_reconf_done_data(9)cfg80211_mlo_reconf_add_done(9)cfg80211_schedule_channels_check(9)cfg80211_epcs_changed(9)cfg80211_next_nan_dw_notif(9)cfg80211_nan_cluster_joined(9)cfg80211_nan_ulw_update(9)cfg80211_nan_channel_evac(9)wiphy_locked_debugfs_read(9)wiphy_locked_debugfs_write(9)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)
That's the whole squad, bestie β not one single name left behind, fr fr. If you're the kind of person who reads SEE ALSO sections for fun (respect, honestly, same energy), this is your little TBR pile πΈ every single one of those has its own page waiting for you.
And that's a wrap on struct link_...n_parameters(9)! π This lil masterpiece lives in the kernel API manual, straight out of the source tree at ./include/net, and it's dated October 2026 β¨ Go forth, configure your links, 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