net/mac80211/ap.c
Source file repositories/reference/linux-study-clean/net/mac80211/ap.c
File Facts
- System
- Linux kernel
- Corpus path
net/mac80211/ap.c- Extension
.c- Size
- 9769 bytes
- Lines
- 354
- Domain
- Networking Core
- Bucket
- Sockets, Protocols, Packet Path, And Network Policy
- Inferred role
- Networking Core: implementation source
- Status
- source 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.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
driver-ops.hieee80211_i.hrate.h
Detected Declarations
function Copyrightfunction ieee80211_rx_eml_op_mode_notiffunction ieee80211_rx_uhr_link_reconfig_reqfunction for_each_mle_subelementfunction for_each_element_extidfunction for_each_uhr_mode_change_tuplefunction ieee80211_ap_rx_queued_framefunction ieee80211_uhr_disable_dbe_all_stasfunction list_for_each_entry
Annotated Snippet
if (control & IEEE80211_EML_CTRL_EMLSR_PARAM_UPDATE) {
u8 pad_delay, trans_delay;
pad_delay = u8_get_bits(ptr[2],
IEEE80211_EML_EMLSR_PAD_DELAY);
if (pad_delay >
IEEE80211_EML_CAP_EML_PADDING_DELAY_256US)
return;
trans_delay = u8_get_bits(ptr[2],
IEEE80211_EML_EMLSR_TRANS_DELAY);
if (trans_delay >
IEEE80211_EML_CAP_EMLSR_TRANSITION_DELAY_256US)
return;
/* Update sta padding and transition delay */
sta->sta.eml_cap =
u8_replace_bits(sta->sta.eml_cap,
pad_delay,
IEEE80211_EML_CAP_EML_PADDING_DELAY);
sta->sta.eml_cap =
u8_replace_bits(sta->sta.eml_cap,
trans_delay,
IEEE80211_EML_CAP_EML_TRANSITION_DELAY);
}
}
if (control & IEEE80211_EML_CTRL_EMLMR_MODE) {
u8 mcs_map_size;
int i;
if (!(ift_ext_capa->eml_capabilities &
IEEE80211_EML_CAP_EMLMR_SUPPORT))
return;
opt_len += sizeof(__le16); /* eMLMR link_bitmap */
opt_len++; /* eMLMR mcs_map_count */
if (skb->len < len + opt_len)
return;
eml_params.emlmr_mcs_map_count = ptr[2];
if (eml_params.emlmr_mcs_map_count > 2)
return;
mcs_map_size = 3 * (1 + eml_params.emlmr_mcs_map_count);
opt_len += mcs_map_size;
if (skb->len < len + opt_len)
return;
for (i = 0; i < mcs_map_size; i++) {
u8 rx_mcs, tx_mcs;
rx_mcs = u8_get_bits(ptr[3 + i],
IEEE80211_EML_EMLMR_RX_MCS_MAP);
if (rx_mcs > 8)
return;
tx_mcs = u8_get_bits(ptr[3 + i],
IEEE80211_EML_EMLMR_TX_MCS_MAP);
if (tx_mcs > 8)
return;
}
memcpy(eml_params.emlmr_mcs_map_bw, &ptr[3], mcs_map_size);
}
if ((control & IEEE80211_EML_CTRL_EMLSR_MODE) ||
(control & IEEE80211_EML_CTRL_EMLMR_MODE)) {
eml_params.link_bitmap = get_unaligned_le16(ptr);
if ((eml_params.link_bitmap & sdata->vif.active_links) !=
eml_params.link_bitmap)
return;
}
if (drv_set_eml_op_mode(sdata, &sta->sta, &eml_params))
return;
ieee80211_send_eml_op_mode_notif(sdata, mgmt, opt_len);
}
static void
ieee80211_rx_uhr_link_reconfig_req(struct ieee80211_sub_if_data *sdata,
struct sk_buff *skb)
{
struct ieee80211_mgmt *mgmt = (void *)skb->data;
const struct element *sub;
struct sta_info *sta;
/*
* rx.c only accepts IEEE80211_UHR_LINK_RECONFIG_REQUEST_OMP_REQUEST
Annotation
- Immediate include surface: `driver-ops.h`, `ieee80211_i.h`, `rate.h`.
- Detected declarations: `function Copyright`, `function ieee80211_rx_eml_op_mode_notif`, `function ieee80211_rx_uhr_link_reconfig_req`, `function for_each_mle_subelement`, `function for_each_element_extid`, `function for_each_uhr_mode_change_tuple`, `function ieee80211_ap_rx_queued_frame`, `function ieee80211_uhr_disable_dbe_all_stas`, `function list_for_each_entry`.
- Atlas domain: Networking Core / Sockets, Protocols, Packet Path, And Network Policy.
- Implementation status: source implementation candidate.
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.