cfg80211_ibss_joined(9)
β¨ cfg80211_ibss_joined π
okay bestie, welcome to the Kernel API Manual entry for cfg80211_ibss_joined π and ngl this one is kind of a moment. it's the function that tells cfg80211 your device just slid into an IBSS β¨ periodt.
πΈ NAME πΈ
cfg80211_ibss_joined β notify cfg80211 that device joined an IBSS π¦
like literally, that's the whole vibe. your driver did a thing, and now cfg80211 needs to know about it. iykyk π«
β SYNOPSIS β
void cfg80211_ibss_joined (struct net_device *dev , const u8 *bssid ,
struct ieee80211_channel *channel , gfp_t gfp );
that's the whole signature, no cap. four arguments, void return, iconic behavior π
π ARGUMENTS π
devβ the network device π» like, the actual netdev that's out here living its best lifebssidβ the BSSID of the IBSS joined π this is yourconst u8 *, so don't go mutating it, bestie, that's not the movechannelβ the channel of the IBSS joined π‘ astruct ieee80211_channel *β yes, the channel, the whole channel, nothing but the channelgfpβ allocation flags π you know the drill,gfp_t, the allocation-flags type, the usual kernel sprinkle
π DESCRIPTION π
so here's the tea β β this function notifies cfg80211 that the device joined an IBSS or that it switched to a different BSSID. both, either, whichever your driver just did. slay π€Έ
but wait, there's a rule, and it's giving prerequisites π¨ Before this function can be called, one of these two things has to have already happened:
- a beacon has to have been received from the IBSS πΆ β like, an actual beacon, received, from the IBSS, no shortcuts, or
- one of the
cfg80211_inform_bss{,_frame}functions must have been called with the locally generated beacon π§β¨
and why do we care, you ask? because β and this is the important part, don't skip it β this guarantees that there is always a scan result for this IBSS π₯ it's a whole guarantee, fr fr. no scan result, no dice.
and then? cfg80211 will handle the rest ππ like, you did your part, it does its part. teamwork. main character energy from both of you tbh.
bestie please do not skip the beacon step π it's not optional, it's the thing that makes the scan result exist, and cfg80211 is counting on it
okay we're not done yet β there's more of this page coming, so don't go anywhere π«Άβ¨
π SEE ALSO π
okay bestie so literally the entire rest of the kernel's wireless cinematic universe shows up here β this is the friend group, and you're about to meet all of them. no skipping, they all get their moment π
- Kernel file
./include/net/cfg80211.hIntroduction(9), Device registration(9)
π¦ the channel / rate / cap squad
like, everything about channels, rates, and "what can this band even do":
- enum
ieee80211_channel_flags(9), structieee80211_channel(9), enumieee80211_rate_flags(9), enumieee80211_bss_type(9), enumieee80211_privacy(9), structieee80211_rate(9)
β¨ the HE/EHT/UHR girlies (capability era)
- struct
ieee80211_he_obss_pd(9), structcfg80211_he_bss_color(9), structieee80211_sta_ht_cap(9), structieee80211_sta_vht_cap(9), structieee80211_sta_he_cap(9), structieee80211_eht_mcs_nss_supp(9), structieee80211_sta_eht_cap(9), structieee80211_sta_uhr_cap(9)
π bands, EDMG, S1G & friends
- struct
ieee80211_sband_iftype_data(9), enumieee80211_edmg_bw_config(9), structieee80211_edmg(9), structieee80211_sta_s1g_cap(9), structieee80211_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)
π Actions and configuration (the main character section, honestly)
- Actions and configuration(9), struct
vif_params(9), structkey_params(9), structcfg80211_chan_def(9), structcfg80211_tid_cfg(9), structcfg80211_tid_config(9), structcfg80211_fils_aad(9), structcfg80211_set_hw_timestamp(9)
πΈ it's giving chandef energy
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)
π«Ά survey + crypto + AP setup besties
- enum
survey_info_flags(9), structsurvey_info(9), structcfg80211_crypto_settings(9), structcfg80211_mbssid_config(9), structcfg80211_mbssid_elems(9), structcfg80211_rnr_elems(9), structcfg80211_beacon_data(9), structcfg80211_acl_data(9), structcfg80211_fils_discovery(9), structcfg80211_unsol_bcast_probe_resp(9), structcfg80211_s1g_short_beacon(9), structcfg80211_ap_settings(9), structcfg80211_ap_update(9), structcfg80211_csa_settings(9), structcfg80211_color_change_settings(9), structiface_combination_params(9)
π stations, links & all their little structs
- enum
station_parameters_apply_mask(9), structsta_txpwr(9), structlink_station_parameters(9), structlink_station_del_parameters(9), structcfg80211_ttlm_params(9), structstation_parameters(9), structstation_del_parameters(9), enumcfg80211_station_type(9),cfg80211_check_station_change(9), enumrate_info_flags(9), enumrate_info_bw(9), structrate_info(9), enumbss_param_flags(9), structsta_bss_parameters(9), structcfg80211_txq_stats(9), structcfg80211_tid_stats(9), structlink_station_info(9), structstation_info(9)
π§ SAR, monitor, mesh, OCB β the whole roster
- struct
cfg80211_sar_sub_specs(9), structcfg80211_sar_specs(9), structcfg80211_sar_freq_ranges(9), structcfg80211_sar_capa(9),cfg80211_get_station(9), enummonitor_flags(9), enummpath_info_flags(9), structmpath_info(9), enumwiphy_bss_param_flags(9), structbss_parameters(9), structmesh_config(9), structmesh_setup(9), structocb_setup(9), structieee80211_txq_params(9)
π₯ Scanning and BSS list handling
- Scanning and BSS list handling(9), struct
cfg80211_ssid(9), structcfg80211_scan_info(9), structcfg80211_scan_6ghz_params(9), structcfg80211_scan_request(9), structcfg80211_match_set(9), structcfg80211_sched_scan_plan(9), structcfg80211_bss_select_adjust(9), structcfg80211_sched_scan_request(9), enumcfg80211_signal_type(9), structcfg80211_inform_bss(9), structcfg80211_bss_ies(9), structcfg80211_bss(9),ieee80211_bss_get_elem(9),ieee80211_bss_get_ie(9)
π auth / assoc era
- struct
cfg80211_auth_request(9), structcfg80211_assoc_link(9), structcfg80211_ml_reconf_req(9), enumcfg80211_assoc_req_flags(9), structcfg80211_assoc_request(9), structcfg80211_deauth_request(9), structcfg80211_disassoc_request(9), structcfg80211_ibss_params(9), structcfg80211_bss_selection(9), structcfg80211_connect_params(9), enumcfg80211_connect_params_changed(9), enumwiphy_params_flags(9)
π pmksa β wowlan β nan pipeline
- struct
cfg80211_pmksa(9), structcfg80211_pkt_pattern(9), structcfg80211_wowlan_tcp(9), structcfg80211_wowlan(9), structcfg80211_coalesce_rules(9), structcfg80211_coalesce(9), structcfg80211_wowlan_nd_match(9), structcfg80211_wowlan_nd_info(9), structcfg80211_wowlan_wakeup(9), structcfg80211_gtk_rekey_data(9), structcfg80211_update_ft_ies_params(9), structcfg80211_mgmt_tx_params(9), structcfg80211_dscp_exception(9), structcfg80211_dscp_range(9), structcfg80211_qos_map(9)
π Neighbor Awareness Networking (NAN) β yes she gets her own block
- Neighbor Awareness Networking (NAN)(9), struct
cfg80211_nan_band_config(9), structcfg80211_nan_conf(9), structcfg80211_nan_channel(9), structcfg80211_nan_local_sched(9), structcfg80211_nan_peer_map(9), structcfg80211_nan_peer_sched(9), enumcfg80211_nan_conf_changes(9), structcfg80211_nan_func_filter(9), structcfg80211_nan_func(9)
β more assoc/roam/pmksa/FTM lore
- struct
cfg80211_pmk_conf(9), structcfg80211_external_auth_params(9), structcfg80211_ftm_responder_stats(9), structcfg80211_pmsr_ftm_result(9), structcfg80211_pmsr_result(9), structcfg80211_pmsr_ftm_request_peer(9), structcfg80211_pmsr_request_peer(9), structcfg80211_pmsr_request(9), structcfg80211_update_owe_info(9), structmgmt_frame_regs(9)
π¦ wiphy everything (the big one, no cap)
- struct
cfg80211_ops(9), enumwiphy_flags(9), structieee80211_iface_limit(9), structieee80211_iface_combination(9), enumwiphy_wowlan_support_flags(9), structwiphy_wowlan_support(9), structwiphy_coalesce_support(9), enumwiphy_vendor_command_flags(9), enumwiphy_opmode_flag(9), structsta_opmode_info(9), structwiphy_vendor_command(9), structwiphy_iftype_ext_capab(9),cfg80211_get_iftype_ext_capa(9), structcfg80211_pmsr_capabilities(9), structwiphy_iftype_akm_suites(9), structwiphy_radio_cfg(9), structwiphy_radio_freq_range(9), structwiphy_radio(9), enumwiphy_nan_flags(9), structwiphy_nan_capa(9), structwiphy(9)
π wiphy lifecycle & locking (handle with care, bestie)
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)
πΈ work queue girlies (delayed + hrtimer versions too)
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)
π wdev crew
- enum
ieee80211_ap_reg_power(9), structwireless_dev(9),wdev_priv(9),wdev_chandef(9)
π Utility functions
- 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), structieee80211_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)
β¨ element-finding icons
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), enumcfg80211_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)
π the notify / event girlies (huge group chat energy)
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), enumcfg80211_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), structcfg80211_rx_assoc_resp_data(9),cfg80211_rx_assoc_resp(9), structcfg80211_assoc_failure(9),cfg80211_assoc_failure(9),cfg80211_tx_mlme_mgmt(9),cfg80211_rx_unprot_mlme_mgmt(9),cfg80211_michael_mic_failure(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)
π connect / roam / disconnect lore
- struct
cfg80211_fils_resp_params(9), structcfg80211_connect_resp_params(9),cfg80211_connect_done(9),cfg80211_connect_bss(9),cfg80211_connect_result(9),cfg80211_connect_timeout(9), structcfg80211_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)
π station stats & new/del sta
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)
π₯ mgmt rx/tx & control port
- struct
cfg80211_rx_info(9),cfg80211_rx_mgmt_ext(9),cfg80211_rx_mgmt_khz(9),cfg80211_rx_mgmt(9), structcfg80211_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)
πΈ the quality-of-service drama notifications
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), structcfg80211_beaconing_check_config(9),
...and the roll call keeps going, bestie β this is the long tail of the SEE ALSO squad and every single one of them is a real cross-reference, so no skipping, no skimming, no "eh I get the idea" π Pull up a chair, hydrate, and let's read the whole roster together π
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)
okay that's the first chunk, we're literally not even close to done π keep going, this next batch is giving "the whole extended family showed up to the function" energy π
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)
and the final stretch β last few, you're almost free, I promise π«Άβ¨
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 list, bestie β not a single one dropped, full attendance, everyone showed up and everyone slayed π
okay and that's a wrap on the entire page, fr fr πΈ This one lives in the source tree at ./include/net, the date stamped on it is October 2026, and the whole thing is filed under cfg80211_ibss_joined(9). Go forth, read the cross-refs, and remember: the manual says what the manual says, so check the source if you're ever in doubt, ily, bye ππ
π¦ 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