Lines Matching +full:keys +full:- +full:per +full:- +full:group
1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
16 bool pairwise = key->flags & IEEE80211_KEY_FLAG_PAIRWISE; in iwl_mld_get_key_flags()
17 bool igtk = key->keyidx == 4 || key->keyidx == 5; in iwl_mld_get_key_flags()
23 switch (key->cipher) { in iwl_mld_get_key_flags()
41 if (!sta && vif->type == NL80211_IFTYPE_STATION) in iwl_mld_get_key_flags()
42 sta = mld_vif->ap_sta; in iwl_mld_get_key_flags()
50 if ((sta && sta->mfp && pairwise) || igtk) in iwl_mld_get_key_flags()
53 if (key->flags & IEEE80211_KEY_FLAG_SPP_AMSDU) in iwl_mld_get_key_flags()
68 lockdep_assert_wiphy(mld->wiphy); in iwl_mld_get_key_sta_mask()
70 /* AP group keys are per link and should be on the mcast/bcast STA */ in iwl_mld_get_key_sta_mask()
71 if (vif->type == NL80211_IFTYPE_AP && in iwl_mld_get_key_sta_mask()
72 !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE)) { in iwl_mld_get_key_sta_mask()
75 if (key->link_id >= 0) in iwl_mld_get_key_sta_mask()
77 key->link_id); in iwl_mld_get_key_sta_mask()
83 if (WARN_ON(link->bcast_sta.sta_id == IWL_INVALID_STA || in iwl_mld_get_key_sta_mask()
84 link->mcast_sta.sta_id == IWL_INVALID_STA)) in iwl_mld_get_key_sta_mask()
88 if (key->keyidx >= 4) in iwl_mld_get_key_sta_mask()
89 return BIT(link->bcast_sta.sta_id); in iwl_mld_get_key_sta_mask()
92 return BIT(link->mcast_sta.sta_id); in iwl_mld_get_key_sta_mask()
95 /* for client mode use the AP STA also for group keys */ in iwl_mld_get_key_sta_mask()
96 if (!sta && vif->type == NL80211_IFTYPE_STATION) in iwl_mld_get_key_sta_mask()
97 sta = mld_vif->ap_sta; in iwl_mld_get_key_sta_mask()
99 /* STA should be non-NULL now */ in iwl_mld_get_key_sta_mask()
103 /* Key is not per-link, get the full sta mask */ in iwl_mld_get_key_sta_mask()
104 if (key->link_id < 0) in iwl_mld_get_key_sta_mask()
110 link_sta = link_sta_dereference_check(sta, key->link_id); in iwl_mld_get_key_sta_mask()
125 .u.add.key_id = cpu_to_le32(key->keyidx), in iwl_mld_add_key_to_fw()
127 .u.add.tx_seq = cpu_to_le64(atomic64_read(&key->tx_pn)), in iwl_mld_add_key_to_fw()
129 bool tkip = key->cipher == WLAN_CIPHER_SUITE_TKIP; in iwl_mld_add_key_to_fw()
134 if (mld->fw_status.resuming) in iwl_mld_add_key_to_fw()
139 return -EINVAL; in iwl_mld_add_key_to_fw()
141 if (WARN_ON(key->keylen > max_key_len)) in iwl_mld_add_key_to_fw()
142 return -EINVAL; in iwl_mld_add_key_to_fw()
144 memcpy(cmd.u.add.key, key->key, key->keylen); in iwl_mld_add_key_to_fw()
148 key->key + NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY, in iwl_mld_add_key_to_fw()
151 key->key + NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY, in iwl_mld_add_key_to_fw()
171 if (mld->fw_status.resuming) in iwl_mld_remove_key_from_fw()
189 lockdep_assert_wiphy(mld->wiphy); in iwl_mld_remove_key()
194 if (key->keyidx == 4 || key->keyidx == 5) { in iwl_mld_remove_key()
198 /* set to -1 for non-MLO right now */ in iwl_mld_remove_key()
199 if (key->link_id >= 0) in iwl_mld_remove_key()
200 link_id = key->link_id; in iwl_mld_remove_key()
206 if (mld_link->igtk == key) in iwl_mld_remove_key()
207 mld_link->igtk = NULL; in iwl_mld_remove_key()
209 mld->num_igtks--; in iwl_mld_remove_key()
212 iwl_mld_remove_key_from_fw(mld, sta_mask, key_flags, key->keyidx); in iwl_mld_remove_key()
215 key->hw_key_idx = STA_KEY_IDX_INVALID; in iwl_mld_remove_key()
227 bool igtk = key->keyidx == 4 || key->keyidx == 5; in iwl_mld_add_key()
230 lockdep_assert_wiphy(mld->wiphy); in iwl_mld_add_key()
233 return -EINVAL; in iwl_mld_add_key()
236 if (mld->num_igtks == IWL_MAX_NUM_IGTKS) in iwl_mld_add_key()
237 return -EOPNOTSUPP; in iwl_mld_add_key()
241 /* set to -1 for non-MLO right now */ in iwl_mld_add_key()
242 if (key->link_id >= 0) in iwl_mld_add_key()
243 link_id = key->link_id; in iwl_mld_add_key()
248 return -EINVAL; in iwl_mld_add_key()
250 if (mld_link->igtk) { in iwl_mld_add_key()
252 mld_link->igtk->keyidx); in iwl_mld_add_key()
253 iwl_mld_remove_key(mld, vif, sta, mld_link->igtk); in iwl_mld_add_key()
256 WARN_ON(mld_link->igtk); in iwl_mld_add_key()
264 mld_link->igtk = key; in iwl_mld_add_key()
265 mld->num_igtks++; in iwl_mld_add_key()
271 key->hw_key_idx = 0; in iwl_mld_add_key()
290 if (key->hw_key_idx == STA_KEY_IDX_INVALID) in iwl_mld_remove_ap_keys_iter()
293 /* All the pairwise keys should have been removed by now */ in iwl_mld_remove_ap_keys_iter()
297 if (key->link_id >= 0 && key->link_id != data->link_id) in iwl_mld_remove_ap_keys_iter()
300 iwl_mld_remove_key(mld, vif, data->sta, key); in iwl_mld_remove_ap_keys_iter()
311 if (WARN_ON_ONCE(vif->type != NL80211_IFTYPE_STATION)) in iwl_mld_remove_ap_keys()
314 ieee80211_iter_keys(mld->hw, vif, in iwl_mld_remove_ap_keys()
336 .u.modify.old_sta_mask = cpu_to_le32(data->old_sta_mask), in iwl_mld_update_sta_key_iter()
337 .u.modify.new_sta_mask = cpu_to_le32(data->new_sta_mask), in iwl_mld_update_sta_key_iter()
338 .u.modify.key_id = cpu_to_le32(key->keyidx), in iwl_mld_update_sta_key_iter()
344 /* only need to do this for pairwise keys (link_id == -1) */ in iwl_mld_update_sta_key_iter()
345 if (sta != data->sta || key->link_id >= 0) in iwl_mld_update_sta_key_iter()
352 data->err = err; in iwl_mld_update_sta_key_iter()
367 ieee80211_iter_keys(mld->hw, vif, iwl_mld_update_sta_key_iter, in iwl_mld_update_sta_keys()