#ifndef __SMP_H
#define __SMP_H
struct smp_command_hdr { … } __packed;
#define SMP_CMD_PAIRING_REQ …
#define SMP_CMD_PAIRING_RSP …
struct smp_cmd_pairing { … } __packed;
#define SMP_IO_DISPLAY_ONLY …
#define SMP_IO_DISPLAY_YESNO …
#define SMP_IO_KEYBOARD_ONLY …
#define SMP_IO_NO_INPUT_OUTPUT …
#define SMP_IO_KEYBOARD_DISPLAY …
#define SMP_OOB_NOT_PRESENT …
#define SMP_OOB_PRESENT …
#define SMP_DIST_ENC_KEY …
#define SMP_DIST_ID_KEY …
#define SMP_DIST_SIGN …
#define SMP_DIST_LINK_KEY …
#define SMP_AUTH_NONE …
#define SMP_AUTH_BONDING …
#define SMP_AUTH_MITM …
#define SMP_AUTH_SC …
#define SMP_AUTH_KEYPRESS …
#define SMP_AUTH_CT2 …
#define SMP_CMD_PAIRING_CONFIRM …
struct smp_cmd_pairing_confirm { … } __packed;
#define SMP_CMD_PAIRING_RANDOM …
struct smp_cmd_pairing_random { … } __packed;
#define SMP_CMD_PAIRING_FAIL …
struct smp_cmd_pairing_fail { … } __packed;
#define SMP_CMD_ENCRYPT_INFO …
struct smp_cmd_encrypt_info { … } __packed;
#define SMP_CMD_INITIATOR_IDENT …
struct smp_cmd_initiator_ident { … } __packed;
#define SMP_CMD_IDENT_INFO …
struct smp_cmd_ident_info { … } __packed;
#define SMP_CMD_IDENT_ADDR_INFO …
struct smp_cmd_ident_addr_info { … } __packed;
#define SMP_CMD_SIGN_INFO …
struct smp_cmd_sign_info { … } __packed;
#define SMP_CMD_SECURITY_REQ …
struct smp_cmd_security_req { … } __packed;
#define SMP_CMD_PUBLIC_KEY …
struct smp_cmd_public_key { … } __packed;
#define SMP_CMD_DHKEY_CHECK …
struct smp_cmd_dhkey_check { … } __packed;
#define SMP_CMD_KEYPRESS_NOTIFY …
struct smp_cmd_keypress_notify { … } __packed;
#define SMP_CMD_MAX …
#define SMP_PASSKEY_ENTRY_FAILED …
#define SMP_OOB_NOT_AVAIL …
#define SMP_AUTH_REQUIREMENTS …
#define SMP_CONFIRM_FAILED …
#define SMP_PAIRING_NOTSUPP …
#define SMP_ENC_KEY_SIZE …
#define SMP_CMD_NOTSUPP …
#define SMP_UNSPECIFIED …
#define SMP_REPEATED_ATTEMPTS …
#define SMP_INVALID_PARAMS …
#define SMP_DHKEY_CHECK_FAILED …
#define SMP_NUMERIC_COMP_FAILED …
#define SMP_BREDR_PAIRING_IN_PROGRESS …
#define SMP_CROSS_TRANSP_NOT_ALLOWED …
#define SMP_MIN_ENC_KEY_SIZE …
#define SMP_MAX_ENC_KEY_SIZE …
enum { … };
static inline bool smp_ltk_is_sc(struct smp_ltk *key)
{ … }
static inline u8 smp_ltk_sec_level(struct smp_ltk *key)
{ … }
enum smp_key_pref { … };
int smp_cancel_and_remove_pairing(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 addr_type);
bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level,
enum smp_key_pref key_pref);
int smp_conn_security(struct hci_conn *hcon, __u8 sec_level);
int smp_user_confirm_reply(struct hci_conn *conn, u16 mgmt_op, __le32 passkey);
bool smp_irk_matches(struct hci_dev *hdev, const u8 irk[16],
const bdaddr_t *bdaddr);
int smp_generate_rpa(struct hci_dev *hdev, const u8 irk[16], bdaddr_t *rpa);
int smp_generate_oob(struct hci_dev *hdev, u8 hash[16], u8 rand[16]);
int smp_force_bredr(struct hci_dev *hdev, bool enable);
int smp_register(struct hci_dev *hdev);
void smp_unregister(struct hci_dev *hdev);
#if IS_ENABLED(CONFIG_BT_SELFTEST_SMP)
int bt_selftest_smp(void);
#else
static inline int bt_selftest_smp(void)
{
return 0;
}
#endif
#endif