Bluetooth: Store OOB data present value for each set of remote OOB data
authorMarcel Holtmann <marcel@holtmann.org>
Sat, 31 Jan 2015 07:20:55 +0000 (23:20 -0800)
committerJohan Hedberg <johan.hedberg@intel.com>
Sat, 31 Jan 2015 07:59:45 +0000 (09:59 +0200)
Instead of doing complex calculation every time the OOB data is used,
just calculate the OOB data present value and store it with the OOB
data raw values.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
include/net/bluetooth/hci_core.h
net/bluetooth/hci_core.c

index 1780f1681ecf2a9a8dbc1e0589e95bd6f5008310..a37e10f4e2b30d9e175da7af2dc4689224da5bd6 100644 (file)
@@ -145,6 +145,7 @@ struct oob_data {
        struct list_head list;
        bdaddr_t bdaddr;
        u8 bdaddr_type;
+       u8 present;
        u8 hash192[16];
        u8 rand192[16];
        u8 hash256[16];
index 5d4ac3fbbc08f3c53bc73b08085513fda8af4232..f045c062f8f053c4303656eaff539937c0398f4e 100644 (file)
@@ -2581,9 +2581,15 @@ int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
        if (hash192 && rand192) {
                memcpy(data->hash192, hash192, sizeof(data->hash192));
                memcpy(data->rand192, rand192, sizeof(data->rand192));
+               if (hash256 && rand256)
+                       data->present = 0x03;
        } else {
                memset(data->hash192, 0, sizeof(data->hash192));
                memset(data->rand192, 0, sizeof(data->rand192));
+               if (hash256 && rand256)
+                       data->present = 0x02;
+               else
+                       data->present = 0x00;
        }
 
        if (hash256 && rand256) {
@@ -2592,6 +2598,8 @@ int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
        } else {
                memset(data->hash256, 0, sizeof(data->hash256));
                memset(data->rand256, 0, sizeof(data->rand256));
+               if (hash192 && rand192)
+                       data->present = 0x01;
        }
 
        BT_DBG("%s for %pMR", hdev->name, bdaddr);