/* The index is relative to frame start but we start looking at the * variable-length part of the beacon.
*/
tim_idx = mgmt->u.beacon.variable - beacon;
/* Parse variable-length elements of beacon to find WLAN_EID_TIM */ while ((tim_idx < (frame_size - 2)) &&
(beacon[tim_idx] != WLAN_EID_TIM))
tim_idx += beacon[tim_idx + 1] + 2;
/* If TIM field was found, set variables */ if ((tim_idx < (frame_size - 1)) && beacon[tim_idx] == WLAN_EID_TIM)
*tim_index = cpu_to_le32(tim_idx); else
IWL_WARN(mld, "Unable to find TIM Element in beacon\n");
}
link = iwl_mld_link_dereference_check(mld_vif, key->link_id); if (WARN_ON(!link)) return;
for (int i = 0; i < ARRAY_SIZE(link->ap_early_keys); i++) { if (link->ap_early_keys[i] != key) continue; /* Those weren't sent to FW, so should be marked as INVALID */ if (WARN_ON(key->hw_key_idx != STA_KEY_IDX_INVALID))
key->hw_key_idx = STA_KEY_IDX_INVALID;
link->ap_early_keys[i] = NULL;
}
}
if (vif->type == NL80211_IFTYPE_AP)
iwl_mld_send_ap_tx_power_constraint_cmd(mld, vif, link);
ret = iwl_mld_update_beacon_template(mld, vif, link); if (ret) return ret;
/* the link should be already activated when assigning chan context, * and LINK_CONTEXT_MODIFY_EHT_PARAMS is deprecated
*/
ret = iwl_mld_change_link_in_fw(mld, link,
LINK_CONTEXT_MODIFY_ALL &
~(LINK_CONTEXT_MODIFY_ACTIVE |
LINK_CONTEXT_MODIFY_EHT_PARAMS)); if (ret) return ret;
ret = iwl_mld_add_mcast_sta(mld, vif, link); if (ret) return ret;
mld_vif->ap_ibss_active = true;
if (vif->p2p && mld->p2p_device_vif) {
ret = iwl_mld_mac_fw_action(mld, mld->p2p_device_vif,
FW_CTXT_ACTION_MODIFY); if (ret) {
mld_vif->ap_ibss_active = false; goto rm_mcast;
}
}
ret = iwl_mld_add_bcast_sta(mld, vif, link); if (ret) goto update_p2p_dev;
/* Those keys were configured by the upper layers before starting the * AP. Now that it is started and the bcast and mcast sta were added to * the FW, we can add the keys too.
*/
ret = iwl_mld_send_ap_early_keys(mld, vif, link); if (ret) goto rm_bcast;
if (ieee80211_vif_type_p2p(vif) == NL80211_IFTYPE_AP)
iwl_mld_vif_update_low_latency(mld, vif, true,
LOW_LATENCY_VIF_TYPE);
/* When the channel context was added, the link is not yet active, so * min_def is always used. Update the PHY again here in case def should * actually be used.
*/
ctx = wiphy_dereference(mld->wiphy, link->chanctx_conf);
iwl_mld_update_phy_chandef(mld, ctx);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.