From: h.sandeep Date: Tue, 15 Nov 2016 11:18:34 +0000 (+0530) Subject: Bluetooth: Add MGMT interface for setting IRK X-Git-Tag: submit/tizen/20161216.052309~130 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9612b4f578275e35d4d8586d923e36161e90a056;p=platform%2Fkernel%2Flinux-exynos.git Bluetooth: Add MGMT interface for setting IRK It is required to set IRK from BlueZ if privacy feature is disabled, so this patch adds setting IRK interface to MGMT. Change-Id: I68183b6003c6292e0f7c95b8fe9c0d04890063b5 Signed-off-by: h.sandeep Signed-off-by: Seung-Woo Kim --- diff --git a/include/net/bluetooth/mgmt_tizen.h b/include/net/bluetooth/mgmt_tizen.h index cfb9d5064789..a2ec784da31a 100644 --- a/include/net/bluetooth/mgmt_tizen.h +++ b/include/net/bluetooth/mgmt_tizen.h @@ -222,6 +222,12 @@ struct mgmt_rp_le_set_data_length { } __packed; #define MGMT_LE_SET_DATA_LENGTH_RSP_SIZE 3 +#define MGMT_OP_SET_IRK (TIZEN_OP_CODE_BASE + 0x19) +struct mgmt_cp_set_irk { + uint8_t irk[16]; +} __packed; +#define MGMT_SET_IRK_SIZE 16 + /* EVENTS */ /* For device name update changes */ diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c index 565b4400663b..3fbcfdbe219d 100644 --- a/net/bluetooth/mgmt.c +++ b/net/bluetooth/mgmt.c @@ -7809,6 +7809,31 @@ void mgmt_le_data_length_change_complete(struct hci_dev *hdev, mgmt_event(MGMT_EV_LE_DATA_LENGTH_CHANGED, hdev, &ev, sizeof(ev), NULL); } + +static int set_irk(struct sock *sk, struct hci_dev *hdev, void *cp_data, + u16 len) +{ + struct mgmt_cp_set_irk *cp = cp_data; + int err; + + BT_DBG("request for %s", hdev->name); + + hci_dev_lock(hdev); + + if (!lmp_le_capable(hdev)) { + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_IRK, + MGMT_STATUS_NOT_SUPPORTED); + goto unlocked; + } + + memcpy(hdev->irk, cp->irk, sizeof(hdev->irk)); + + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_IRK, 0, NULL, 0); + +unlocked: + hci_dev_unlock(hdev); + return err; +} #endif /* TIZEN_BT */ static bool ltk_is_valid(struct mgmt_ltk_info *key) @@ -9710,6 +9735,7 @@ static const struct hci_mgmt_handler tizen_mgmt_handlers[] = { MGMT_LE_READ_HOST_SUGGESTED_DATA_LENGTH_SIZE }, { set_le_data_length_params, MGMT_LE_SET_DATA_LENGTH_SIZE }, + { set_irk, MGMT_SET_IRK_SIZE }, }; #endif