diff mbox series

[BlueZ,v2,2/2] iso-tester: Add more tests for getpeername

Message ID 20250610180244.1133512-2-luiz.dentz@gmail.com
State New
Headers show
Series [BlueZ,v2,1/2] btdev: Fix not setting sid on BT_HCI_EVT_LE_PA_SYNC_ESTABLISHED | expand

Commit Message

Luiz Augusto von Dentz June 10, 2025, 6:02 p.m. UTC
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

This tests setting SID for broadcast source in adition to existing test
that was testing broadcast sink only, so this adds/updates the following
test:

ISO Broadcaster SID auto - Success
ISO Broadcaster SID 0x01 - Success
ISO Broadcaster Receiver SID auto - Success
ISO Broadcaster Receiver SID 0x01 - Success
---
 emulator/bthost.c   |  3 +-
 emulator/bthost.h   |  2 +-
 tools/iso-tester.c  | 74 ++++++++++++++++++++++++++++++++++++++++-----
 tools/mesh-tester.c |  2 +-
 tools/mgmt-tester.c |  4 +--
 5 files changed, 72 insertions(+), 13 deletions(-)
diff mbox series

Patch

diff --git a/emulator/bthost.c b/emulator/bthost.c
index f53b4382d6f9..7ab4533d12b4 100644
--- a/emulator/bthost.c
+++ b/emulator/bthost.c
@@ -3467,7 +3467,7 @@  void bthost_set_scan_enable(struct bthost *bthost, uint8_t enable)
 							&cp, sizeof(cp));
 }
 
-void bthost_set_ext_adv_params(struct bthost *bthost)
+void bthost_set_ext_adv_params(struct bthost *bthost, uint8_t sid)
 {
 	const uint8_t interval_20ms[] = { 0x20, 0x00, 0x00 };
 	struct bt_hci_cmd_le_set_ext_adv_params cp;
@@ -3477,6 +3477,7 @@  void bthost_set_ext_adv_params(struct bthost *bthost)
 	cp.evt_properties = cpu_to_le16(0x0013);
 	memcpy(cp.min_interval, interval_20ms, sizeof(cp.min_interval));
 	memcpy(cp.max_interval, interval_20ms, sizeof(cp.max_interval));
+	cp.sid = sid;
 	send_command(bthost, BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
 							&cp, sizeof(cp));
 }
diff --git a/emulator/bthost.h b/emulator/bthost.h
index db640daff38a..456f631d51a0 100644
--- a/emulator/bthost.h
+++ b/emulator/bthost.h
@@ -113,7 +113,7 @@  void bthost_set_adv_enable(struct bthost *bthost, uint8_t enable);
 
 void bthost_set_ext_adv_data(struct bthost *bthost, const uint8_t *data,
 								uint8_t len);
