ieee80211_gtk_rekey_add(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… ieee80211_gtk_rekey_add(9) β€” Kernel API Manual πŸ’…

okay bestie, this is the Kernel API Manual page for ieee80211_gtk_rekey_add(9), and it's lowkey iconic because it's all about getting GTK keys back in place after WoWLAN rekeying. no cap, let's get into it 🫢

🌸 NAME 🌸

ieee80211_gtk_rekey_add β€” add a GTK key from rekeying during WoWLAN.

✨ SYNOPSIS ✨

struct ieee80211_key_conf * ieee80211_gtk_rekey_add (struct
ieee80211_vif *vif , u8 idx , u8 *key_data , u8 key_len , int link_id );

πŸŽ€ ARGUMENTS πŸŽ€

  • vif β€” the virtual interface to add the key on. literally the vif bestie πŸ’–
  • idx β€” the keyidx of the key.
  • key_data β€” the key data.
  • key_len β€” the key data. Might be bigger than the actual key length, but not smaller (for the driver convenience). so like, don't undershoot pls πŸ™ˆ
  • link_id β€” the link id of the key, or -1 for non-MLO.

πŸ¦‹ DESCRIPTION πŸ¦‹

So picture this: GTK rekeying was done while the system was suspended, and (a) new key(s) will be available. These will be needed by mac80211 for proper RX processing, so this function allows setting them. slay, RX stays fed ✨

Note that this function assumes the key isn't added to hardware acceleration, so no TX will be done with the key. Since it's a GTK on managed (station) networks, this is true anyway. If the driver calls this function from the resume callback and subsequently uses the return code 1 to reconfigure the device, this key will be part of the reconfiguration. iykyk πŸ”₯

Note that the driver should also call ieee80211_set_key_rx_seq for the new key for each TID to set up sequence counters properly. don't skip this, bestie, the sequence counters need their moment πŸŽ€

IMPORTANT: If this replaces a key that is present in the hardware, then it will attempt to remove it during this call. yes, it's giving serious, pay attention πŸ’€

πŸ”₯ RETURN πŸ”₯

the newly allocated key structure, which will have similar contents to the passed key configuration but point to mac80211-owned memory. In case of errors, the function returns an ERR_PTR, use IS_ERR etc. so check that pointer, bestie, don't just vibe with it πŸ™ˆ

πŸ‘€ SEE ALSO πŸ‘€

Kernel file ./include/net/mac80211.h, plus the entire mac80211 extended universe. every single reference is here, no gatekeeping:

Introduction(9), Calling mac80211
from interrupts(9), Warning(9), Frame format(9), mac80211 workqueue(9),
mac80211 software tx queueing(9), HW timestamping(9), enum
ieee80211_max_queues(9), enum ieee80211_ac_numbers(9), struct
ieee80211_tx_queue_params(9), enum ieee80211_chanctx_change(9), struct
ieee80211_chan_req(9), struct ieee80211_chanctx_conf(9), enum
ieee80211_chanctx_switch_mode(9), struct
ieee80211_vif_chanctx_switch(9), enum ieee80211_bss_change(9), enum
ieee80211_event_type(9), enum ieee80211_rssi_event_data(9), struct
ieee80211_rssi_event(9), enum ieee80211_mlme_event_data(9), enum
ieee80211_mlme_event_status(9), struct ieee80211_mlme_event(9), struct
ieee80211_ba_event(9), struct ieee80211_event(9), struct
ieee80211_mu_group_data(9), struct ieee80211_ftm_responder_params(9),
struct ieee80211_fils_discovery(9), struct ieee80211_parsed_tpe(9),
struct ieee80211_bss_npca_params(9), struct ieee80211_bss_conf(9),
struct ieee80211_nan_channel(9), struct ieee80211_nan_peer_map(9),
struct ieee80211_nan_peer_sched(9), enum mac80211_tx_info_flags(9), enum
mac80211_tx_control_flags(9), enum mac80211_tx_status_flags(9), enum
mac80211_rate_control_flags(9), struct ieee80211_tx_rate(9), struct
ieee80211_tx_info(9), struct ieee80211_tx_status(9), struct
ieee80211_scan_ies(9), ieee80211_tx_info_clear_status(9), enum
mac80211_rx_flags(9), enum mac80211_rx_encoding_flags(9), struct
ieee80211_rx_status(9), enum ieee80211_conf_flags(9), enum
ieee80211_conf_changed(9), enum ieee80211_smps_mode(9), struct
ieee80211_conf(9), struct ieee80211_channel_switch(9), enum
ieee80211_vif_flags(9), enum ieee80211_offload_flags(9), struct
ieee80211_eml_params(9), struct ieee80211_nan_sched_cfg(9), struct
ieee80211_vif_cfg(9), struct ieee80211_neg_ttlm(9), enum
ieee80211_neg_ttlm_res(9), struct ieee80211_vif(9),
ieee80211_vif_usable_links(9), ieee80211_vif_is_mld(9),
ieee80211_vif_link_active(9), wdev_to_ieee80211_vif(9),
ieee80211_vif_to_wdev(9), enum ieee80211_key_flags(9), struct
ieee80211_key_conf(9), struct ieee80211_key_seq(9), enum set_key_cmd(9),
enum ieee80211_sta_state(9), enum ieee80211_sta_rx_bandwidth(9), struct
ieee80211_sta_rates(9), struct ieee80211_sta_txpwr(9), struct
ieee80211_sta_aggregates(9), struct ieee80211_link_sta(9), struct
ieee80211_sta(9), enum sta_notify_cmd(9), struct
ieee80211_tx_control(9), struct ieee80211_txq(9), enum
ieee80211_hw_flags(9), struct ieee80211_hw(9), struct
ieee80211_scan_request(9), struct ieee80211_tdls_ch_sw_params(9),
wiphy_to_ieee80211_hw(9), SET_IEEE80211_DEV(9),
SET_IEEE80211_PERM_ADDR(9), ieee80211_free_txskb(9),
ieee80211_purge_tx_queue(9), Hardware crypto acceleration(9), Powersave
support(9), Beacon filter support(9), Spatial multiplexing power
save(9), Frame filtering(9), AP support for powersaving clients(9), HW
queue control(9), enum ieee80211_filter_flags(9), enum
ieee80211_ampdu_mlme_action(9), struct ieee80211_ampdu_params(9), enum
ieee80211_frame_release_type(9), enum ieee80211_rate_control_changed(9),
enum ieee80211_roc_type(9), enum ieee80211_reconfig_type(9), struct
ieee80211_prep_tx_info(9), struct ieee80211_ops(9),
ieee80211_alloc_hw_nm(9), ieee80211_alloc_hw(9),
ieee80211_register_hw(9), struct ieee80211_tpt_blink(9), enum
ieee80211_tpt_led_trigger_flags(9), ieee80211_get_tx_led_name(9),
ieee80211_get_rx_led_name(9), ieee80211_get_assoc_led_name(9),
ieee80211_get_radio_led_name(9), ieee80211_create_tpt_led_trigger(9),
ieee80211_unregister_hw(9), ieee80211_free_hw(9),
ieee80211_restart_hw(9), ieee80211_rx_list(9), ieee80211_rx_napi(9),
ieee80211_rx(9), ieee80211_rx_irqsafe(9), ieee80211_rx_ni(9),
ieee80211_sta_ps_transition(9), ieee80211_sta_ps_transition_ni(9),
ieee80211_sta_pspoll(9), ieee80211_sta_uapsd_trigger(9),
ieee80211_sta_set_buffered(9), ieee80211_get_tx_rates(9),
ieee80211_tx_rate_update(9), ieee80211_tx_status_skb(9),
ieee80211_tx_status_ext(9), ieee80211_tx_status_noskb(9),
ieee80211_tx_status_ni(9), ieee80211_tx_status_irqsafe(9),
ieee80211_report_low_ack(9), struct ieee80211_mutable_offsets(9),
ieee80211_beacon_get_template(9),
ieee80211_beacon_get_template_ema_index(9), struct
ieee80211_ema_beacons(9), ieee80211_beacon_get_template_ema_list(9),
ieee80211_beacon_free_ema_list(9), ieee80211_beacon_get_tim(9),
ieee80211_beacon_get(9), ieee80211_beacon_update_cntdwn(9),
ieee80211_beacon_set_cntdwn(9), ieee80211_csa_finish(9),
ieee80211_beacon_cntdwn_is_complete(9),
ieee80211_color_change_finish(9), ieee80211_proberesp_get(9),
ieee80211_pspoll_get(9), ieee80211_nullfunc_get(9),
ieee80211_probereq_get(9), ieee80211_rts_get(9),
ieee80211_rts_duration(9), ieee80211_ctstoself_get(9),
ieee80211_ctstoself_duration(9), ieee80211_generic_frame_duration(9),
ieee80211_get_buffered_bc(9), ieee80211_get_tkip_p1k_iv(9),
ieee80211_get_tkip_p1k(9), ieee80211_get_tkip_rx_p1k(9),
ieee80211_get_tkip_p2k(9), ieee80211_tkip_add_iv(9),
ieee80211_get_key_rx_seq(9), ieee80211_set_key_rx_seq(9),
ieee80211_gtk_rekey_notify(9), ieee80211_key_mic_failure(9),
ieee80211_key_replay(9), ieee80211_wake_queue(9),
ieee80211_stop_queue(9), ieee80211_queue_stopped(9),
ieee80211_stop_queues(9), ieee80211_wake_queues(9),
ieee80211_scan_completed(9), ieee80211_sched_scan_results(9),
ieee80211_sched_scan_stopped(9), enum
ieee80211_interface_iteration_flags(9), ieee80211_iterate_interfaces(9),
ieee80211_iterate_active_interfaces(9),
ieee80211_iterate_active_interfaces_atomic(9), for_each_interface(9),
for_each_active_interface(9),
ieee80211_iterate_active_interfaces_mtx(9),
ieee80211_iterate_stations_atomic(9), for_each_station(9),
ieee80211_iterate_stations_mtx(9), ieee80211_queue_work(9),
ieee80211_queue_delayed_work(9),
ieee80211_refresh_tx_agg_session_timer(9),
ieee80211_start_tx_ba_session(9), ieee80211_start_tx_ba_cb_irqsafe(9),
ieee80211_stop_tx_ba_session(9), ieee80211_stop_tx_ba_cb_irqsafe(9),
ieee80211_find_sta(9), ieee80211_find_sta_by_ifaddr(9),
ieee80211_find_sta_by_link_addrs(9), ieee80211_sta_block_awake(9),
ieee80211_sta_eosp(9), ieee80211_send_eosp_nullfunc(9),
ieee80211_sta_recalc_aggregates(9), ieee80211_sta_register_airtime(9),
ieee80211_txq_airtime_check(9), ieee80211_txq_aql_pending(9),
ieee80211_iter_keys(9), ieee80211_iter_keys_rcu(9),
ieee80211_iter_chan_contexts_atomic(9),
ieee80211_iter_chan_contexts_mtx(9), ieee80211_ap_probereq_get(9),
ieee80211_beacon_loss(9), ieee80211_connection_loss(9),
ieee80211_disconnect(9), ieee80211_resume_disconnect(9),
ieee80211_hw_restart_disconnect(9), ieee80211_cqm_rssi_notify(9),
ieee80211_cqm_beacon_loss_notify(9), ieee80211_radar_detected(9),
ieee80211_chswitch_done(9), ieee80211_channel_switch_disconnect(9),
ieee80211_request_smps(9), ieee80211_ready_on_channel(9),
ieee80211_remain_on_channel_expired(9), ieee80211_stop_rx_ba_session(9),
ieee80211_mark_rx_ba_filtered_frames(9), ieee80211_send_bar(9),
ieee80211_manage_rx_ba_offl(9), ieee80211_start_rx_ba_session_offl(9),
ieee80211_stop_rx_ba_session_offl(9), ieee80211_rx_ba_timer_expired(9),
struct ieee80211_tx_rate_control(9), enum rate_control_capabilities(9),
rate_control_set_rates(9), ieee80211_get_he_iftype_cap_vif(9),
ieee80211_get_he_6ghz_capa_vif(9), ieee80211_get_eht_iftype_cap_vif(9),
ieee80211_get_uhr_iftype_cap_vif(9), ieee80211_update_mu_groups(9),
ieee80211_ave_rssi(9), ieee80211_calculate_rx_timestamp(9),
ieee80211_report_wowlan_wakeup(9), ieee80211_tx_prepare_skb(9),
ieee80211_parse_tx_radiotap(9), struct ieee80211_noa_data(9),
ieee80211_parse_p2p_noa(9), ieee80211_update_p2p_noa(9),
ieee80211_tdls_oper_request(9), ieee80211_reserve_tid(9),
ieee80211_unreserve_tid(9), ieee80211_tx_dequeue(9),
ieee80211_tx_dequeue_ni(9), ieee80211_handle_wake_tx_queue(9),
ieee80211_next_txq(9), ieee80211_txq_schedule_start(9),
ieee80211_schedule_txq(9), ieee80211_return_txq(9),
ieee80211_txq_may_transmit(9), ieee80211_txq_get_depth(9),
ieee80211_nan_func_terminated(9), ieee80211_nan_func_match(9),
ieee80211_nan_sched_update_done(9), ieee80211_nan_cluster_joined(9),
ieee80211_nan_try_evacuate(9), ieee80211_calc_rx_airtime(9),
ieee80211_calc_tx_airtime(9), ieee80211_get_fils_discovery_tmpl(9),
ieee80211_get_unsol_bcast_probe_resp_tmpl(9),
ieee80211_obss_color_collision_notify(9), ieee80211_is_tx_data(9),
ieee80211_set_active_links(9), ieee80211_set_active_links_async(9),
ieee80211_send_teardown_neg_ttlm(9), ieee80211_chan_width_to_rx_bw(9),
ieee80211_prepare_rx_omi_bw(9), ieee80211_finalize_rx_omi_bw(9),
ieee80211_vif_nan_started(9), ieee80211_encrypt_tx_skb(9)

okay that's the whole page, bestie. source path is ./include/net, dated October 2026, and the page is ieee80211_gtk_rekey_add(9). go forth and rekey responsibly πŸ’–βœ¨πŸŽ€

πŸ“¦ where this page comes from