Bluetooth: Host: Fix wrong init address when controller resolved address

The init addr should contain the on-air address used to establish the
connection. The dst address contains either the current RPA of the
unknown peer, or the identity address after identity information has
been exchanged.

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
This commit is contained in:
Joakim Andersson 2019-08-02 16:04:01 +02:00 committed by Carles Cufí
commit 45da629b24
3 changed files with 33 additions and 20 deletions

View file

@ -1929,6 +1929,7 @@ struct bt_conn *bt_conn_create_le(const bt_addr_le_t *peer,
const struct bt_le_conn_param *param)
{
struct bt_conn *conn;
bt_addr_le_t dst;
if (!atomic_test_bit(bt_dev.flags, BT_DEV_READY)) {
return NULL;
@ -1957,7 +1958,15 @@ struct bt_conn *bt_conn_create_le(const bt_addr_le_t *peer,
}
}
conn = bt_conn_add_le(peer);
if (peer->type == BT_ADDR_LE_PUBLIC_ID ||
peer->type == BT_ADDR_LE_RANDOM_ID) {
bt_addr_le_copy(&dst, peer);
dst.type -= BT_ADDR_LE_PUBLIC_ID;
} else {
bt_addr_le_copy(&dst, bt_lookup_id_addr(BT_ID_DEFAULT, peer));
}
conn = bt_conn_add_le(&dst);
if (!conn) {
return NULL;
}
@ -1965,9 +1974,6 @@ struct bt_conn *bt_conn_create_le(const bt_addr_le_t *peer,
/* Only default identity supported for now */
conn->id = BT_ID_DEFAULT;
/* Set initial address - will be updated later if necessary. */
bt_addr_le_copy(&conn->le.resp_addr, peer);
bt_conn_set_param_le(conn, param);
bt_conn_set_state(conn, BT_CONN_CONNECT_SCAN);