aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@intel.com>2014-03-24 14:21:51 -0400
committerMarcel Holtmann <marcel@holtmann.org>2014-03-26 12:31:35 -0400
commit80c24ab85fc27a9683d732016bfa69033a292cf4 (patch)
tree072d5f23ee4adc4f195cf59fc516757a1d095e50
parent9c84d1da974ee8b54fa49ae369648a0247b7cd6f (diff)
Bluetooth: Fix LE responder/initiator address setting
Once directed advertising is brought into the picture simply the lack of an hci_conn object when an le_conn_complete event occurs is no longer a reliable indication that the responder & initiator values need to be set based on our advertising address type. This patch moves the code for setting these values outside of the "if (!conn)" branch and ensures that they get set for any connection where we are in the slave role. Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
-rw-r--r--net/bluetooth/hci_event.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index cfdada38369b..0c393fbae6e9 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -3864,23 +3864,25 @@ static void hci_le_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
3864 &conn->init_addr, 3864 &conn->init_addr,
3865 &conn->init_addr_type); 3865 &conn->init_addr_type);
3866 } 3866 }
3867 } else {
3868 /* Set the responder (our side) address type based on
3869 * the advertising address type.
3870 */
3871 conn->resp_addr_type = hdev->adv_addr_type;
3872 if (hdev->adv_addr_type == ADDR_LE_DEV_RANDOM)
3873 bacpy(&conn->resp_addr, &hdev->random_addr);
3874 else
3875 bacpy(&conn->resp_addr, &hdev->bdaddr);
3876
3877 conn->init_addr_type = ev->bdaddr_type;
3878 bacpy(&conn->init_addr, &ev->bdaddr);
3879 } 3867 }
3880 } else { 3868 } else {
3881 cancel_delayed_work(&conn->le_conn_timeout); 3869 cancel_delayed_work(&conn->le_conn_timeout);
3882 } 3870 }
3883 3871
3872 if (!conn->out) {
3873 /* Set the responder (our side) address type based on
3874 * the advertising address type.
3875 */
3876 conn->resp_addr_type = hdev->adv_addr_type;
3877 if (hdev->adv_addr_type == ADDR_LE_DEV_RANDOM)
3878 bacpy(&conn->resp_addr, &hdev->random_addr);
3879 else
3880 bacpy(&conn->resp_addr, &hdev->bdaddr);
3881
3882 conn->init_addr_type = ev->bdaddr_type;
3883 bacpy(&conn->init_addr, &ev->bdaddr);
3884 }
3885
3884 /* Lookup the identity address from the stored connection 3886 /* Lookup the identity address from the stored connection
3885 * address and address type. 3887 * address and address type.
3886 * 3888 *