From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx> This stops calling hci_devba everytime the GATT db needs to be loaded since that causes a raw socket to be open to read back the address pointed by the index, instead this is done only once at assign_handle and store in packet_conn_data. --- monitor/att.c | 6 +----- monitor/packet.c | 3 +++ monitor/packet.h | 1 + 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/monitor/att.c b/monitor/att.c index 152a5f320..00db8ddaa 100644 --- a/monitor/att.c +++ b/monitor/att.c @@ -1228,7 +1228,6 @@ static void load_gatt_db(struct packet_conn_data *conn) { struct att_conn_data *data = conn->data; char filename[PATH_MAX]; - bdaddr_t src; char local[18]; char peer[18]; @@ -1243,10 +1242,7 @@ static void load_gatt_db(struct packet_conn_data *conn) if (!gatt_db_isempty(data->ldb) && !gatt_db_isempty(data->rdb)) return; - if (hci_devba(conn->index, &src) < 0) - return; - - ba2str(&src, local); + ba2str((bdaddr_t *)conn->src, local); ba2str((bdaddr_t *)conn->dst, peer); if (gatt_db_isempty(data->ldb)) { diff --git a/monitor/packet.c b/monitor/packet.c index c7739fba5..bd9efd2c7 100644 --- a/monitor/packet.c +++ b/monitor/packet.c @@ -178,6 +178,9 @@ static void assign_handle(uint16_t index, uint16_t handle, uint8_t type, for (i = 0; i < MAX_CONN; i++) { if (conn_list[i].handle == 0x0000) { + if (hci_devba(index, (bdaddr_t *)conn_list[i].src) < 0) + return; + conn_list[i].index = index; conn_list[i].handle = handle; conn_list[i].type = type; diff --git a/monitor/packet.h b/monitor/packet.h index 97d683e3a..3a6b9f7a1 100644 --- a/monitor/packet.h +++ b/monitor/packet.h @@ -25,6 +25,7 @@ struct packet_conn_data { uint16_t index; + uint8_t src[6]; uint16_t handle; uint8_t type; uint8_t dst[6]; -- 2.35.1