STRUCT CFG80211_CRYPTO_SETTINGS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’œ struct cfg80211_crypto_settings(9) β€” Kernel API Manual, bestie edition πŸ’œ

okay so we're diving into the Kernel API Manual today and honestly? this one's kind of a baddie. it's a struct, it's crypto-adjacent, it's got opinions about your port. let's get into it ✨


🌸 NAME 🌸

struct cfg80211_crypto_settings β€” Crypto settings. that's it, that's the name. short, sweet, iconic. πŸ’…


πŸŽ€ SYNOPSIS πŸŽ€

here she is in all her glory, no cap, copy it exactly:

struct cfg80211_crypto_settings {
    u32 wpa_versions;
    u32 cipher_group;
    int n_ciphers_pairwise;
    u32 ciphers_pairwise[NL80211_MAX_NR_CIPHER_SUITES];
    int n_akm_suites;
    u32 akm_suites[CFG80211_MAX_NUM_AKM_SUITES];
    bool control_port;
    __be16 control_port_ethertype;
    bool control_port_no_encrypt;
    bool control_port_over_nl80211;
    bool control_port_no_preauth;
    const u8 *psk;
    const u8 *sae_pwd;
    u8 sae_pwd_len;
    enum nl80211_sae_pwe_mechanism sae_pwe;
 };

like… look at those arrays. the way that NL80211_MAX_NR_CIPHER_SUITES and CFG80211_MAX_NUM_AKM_SUITES are just doing their thing as the size limits. obsessed. 🫢


πŸ¦‹ Members πŸ¦‹

okay this is the part where we meet everyone in the group chat one by one. no skipping, every single one is getting their moment. πŸ‘‘

  • wpa_versions β€” tells you which WPA versions are enabled, if any at all (the values come from enum nl80211_wpa_versions, iykyk).
  • cipher_group β€” the group key cipher suite. or 0 if it's unset, bestie. zero means unset here, don't come for me.
  • n_ciphers_pairwise β€” the number of AP supported unicast ciphers. like, how many are actually in the bag.
  • ciphers_pairwise β€” the unicast key cipher suites themselves. these are the ciphers, lowkey the main characters.
  • n_akm_suites β€” number of AKM suites. yes, just the count. 🌈
  • akm_suites β€” the AKM suites. the whole lineup, no gatekeeping.
  • control_port β€” whether user space controls the IEEE 802.1X port, i.e., it sets/clears NL80211_STA_FLAG_AUTHORIZED. if this is true, the driver is required to assume the port is unauthorized until user space authorizes it. otherwise, the port is marked authorized by default. that's the whole vibe check: trusted-by-default vs. wait-for-permission. πŸ™ˆ
  • control_port_ethertype β€” the control port protocol that should be allowed through even on unauthorized ports. yes, even then. that's the exception, periodt.
  • control_port_no_encrypt β€” TRUE to prevent encryption of control port protocol frames. capital-T TRUE, exactly like the original says. πŸ”₯
  • control_port_over_nl80211 β€” TRUE if userspace expects to exchange control port frames over NL80211 instead of the network interface. different route, same drama.
  • control_port_no_preauth β€” disables pre-auth rx over the nl80211 control port for mac80211. it's giving "no unsolicited vibes". πŸ’€
  • psk β€” the PSK, for devices supporting 4-way-handshake offload. ✨
  • sae_pwd β€” the password for SAE authentication, for devices supporting SAE offload. πŸ“
  • sae_pwd_len β€” length of the SAE password, for devices supporting SAE offload. it's literally just the length, and she serves.
  • sae_pwe β€” the mechanisms allowed for SAE PWE derivation. and because that needs its own little explanation, it spills over into the next section πŸ‘‡

⭐ Description ⭐

this bit is all about sae_pwe and which derivation mechanisms are allowed. four options, four vibes:

  • NL80211_SAE_PWE_UNSPECIFIED β€” not-specified. this is the "idk, you pick" option, used to indicate userspace didn't specify any preference. in that scenario the driver should just follow its internal policy. main character energy: driver's choice. πŸ’…
  • NL80211_SAE_PWE_HUNT_AND_PECK β€” allow the hunting-and-pecking loop only. just the one. πŸŽ€
  • NL80211_SAE_PWE_HASH_TO_ELEMENT β€” allow hash-to-element only. also just the one, but make it modern. πŸ¦‹
  • NL80211_SAE_PWE_BOTH β€” allow either hunting-and-pecking loop or hash-to-element. why choose, right? both is valid, bestie. 🌈

