net/mac80211/cfg.c
Source file repositories/reference/linux-study-clean/net/mac80211/cfg.c
File Facts
- System
- Linux kernel
- Corpus path
net/mac80211/cfg.c- Extension
.c- Size
- 168157 bytes
- Lines
- 6106
- Domain
- Networking Core
- Bucket
- Sockets, Protocols, Packet Path, And Network Policy
- Inferred role
- Networking Core: exported/initcall integration point
- Status
- integration implementation candidate
Why This File Exists
Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.
- Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.
- Exports symbols or registers init work; inspect boot/module ordering and who consumes the exported contract.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/ieee80211.hlinux/nl80211.hlinux/rtnetlink.hlinux/slab.hnet/net_namespace.hlinux/rcupdate.hlinux/fips.hlinux/if_ether.hnet/cfg80211.hieee80211_i.hdriver-ops.hrate.hmesh.hwme.h
Detected Declarations
enum sta_link_apply_modefunction Copyrightfunction ieee80211_set_mu_mimo_followfunction ieee80211_set_mon_optionsfunction ieee80211_set_ap_mbssid_optionsfunction ieee80211_del_ifacefunction ieee80211_change_ifacefunction ieee80211_start_p2p_devicefunction ieee80211_stop_p2p_devicefunction ieee80211_nan_conf_freefunction ieee80211_stop_nanfunction ieee80211_nan_conf_copyfunction ieee80211_start_nanfunction ieee80211_nan_change_conffunction ieee80211_add_nan_funcfunction ieee80211_find_nan_func_by_cookiefunction idr_for_each_entryfunction ieee80211_del_nan_funcfunction ieee80211_set_noack_mapfunction ieee80211_set_txfunction ieee80211_add_keyfunction Withfunction ieee80211_lookup_keyfunction ieee80211_del_keyfunction ieee80211_get_keyfunction ieee80211_config_default_keyfunction ieee80211_config_default_mgmt_keyfunction ieee80211_config_default_beacon_keyfunction sta_set_rate_info_txfunction ieee80211_dump_stationfunction ieee80211_dump_surveyfunction ieee80211_get_stationfunction ieee80211_set_monitor_channelfunction ieee80211_set_probe_respfunction ieee80211_set_fils_discoveryfunction ieee80211_set_unsol_bcast_probe_respfunction ieee80211_set_s1g_short_beaconfunction ieee80211_set_ftm_responder_paramsfunction ieee80211_copy_mbssid_beaconfunction ieee80211_copy_rnr_beaconfunction ieee80211_calc_ap_he_and_lowerfunction ieee80211_calc_ap_eht_bwfunction ieee80211_update_ap_bandwidthfunction ieee80211_assign_beaconfunction ieee80211_num_beaconing_linksfunction ieee80211_start_apfunction list_for_each_entryfunction ieee80211_change_beacon
Annotated Snippet
ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR)) {
/* This is copied in when the VIF is activated */
ieee80211_set_mu_mimo_follow(sdata, params);
if (monitor_sdata)
ieee80211_set_mu_mimo_follow(monitor_sdata, params);
}
if (params->flags) {
if (ieee80211_sdata_running(sdata)) {
ieee80211_adjust_monitor_flags(sdata, -1);
sdata->u.mntr.flags = params->flags;
ieee80211_adjust_monitor_flags(sdata, 1);
ieee80211_configure_filter(local);
} else {
/*
* Because the interface is down, ieee80211_do_stop
* and ieee80211_do_open take care of "everything"
* mentioned in the comment above.
*/
sdata->u.mntr.flags = params->flags;
}
}
return 0;
}
static int ieee80211_set_ap_mbssid_options(struct ieee80211_sub_if_data *sdata,
struct cfg80211_mbssid_config *params,
struct ieee80211_bss_conf *link_conf)
{
struct ieee80211_sub_if_data *tx_sdata;
struct ieee80211_bss_conf *old;
link_conf->bssid_index = 0;
link_conf->nontransmitted = false;
link_conf->ema_ap = false;
link_conf->bssid_indicator = 0;
if (sdata->vif.type != NL80211_IFTYPE_AP || !params->tx_wdev)
return -EINVAL;
old = sdata_dereference(link_conf->tx_bss_conf, sdata);
if (old)
return -EALREADY;
tx_sdata = IEEE80211_WDEV_TO_SUB_IF(params->tx_wdev);
if (!tx_sdata)
return -EINVAL;
if (tx_sdata == sdata) {
rcu_assign_pointer(link_conf->tx_bss_conf, link_conf);
} else {
struct ieee80211_bss_conf *tx_bss_conf;
tx_bss_conf = sdata_dereference(tx_sdata->vif.link_conf[params->tx_link_id],
sdata);
if (rcu_access_pointer(tx_bss_conf->tx_bss_conf) != tx_bss_conf)
return -EINVAL;
rcu_assign_pointer(link_conf->tx_bss_conf, tx_bss_conf);
link_conf->nontransmitted = true;
link_conf->bssid_index = params->index;
link_conf->bssid_indicator = tx_bss_conf->bssid_indicator;
}
if (params->ema)
link_conf->ema_ap = true;
return 0;
}
static struct wireless_dev *ieee80211_add_iface(struct wiphy *wiphy,
const char *name,
unsigned char name_assign_type,
enum nl80211_iftype type,
struct vif_params *params)
{
struct ieee80211_local *local = wiphy_priv(wiphy);
struct wireless_dev *wdev;
struct ieee80211_sub_if_data *sdata;
int err;
err = ieee80211_if_add(local, name, name_assign_type, &wdev, type, params);
if (err)
return ERR_PTR(err);
sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
Annotation
- Immediate include surface: `linux/ieee80211.h`, `linux/nl80211.h`, `linux/rtnetlink.h`, `linux/slab.h`, `net/net_namespace.h`, `linux/rcupdate.h`, `linux/fips.h`, `linux/if_ether.h`.
- Detected declarations: `enum sta_link_apply_mode`, `function Copyright`, `function ieee80211_set_mu_mimo_follow`, `function ieee80211_set_mon_options`, `function ieee80211_set_ap_mbssid_options`, `function ieee80211_del_iface`, `function ieee80211_change_iface`, `function ieee80211_start_p2p_device`, `function ieee80211_stop_p2p_device`, `function ieee80211_nan_conf_free`.
- Atlas domain: Networking Core / Sockets, Protocols, Packet Path, And Network Policy.
- Implementation status: integration implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.