diff mbox series

[BlueZ,1/2] monitor: Fix not printing latency information with -r

Message ID 20230816223147.2787284-1-luiz.dentz@gmail.com
State New
Headers show
Series [BlueZ,1/2] monitor: Fix not printing latency information with -r | expand

Commit Message

Luiz Augusto von Dentz Aug. 16, 2023, 10:31 p.m. UTC
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

When reading a log from file hci_devba may not work, also store link
information so assign_handle can use use the parent (ACL) destination.
---
 monitor/packet.c | 40 +++++++++++++++++++++++++++++++++++++---
 monitor/packet.h |  1 +
 2 files changed, 38 insertions(+), 3 deletions(-)

Comments

patchwork-bot+bluetooth@kernel.org Aug. 17, 2023, 7:50 p.m. UTC | #1
Hello:

This series was applied to bluetooth/bluez.git (master)
by Luiz Augusto von Dentz <luiz.von.dentz@intel.com>:

On Wed, 16 Aug 2023 15:31:46 -0700 you wrote:
> From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
> 
> When reading a log from file hci_devba may not work, also store link
> information so assign_handle can use use the parent (ACL) destination.
> ---
>  monitor/packet.c | 40 +++++++++++++++++++++++++++++++++++++---
>  monitor/packet.h |  1 +
>  2 files changed, 38 insertions(+), 3 deletions(-)

Here is the summary with links:
  - [BlueZ,1/2] monitor: Fix not printing latency information with -r
    https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=31941ff3977c
  - [BlueZ,2/2] monitor: Detect LE-ACL connections
    https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=aed756136b7f

You are awesome, thank you!
diff mbox series

Patch

diff --git a/monitor/packet.c b/monitor/packet.c
index 84af03a0011f..8eae8c9ea8fa 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -174,6 +174,18 @@  static uint16_t get_format(uint32_t cookie)
 
 static struct packet_conn_data conn_list[MAX_CONN];
 
+static struct packet_conn_data *lookup_parent(uint16_t handle)
+{
+	int i;
+
+	for (i = 0; i < MAX_CONN; i++) {
+		if (conn_list[i].link == handle)
+			return &conn_list[i];
+	}
+
+	return NULL;
+}
+
 static void assign_handle(uint16_t index, uint16_t handle, uint8_t type,
 					uint8_t *dst, uint8_t dst_type)
 {
@@ -181,15 +193,27 @@  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;
+			hci_devba(index, (bdaddr_t *)conn_list[i].src);
 
 			conn_list[i].index = index;
 			conn_list[i].handle = handle;
 			conn_list[i].type = type;
 
-			if (!dst)
+			if (!dst) {
+				struct packet_conn_data *p;
+
+				/* If destination is not set attempt to use the
+				 * parent one if that exists.
+				 */
+				p = lookup_parent(handle);
+				if (p) {
+					memcpy(conn_list[i].dst, p->dst,
+						sizeof(conn_list[i].dst));
+					conn_list[i].dst_type = p->dst_type;
+				}
+
 				break;
+			}
 
 			memcpy(conn_list[i].dst, dst, sizeof(conn_list[i].dst));
 			conn_list[i].dst_type = dst_type;
@@ -8725,9 +8749,14 @@  static void le_set_cig_params_rsp(uint16_t index, const void *data,
 static void print_cis(const void *data, int i)
 {
 	const struct bt_hci_cis *cis = data;
+	struct packet_conn_data *conn;
 
 	print_field("CIS Handle: %d", cis->cis_handle);
 	print_field("ACL Handle: %d", cis->acl_handle);
+
+	conn = packet_get_conn_data(cis->acl_handle);
+	if (conn)
+		conn->link = cis->cis_handle;
 }
 
 static void le_create_cis_cmd(uint16_t index, const void *data, uint8_t size)
@@ -11643,11 +11672,16 @@  static void le_req_cis_evt(struct timeval *tv, uint16_t index,
 					const void *data, uint8_t size)
 {
 	const struct bt_hci_evt_le_cis_req *evt = data;
+	struct packet_conn_data *conn;
 
 	print_field("ACL Handle: %d", le16_to_cpu(evt->acl_handle));
 	print_field("CIS Handle: %d", le16_to_cpu(evt->cis_handle));
 	print_field("CIG ID: 0x%2.2x", evt->cig_id);
 	print_field("CIS ID: 0x%2.2x", evt->cis_id);
+
+	conn = packet_get_conn_data(evt->acl_handle);
+	if (conn)
+		conn->link = evt->cis_handle;
 }
 
 static void print_bis_handle(const void *data, int i)
diff --git a/monitor/packet.h b/monitor/packet.h
index 750ce405e4bc..384f460d2f58 100644
--- a/monitor/packet.h
+++ b/monitor/packet.h
@@ -42,6 +42,7 @@  struct packet_conn_data {
 	uint16_t index;
 	uint8_t  src[6];
 	uint16_t handle;
+	uint16_t link;
 	uint8_t  type;
 	uint8_t  dst[6];
 	uint8_t  dst_type;