diff --git a/os_if/linux/qca_vendor.h b/os_if/linux/qca_vendor.h index 12f943a2d5..c7a944edc9 100644 --- a/os_if/linux/qca_vendor.h +++ b/os_if/linux/qca_vendor.h @@ -584,6 +584,24 @@ * * The attributes used with this command are defined in * enum qca_wlan_vendor_attr_radio_combination_matrix. + * + * @QCA_NL80211_VENDOR_SUBCMD_PASN: Subcommand used to offload preassociation + * security negotiation and key generation to user space. + * + * When used as an event, the driver requests userspace to trigger the PASN + * authentication or dropping of a PTKSA for the indicated peer devices. + * When used as a command response, userspace indicates a consolidated + * status report for all the peers that were requested for. + * + * The attributes used with this command are defined in + * enum qca_wlan_vendor_attr_pasn. + * + * @QCA_NL80211_VENDOR_SUBCMD_SECURE_RANGING_CONTEXT: Subcommand used to set + * secure ranging context such as TK and LTF keyseed for each peer + * requested by the driver with a @QCA_NL80211_VENDOR_SUBCMD_PASN event. + * + * The attributes used with this command are defined in + * enum qca_wlan_vendor_attr_secure_ranging_ctx. */ enum qca_nl80211_vendor_subcmds { @@ -828,6 +846,8 @@ enum qca_nl80211_vendor_subcmds { /* 206..212 - reserved for QCA */ QCA_NL80211_VENDOR_SUBCMD_GET_RADIO_COMBINATION_MATRIX = 213, QCA_NL80211_VENDOR_SUBCMD_DRIVER_READY = 214, + QCA_NL80211_VENDOR_SUBCMD_PASN = 215, + QCA_NL80211_VENDOR_SUBCMD_SECURE_RANGING_CONTEXT = 216, }; enum qca_wlan_vendor_tos { @@ -13224,4 +13244,159 @@ enum qca_wlan_vendor_attr_flush_pending { QCA_WLAN_VENDOR_ATTR_FLUSH_PENDING_MAX = QCA_WLAN_VENDOR_ATTR_FLUSH_PENDING_AFTER_LAST - 1, }; + +/** + * enum qca_wlan_vendor_pasn_action - Action to authenticate (and generate keys + * for) or drop existing PASN security association for the listed the + * peers. Used by QCA_WLAN_VENDOR_ATTR_PASN_ACTION and sent from the driver + * to userspace. + * + * @QCA_WLAN_VENDOR_PASN_ACTION_AUTH: Initiate PASN handshake with the peer + * devices indicated with %QCA_WLAN_VENDOR_ATTR_PASN_PEER_MAC_ADDR. + * @QCA_WLAN_VENDOR_PASN_ACTION_DELETE_SECURE_RANGING_CONTEXT: Indication from + * the driver to userspace to inform that the existing PASN keys of the + * peer devices specified with %QCA_WLAN_VENDOR_ATTR_PASN_PEER_MAC_ADDR are + * not valid anymore. + */ +enum qca_wlan_vendor_pasn_action { + QCA_WLAN_VENDOR_PASN_ACTION_AUTH, + QCA_WLAN_VENDOR_PASN_ACTION_DELETE_SECURE_RANGING_CONTEXT, +}; + +/** + * enum qca_wlan_vendor_attr_pasn_peer: Defines the nested attributes used in + * QCA_WLAN_VENDOR_ATTR_PASN_PEERS. + * + * @QCA_WLAN_VENDOR_ATTR_PASN_PEER_SRC_ADDR: This attribute is optional in the + * event from the driver to userspace and represents the local MAC address + * to be used for PASN handshake. When this attribute is present, userspace + * shall use the source address specified in this attribute by the driver + * for PASN handshake with peer device. + * This attribute is required in a command response from userspace to the + * driver and represents the MAC address that was used in PASN handshake + * with the peer device. + * @QCA_WLAN_VENDOR_ATTR_PASN_PEER_MAC_ADDR: Indicates the MAC address of the + * peer device to which PASN handshake is requested in an event from the + * driver to userspace when QCA_WLAN_VENDOR_ATTR_PASN_ACTION is set to + * QCA_WLAN_VENDOR_PASN_ACTION_AUTH. + * Indicates the MAC address of the peer device for which the keys are to + * be invalidated in an event from the driver to userspace when + * QCA_WLAN_VENDOR_ATTR_PASN_ACTION is set to + * QCA_WLAN_VENDOR_PASN_ACTION_DELETE_SECURE_RANGING_CONTEXT. + * Indicates the MAC address of the peer device for which the status is + * being sent in a status report from userspace to the driver. + * @QCA_WLAN_VENDOR_ATTR_PASN_PEER_LTF_KEYSEED_REQUIRED: NLA_FLAG attribute used + * in the event from the driver to userspace. When set, userspace is + * required to derive LTF key seed from KDK and set it to the driver. + * @QCA_WLAN_VENDOR_ATTR_PASN_PEER_STATUS_SUCCESS: NLA_FLAG attribute. This + * attribute is used in the command response from userspace to the driver. + * If present, it indicates the successful PASN handshake with the peer. If + * this flag is not present, it indicates that the PASN handshake with the + * peer device failed. + */ +enum qca_wlan_vendor_attr_pasn_peer { + QCA_WLAN_VENDOR_ATTR_PASN_PEER_INVALID = 0, + QCA_WLAN_VENDOR_ATTR_PASN_PEER_SRC_ADDR = 1, + QCA_WLAN_VENDOR_ATTR_PASN_PEER_MAC_ADDR = 2, + QCA_WLAN_VENDOR_ATTR_PASN_PEER_LTF_KEYSEED_REQUIRED = 3, + QCA_WLAN_VENDOR_ATTR_PASN_PEER_STATUS_SUCCESS = 4, + + /* keep last */ + QCA_WLAN_VENDOR_ATTR_PASN_PEER_AFTER_LAST, + QCA_WLAN_VENDOR_ATTR_PASN_PEER_MAX = + QCA_WLAN_VENDOR_ATTR_PASN_PEER_AFTER_LAST - 1, +}; + +/** + * enum qca_wlan_vendor_attr_pasn: Defines the attributes used in the + * QCA_NL80211_VENDOR_SUBCMD_PASN command. + * + * @QCA_WLAN_VENDOR_ATTR_PASN_ACTION: u32 attribute, possible values are + * defined in enum qca_wlan_vendor_pasn_action and used only in an event + * from the driver to userspace. + * @QCA_WLAN_VENDOR_ATTR_PASN_PEERS: Nested attribute, used to pass PASN peer + * details for each peer and used in both an event and a command response. + * The nested attributes used inside QCA_WLAN_VENDOR_ATTR_PASN_PEERS are + * defined in enum qca_wlan_vendor_attr_pasn_peer. + */ +enum qca_wlan_vendor_attr_pasn { + QCA_WLAN_VENDOR_ATTR_PASN_INVALID = 0, + QCA_WLAN_VENDOR_ATTR_PASN_ACTION = 1, + QCA_WLAN_VENDOR_ATTR_PASN_PEERS = 2, + + /* keep last */ + QCA_WLAN_VENDOR_ATTR_PASN_AFTER_LAST, + QCA_WLAN_VENDOR_ATTR_PASN_MAX = + QCA_WLAN_VENDOR_ATTR_PASN_AFTER_LAST - 1, +}; + +/** + * enum qca_wlan_vendor_secure_ranging_ctx_action - Used to add or delete + * the ranging security context derived from PASN for each peer. Used in + * QCA_WLAN_VENDOR_ATTR_SECURE_RANGING_CTX_ACTION. + * + * @QCA_WLAN_VENDOR_SECURE_RANGING_CTX_ACTION_ADD: Add the secure ranging + * context for the peer. + * @QCA_WLAN_VENDOR_SECURE_RANGING_CTX_ACTION_DELETE: Delete the secure ranging + * context for the peer. + */ +enum qca_wlan_vendor_secure_ranging_ctx_action { + QCA_WLAN_VENDOR_SECURE_RANGING_CTX_ACTION_ADD, + QCA_WLAN_VENDOR_SECURE_RANGING_CTX_ACTION_DELETE, +}; + +/** + * enum qca_wlan_vendor_sha_type - SHA types. Used to configure the SHA type + * used for deriving PASN keys to the driver. Used in + * QCA_WLAN_VENDOR_ATTR_SECURE_RANGING_CTX_SHA_TYPE + * @QCA_WLAN_VENDOR_SHA_256: SHA-256 + * @QCA_WLAN_VENDOR_SHA_384: SHA-384 + */ +enum qca_wlan_vendor_sha_type { + QCA_WLAN_VENDOR_SHA_256, + QCA_WLAN_VENDOR_SHA_384, +}; + +/** + * enum qca_wlan_vendor_attr_secure_ranging_ctx: Defines the attributes used + * to set security context for the PASN peer from userspace to the driver. + * Used with QCA_NL80211_VENDOR_SUBCMD_SECURE_RANGING_CONTEXT. + * + * @QCA_WLAN_VENDOR_ATTR_SECURE_RANGING_CTX_ACTION: u32 attribute, possible + * values are defined in enum qca_wlan_vendor_secure_ranging_ctx_action + * @QCA_WLAN_VENDOR_ATTR_SECURE_RANGING_CTX_SRC_ADDR: The local MAC address that + * was used during the PASN handshake. + * @QCA_WLAN_VENDOR_ATTR_SECURE_RANGING_CTX_PEER_MAC_ADDR: The MAC address of + * the peer device for which secure ranging context is being configured. + * @QCA_WLAN_VENDOR_ATTR_SECURE_RANGING_CTX_SHA_TYPE: u32 attribute, defines the + * hash algorithm to be used, possible values are defined in enum + * qca_wlan_vendor_sha_type. + * @QCA_WLAN_VENDOR_ATTR_SECURE_RANGING_CTX_TK: Variable length attribute, holds + * the temporal key generated from the PASN handshake. The length of this + * attribute is dependent on the value of + * %QCA_WLAN_VENDOR_ATTR_SECURE_RANGING_CTX_CIPHER. + * @QCA_WLAN_VENDOR_ATTR_SECURE_RANGING_CTX_CIPHER: cipher suite to use with the + * TK, u32, as defined in IEEE Std 802.11-2020, 9.4.2.24.2 (Cipher suites) + * (e.g., 0x000FAC04). + * @QCA_WLAN_VENDOR_ATTR_SECURE_RANGING_CTX_LTF_KEYSEED: Variable length + * attribute, holds the LTF keyseed derived from KDK of PASN handshake. + * The length of this attribute is dependent on the value of + * %QCA_WLAN_VENDOR_ATTR_SECURE_RANGING_CTX_SHA_TYPE. + * + */ +enum qca_wlan_vendor_attr_secure_ranging_ctx { + QCA_WLAN_VENDOR_ATTR_SECURE_RANGING_CTX_INVALID = 0, + QCA_WLAN_VENDOR_ATTR_SECURE_RANGING_CTX_ACTION = 1, + QCA_WLAN_VENDOR_ATTR_SECURE_RANGING_CTX_SRC_ADDR = 2, + QCA_WLAN_VENDOR_ATTR_SECURE_RANGING_CTX_PEER_MAC_ADDR = 3, + QCA_WLAN_VENDOR_ATTR_SECURE_RANGING_CTX_SHA_TYPE = 4, + QCA_WLAN_VENDOR_ATTR_SECURE_RANGING_CTX_TK = 5, + QCA_WLAN_VENDOR_ATTR_SECURE_RANGING_CTX_CIPHER = 6, + QCA_WLAN_VENDOR_ATTR_SECURE_RANGING_CTX_LTF_KEYSEED = 7, + + /* keep last */ + QCA_WLAN_VENDOR_ATTR_SECURE_RANGING_CTX_AFTER_LAST, + QCA_WLAN_VENDOR_ATTR_SECURE_RANGING_CTX_MAX = + QCA_WLAN_VENDOR_ATTR_SECURE_RANGING_CTX_AFTER_LAST - 1, +}; #endif