> + /* 802.11ai */ > + WLAN_STATUS_FILS_AUTHENTICATION_FAILURE = 108, > + WLAN_STATUS_UNKNOWN_AUTHENTICATION_SERVER = 109, Not sure I see much value in that comment there, but whatever :) > * caching. > * > * @bssid: The AP's BSSID. > - * @pmkid: The PMK material itself. > + * @pmkid: The identifer to refer a PMKSA. typo - identifier > + * @pmk: The PMK for the PMKSA identified by @pmkid. This is used > for key > + * derivation by a FILS STA. Otherwise, %NULL. > + * @pmk_len: Length of the @pmk. The length of @pmk can differ > depending on > + * the hash algorithm used to generate this. > + * @ssid: SSID to specify the ESS within which a PMKSA is valid. > + * @ssid_len: Length of the @ssid in octets. > + * @cache_id: Unsigned 16 bit identifier advertized by an AP > identifying the > + * scope of PMKSA. This is valid only if @ssid_len is non- > zero. > */ > struct cfg80211_pmksa { > const u8 *bssid; > const u8 *pmkid; > + const u8 *pmk; > + size_t pmk_len; > + const u8 *ssid; > + size_t ssid_len; > + u16 cache_id; > }; So I'm really still a bit confused by this. For 802.1X, we decided that using the PMKSA cache to convey the PMK from the host to the device (after doing the handshake) was a bad idea. Can you explain why this is different for FILS? Or wait - I'll attempt myself. In this case, it really *is* a cache, since the firmware will be able to use any of them? > /** > + * struct cfg80211_connect_resp_params - Connection response params I like this, but I think it'd be good to split it out into a separate patch. > +struct cfg80211_connect_resp_params { > + int status; > + u8 bssid[ETH_ALEN]; Is there a reason for this to be the value rather than a pointer? I'm not really sure it actually matters, but the fields below are pointers too (and kinda have to be) so why the difference? (Ok, so on 64-bit systems this is smaller, but it's actually easier to assign a pointer than to memcpy()) > /** > + * DOC: FILS shared key authentication offload Thanks :) johannes