-void bthost_set_ext_adv_params(struct bthost *bthost);
+void bthost_set_ext_adv_params(struct bthost *bthost, uint8_t sid);
 void bthost_set_ext_adv_enable(struct bthost *bthost, uint8_t enable);
 void bthost_set_pa_params(struct bthost *bthost);
 void bthost_set_pa_data(struct bthost *bthost, const uint8_t *data,
diff --git a/tools/iso-tester.c b/tools/iso-tester.c
index 7bc0eb12c1c5..725fd3338c9f 100644
--- a/tools/iso-tester.c
+++ b/tools/iso-tester.c
@@ -1412,6 +1412,26 @@  static const struct iso_client_data bcast_1_1_16_2_1_send = {
 	.base_len = sizeof(base_lc3_16_2_1),
 };
 
+static const struct iso_client_data bcast_16_2_1_send_sid = {
+	.qos = QOS_OUT_16_2_1,
+	.expect_err = 0,
+	.send = &send_16_2_1,
+	.bcast = true,
+	.base = base_lc3_16_2_1,
+	.base_len = sizeof(base_lc3_16_2_1),
+	.sid = 0xff,
+};
+
+static const struct iso_client_data bcast_16_2_1_send_sid1 = {
+	.qos = QOS_OUT_16_2_1,
+	.expect_err = 0,
+	.send = &send_16_2_1,
+	.bcast = true,
+	.base = base_lc3_16_2_1,
+	.base_len = sizeof(base_lc3_16_2_1),
+	.sid = 0x01,
+};
+
 static const struct iso_client_data bcast_16_2_1_recv = {
 	.qos = QOS_IN_16_2_1,
 	.expect_err = 0,
@@ -1439,6 +1459,16 @@  static const struct iso_client_data bcast_16_2_1_recv_sid = {
 	.sid = 0xff,
 };
 
+static const struct iso_client_data bcast_16_2_1_recv_sid1 = {
+	.qos = QOS_IN_16_2_1,
+	.expect_err = 0,
+	.recv = &send_16_2_1,
+	.bcast = true,
+	.server = true,
+	.big = true,
+	.sid = 0x01,
+};
+
 static const struct iso_client_data bcast_enc_16_2_1_recv = {
 	.qos = QOS_IN_ENC_16_2_1,
 	.expect_err = 0,
@@ -1658,7 +1688,8 @@  static void setup_powered_callback(uint8_t status, uint16_t length,
 		host = hciemu_client_host(client);
 		bthost_set_cmd_complete_cb(host, client_connectable_complete,
 									data);
-		bthost_set_ext_adv_params(host);
+		bthost_set_ext_adv_params(host, isodata->sid != 0xff ?
+						isodata->sid : 0x00);
 		bthost_set_ext_adv_enable(host, 0x01);
 
 		if (!isodata)
@@ -1836,8 +1867,9 @@  end:
 
 static int create_iso_sock(struct test_data *data)
 {
+	const struct iso_client_data *isodata = data->test_data;
 	const uint8_t *master_bdaddr;
-	struct sockaddr_iso addr;
+	struct sockaddr_iso *addr;
 	int sk, err;
 
 	sk = socket(PF_BLUETOOTH, SOCK_SEQPACKET | SOCK_NONBLOCK, BTPROTO_ISO);
@@ -1855,12 +1887,26 @@  static int create_iso_sock(struct test_data *data)
 		return -ENODEV;
 	}
 
-	memset(&addr, 0, sizeof(addr));
-	addr.iso_family = AF_BLUETOOTH;
-	bacpy(&addr.iso_bdaddr, (void *) master_bdaddr);
-	addr.iso_bdaddr_type = BDADDR_LE_PUBLIC;
+	if (isodata->bcast && isodata->sid) {
+		addr = malloc(sizeof(*addr) + sizeof(*addr->iso_bc));
+		memset(addr, 0, sizeof(*addr) + sizeof(*addr->iso_bc));
+		addr->iso_family = AF_BLUETOOTH;
+		bacpy(&addr->iso_bdaddr, (void *) master_bdaddr);
+		addr->iso_bdaddr_type = BDADDR_LE_PUBLIC;
+		addr->iso_bc->bc_bdaddr_type = BDADDR_LE_PUBLIC;
+		addr->iso_bc->bc_sid = isodata->sid;
+		err = bind(sk, (struct sockaddr *) addr, sizeof(*addr) +
+						sizeof(*addr->iso_bc));
+	} else {
+		addr = malloc(sizeof(*addr));
+		memset(addr, 0, sizeof(*addr));
+		addr->iso_family = AF_BLUETOOTH;
+		bacpy(&addr->iso_bdaddr, (void *) master_bdaddr);
+		addr->iso_bdaddr_type = BDADDR_LE_PUBLIC;
+		err = bind(sk, (struct sockaddr *) addr, sizeof(addr));
+	}
 
-	if (bind(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
+	if (err < 0) {
 		err = -errno;
 		tester_warn("Can't bind socket: %s (%d)", strerror(errno),
 									errno);
@@ -2623,6 +2669,8 @@  static gboolean iso_connect(GIOChannel *io, GIOCondition cond,
 			tester_test_failed();
 			return FALSE;
 		}
+
+		tester_print("SID: 0x%02x", addr.bc.bc_sid);
 	}
 
 	len = sizeof(sk_err);
@@ -3886,14 +3934,24 @@  int main(int argc, char *argv[])
 							&bcast_1_1_16_2_1_send,
 							setup_powered,
 							test_bcast);
+	test_iso("ISO Broadcaster SID auto - Success", &bcast_16_2_1_send_sid,
+							setup_powered,
+							test_bcast);
+	test_iso("ISO Broadcaster SID 0x01 - Success", &bcast_16_2_1_send_sid1,
+							setup_powered,
+							test_bcast);
 
 	test_iso("ISO Broadcaster Receiver - Success", &bcast_16_2_1_recv,
 							setup_powered,
 							test_bcast_recv);
-	test_iso("ISO Broadcaster Receiver SID 0xff - Success",
+	test_iso("ISO Broadcaster Receiver SID auto - Success",
 							&bcast_16_2_1_recv_sid,
 							setup_powered,
 							test_bcast_recv);
+	test_iso("ISO Broadcaster Receiver SID 0x01 - Success",
+							&bcast_16_2_1_recv_sid1,
+							setup_powered,
+							test_bcast_recv);
 	test_iso2("ISO Broadcaster Receiver2 - Success", &bcast_16_2_1_recv2,
 							setup_powered,
 							test_bcast_recv2);
diff --git a/tools/mesh-tester.c b/tools/mesh-tester.c
index d7b3b6f9b1db..848ccbe51a87 100644
--- a/tools/mesh-tester.c
+++ b/tools/mesh-tester.c
@@ -968,7 +968,7 @@  static void setup_bthost(void)
 	if (data->hciemu_type == HCIEMU_TYPE_LE ||
 			test->client_enable_adv) {
 		if (data->hciemu_type >= HCIEMU_TYPE_BREDRLE50) {
-			bthost_set_ext_adv_params(bthost);
+			bthost_set_ext_adv_params(bthost, 0x00);
 			bthost_set_ext_adv_enable(bthost, 0x01);
 		} else
 			bthost_set_adv_enable(bthost, 0x01);
diff --git a/tools/mgmt-tester.c b/tools/mgmt-tester.c
index 030827cd51d1..a1d48152f23b 100644
--- a/tools/mgmt-tester.c
+++ b/tools/mgmt-tester.c
@@ -6169,7 +6169,7 @@  static void setup_bthost(void)
 	if (data->hciemu_type == HCIEMU_TYPE_LE ||
 		test->client_enable_adv) {
 		if (data->hciemu_type >= HCIEMU_TYPE_BREDRLE50) {
-			bthost_set_ext_adv_params(bthost);
+			bthost_set_ext_adv_params(bthost, 0x00);
 			bthost_set_ext_adv_enable(bthost, 0x01);
 		} else
 			bthost_set_adv_enable(bthost, 0x01);
@@ -11724,7 +11724,7 @@  static void trigger_device_found(void *user_data)
 
 		bthost_set_adv_enable(bthost, 0x01);
 	} else if (data->hciemu_type >= HCIEMU_TYPE_BREDRLE50) {
-		bthost_set_ext_adv_params(bthost);
+		bthost_set_ext_adv_params(bthost, 0x00);
 		if (test->set_adv)
 			bthost_set_ext_adv_data(bthost, test->adv_data,
 							test->adv_data_len);