(part 1 done β€” more coming, don't go anywhere πŸ’–)

✨ SEE ALSO ✨

okay bestie, this is the part where the page name-drops literally everyone πŸ’– it's the group photo at the end of the party, and the guest list is LONG. every single cross-reference it gives you is right here, in the exact order the page gives them, so nothing gets lost and nobody gets left out of the pic 🫢

deep breath. let's read the room 🌸

  • Kernel file ./include/net/cfg80211.h β€” the actual header file all of this lives in, go look at the real source if you're that kind of girl
  • Introduction(9)
  • Device registration(9)

right off the bat, intro doc + device registration β€” the starter pack πŸ“š

that whole run is the band + capability squad, no cap 🌈


yeah, that's a lot of chandef besties πŸ’… they all live in the actions-and-config corner of the world, keep scrolling, we're not even close to done


  • Scanning and BSS list handling(9)
  • struct cfg80211_ssid(9)
  • struct cfg80211_scan_info(9)
  • struct cfg80211_scan_6ghz_params(9)
  • struct cfg80211_scan_request(9)
  • struct cfg80211_match_set(9)
  • struct cfg80211_sched_scan_plan(9)
  • struct cfg80211_bss_select_adjust(9)
  • struct cfg80211_sched_scan_request(9)
  • enum cfg80211_signal_type(9)
  • struct cfg80211_inform_bss(9)
  • struct cfg80211_bss_ies(9)
  • struct cfg80211_bss(9)
  • ieee80211_bss_get_elem(9)
  • ieee80211_bss_get_ie(9)
  • struct cfg80211_auth_request(9)
  • struct cfg80211_assoc_link(9)
  • struct cfg80211_ml_reconf_req(9)
  • enum cfg80211_assoc_req_flags(9)
  • struct cfg80211_assoc_request(9)
  • struct cfg80211_deauth_request(9)
  • struct cfg80211_disassoc_request(9)
  • struct cfg80211_ibss_params(9)
  • struct cfg80211_bss_selection(9)
  • struct cfg80211_connect_params(9)
  • enum cfg80211_connect_params_changed(9)
  • enum wiphy_params_flags(9)
  • struct cfg80211_pmksa(9)
  • struct cfg80211_pkt_pattern(9)
  • struct cfg80211_wowlan_tcp(9)
  • struct cfg80211_wowlan(9)
  • struct cfg80211_coalesce_rules(9)
  • struct cfg80211_coalesce(9)
  • struct cfg80211_wowlan_nd_match(9)
  • struct cfg80211_wowlan_nd_info(9)
  • struct cfg80211_wowlan_wakeup(9)
  • struct cfg80211_gtk_rekey_data(9)
  • struct cfg80211_update_ft_ies_params(9)
  • struct cfg80211_mgmt_tx_params(9)
  • struct cfg80211_dscp_exception(9)
  • struct cfg80211_dscp_range(9)
  • struct cfg80211_qos_map(9)

scanning + BSS + a lil wowlan energy in there too, it's giving "everything and the kitchen sink" 😭


NAN gets its own whole era and honestly? iconic πŸ‘‘ then we slide straight into wiphy everything β€” create it, register it, lock it, queue work on it, free it. main character struct wiphy(9) fr fr ✨


channel ↔ frequency conversions go here, and they ate πŸ’…

all the find-the-IE girlies live here 🧚

regulatory enforcement + the internal regdb functions, then a big old run of MLME / BSS-handling calls. do not ask me why they're all stacked here, that's just where the page put them 🀷

and that's the rest of the roll call β€” rfkill, vendor commands, test mode, then every connect/disconnect/roam/notify helper the page can think of, ending on struct cfg80211_beaconing_check_config(9) πŸŽ€ every single one is a real reference, none of them are skippable, and yes we linked the whole friend group πŸ’œ

okay so we're still scrolling the SEE ALSO wall of fame β€” bestie, it's long but every single one is here, no skipping, that's the rule. πŸ’– Continuing:

okay mid-list breather, we're not even done yet 😭

still here? slay, same 🫢


and that's the whole list, no cap, every single (9) accounted for πŸ‘‘ that's the end of the page bestie, you made it πŸ’…

tiny sign-off: this lil masterpiece lives in ./include/net and it's dated October 2026 β€” screenshot it, bookmark it, send it to the group chat, it's iconic βœ¨πŸŽ€

πŸ“¦ where this page comes from