From: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
To: linux-bluetooth@vger.kernel.org
Subject: [PATCH BlueZ v1 03/27] mgmt-tester: Wait for LL Privacy setup to complete
Date: Thu, 22 Oct 2026 11:46:36 -0400 [thread overview]
Message-ID: <20261022154701.3959500-4-luiz.dentz@gmail.com> (raw)
In-Reply-To: <20261022154701.3959500-1-luiz.dentz@gmail.com>
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
The LL Privacy setups send Power On, Add Device, Set Device Flags and Add
Advertising without waiting for their replies, so setup may complete
while they are still pending, even twice, and the test then gets their
events, e.g. the Device Flags Changed of Add Device instead of the one
of Set Device Flags.
Make each of them a setup condition, and once all are met wait for the
controller to settle, i.e. no HCI command for 100 ms, as the kernel
keeps programming the accept and resolving lists after replying, which
a test may otherwise take for its own commands.
This shows with time travel, where computing takes no time:
LL Privacy, before: 13/27 passed
LL Privacy, after: 27/27 passed
Assisted-by: Claude:claude-opus-5-5
---
tools/mgmt-tester.c | 201 +++++++++++++++++++++++++++++++++++++++++---
1 file changed, 190 insertions(+), 11 deletions(-)
diff --git a/tools/mgmt-tester.c b/tools/mgmt-tester.c
index 631c906f3aa8..abfe57dad0c8 100644
--- a/tools/mgmt-tester.c
+++ b/tools/mgmt-tester.c
@@ -76,6 +76,8 @@ struct test_data {
struct queue *expect_hci_q;
int unmet_conditions;
int unmet_setup_conditions;
+ bool setup_settle;
+ unsigned int settle_id;
int sk;
struct simult_discovery simult;
};
@@ -119,6 +121,11 @@ static void test_post_teardown(const void *test_data)
simult_discovery_cleanup(data);
+ if (data->settle_id) {
+ timeout_remove(data->settle_id);
+ data->settle_id = 0;
+ }
+
if (data->sk >= 0)
close(data->sk);
@@ -554,6 +561,50 @@ static void test_add_setup_condition(struct test_data *data)
data->unmet_setup_conditions);
}
+/* Time without HCI commands after which the controller is considered
+ * settled, see test_setup_settle().
+ */
+#define SETTLE_TIMEOUT 100
+
+static bool settle_timeout(void *user_data)
+{
+ struct test_data *data = user_data;
+
+ data->settle_id = 0;
+ hciemu_clear_central_post_command_hooks(data->hciemu);
+
+ tester_print("Controller settled");
+ tester_setup_complete();
+
+ return false;
+}
+
+static void settle_command(uint16_t opcode, const void *param,
+ uint8_t length, void *user_data)
+{
+ struct test_data *data = user_data;
+
+ if (data->settle_id)
+ timeout_remove(data->settle_id);
+
+ data->settle_id = timeout_add(SETTLE_TIMEOUT, settle_timeout, data,
+ NULL);
+}
+
+/* The kernel may still program the controller, e.g. its accept and
+ * resolving lists, after replying to the setup commands, so wait for the
+ * controller to be idle for a while, or a test may see the setup commands
+ * instead of its own.
+ */
+static void test_setup_settle(struct test_data *data)
+{
+ tester_print("Waiting for the controller to settle");
+
+ hciemu_add_central_post_command_hook(data->hciemu, settle_command,
+ data);
+ settle_command(0, NULL, 0, data);
+}
+
static void test_setup_condition_complete(struct test_data *data)
{
data->unmet_setup_conditions--;
@@ -564,6 +615,11 @@ static void test_setup_condition_complete(struct test_data *data)
if (data->unmet_setup_conditions > 0)
return;
+ if (data->setup_settle) {
+ test_setup_settle(data);
+ return;
+ }
+
tester_setup_complete();
}
@@ -6624,6 +6680,18 @@ static void setup_powered_callback(uint8_t status, uint16_t length,
setup_bthost();
}
+/* Powered on as one of several setup commands, which completes once all
+ * of them are, not just the client setup started from here.
+ */
+static void setup_powered_condition_callback(uint8_t status, uint16_t length,
+ const void *param, void *user_data)
+{
+ setup_powered_callback(status, length, param, user_data);
+
+ if (status == MGMT_STATUS_SUCCESS)
+ test_setup_condition_complete(tester_get_data());
+}
+
static void setup_class(const void *test_data)
{
struct test_data *data = tester_get_data();
@@ -11526,6 +11594,8 @@ static void setup_add_device_callback(uint8_t status, uint16_t length,
}
tester_print("New Device is Added");
+
+ test_setup_condition_complete(tester_get_data());
}
static void setup_remove_device_callback(uint8_t status, uint16_t length,
@@ -11559,6 +11629,17 @@ static void setup_add_adv_callback(uint8_t status, uint16_t length,
rp->instance);
}
+/* Last of several setup commands, see setup_powered_condition_callback() */
+static void setup_add_advertising_condition_callback(uint8_t status,
+ uint16_t length, const void *param,
+ void *user_data)
+{
+ setup_add_advertising_callback(status, length, param, user_data);
+
+ if (status == MGMT_STATUS_SUCCESS)
+ test_setup_condition_complete(tester_get_data());
+}
+
static void setup_add_adv_callback_adv(uint8_t status, uint16_t length,
const void *param, void *user_data)
{
@@ -11582,7 +11663,7 @@ static void setup_add_adv_callback_adv(uint8_t status, uint16_t length,
mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
sizeof(adv_param), adv_param,
- setup_add_advertising_callback,
+ setup_add_advertising_condition_callback,
NULL, NULL);
}
@@ -11591,17 +11672,22 @@ static void setup_ll_privacy_set_flags_1(const void *test_data)
struct test_data *data = tester_get_data();
unsigned char param[] = { 0x01 };
+ data->setup_settle = true;
+
mgmt_send(data->mgmt, MGMT_OP_LOAD_IRKS, data->mgmt_index,
sizeof(load_irks_le_public_param_1),
load_irks_le_public_param_1,
setup_load_irks_callback, NULL, NULL);
/* Set Powered On */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
sizeof(param), param,
- setup_powered_callback, NULL, NULL);
+ setup_powered_condition_callback,
+ NULL, NULL);
/* Add Device 1 */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_le_public_param_1),
add_device_le_public_param_1,
@@ -11617,6 +11703,8 @@ static void setup_set_device_flags_callback(uint8_t status, uint16_t length,
}
tester_print("Device Flags are set");
+
+ test_setup_condition_complete(tester_get_data());
}
static void setup_ll_privacy_add_2(const void *test_data)
@@ -11624,6 +11712,8 @@ static void setup_ll_privacy_add_2(const void *test_data)
struct test_data *data = tester_get_data();
unsigned char param[] = { 0x01 };
+ data->setup_settle = true;
+
/* Add IRKs of Device1 and Device2 */
mgmt_send(data->mgmt, MGMT_OP_LOAD_IRKS, data->mgmt_index,
sizeof(load_irks_2_devices_param),
@@ -11631,16 +11721,20 @@ static void setup_ll_privacy_add_2(const void *test_data)
setup_load_irks_callback, NULL, NULL);
/* Set Powered On */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
sizeof(param), param,
- setup_powered_callback, NULL, NULL);
+ setup_powered_condition_callback,
+ NULL, NULL);
/* Add Device 1 */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_le_public_param_1),
add_device_le_public_param_1,
setup_add_device_callback, NULL, NULL);
/* Device 1 Flags */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_DEVICE_FLAGS, data->mgmt_index,
sizeof(set_device_flags_param_1),
set_device_flags_param_1,
@@ -11653,6 +11747,8 @@ static void setup_ll_privacy_set_flags_3(const void *test_data)
struct test_data *data = tester_get_data();
unsigned char param[] = { 0x01 };
+ data->setup_settle = true;
+
/* Add IRKs of Device1 and Device2 */
mgmt_send(data->mgmt, MGMT_OP_LOAD_IRKS, data->mgmt_index,
sizeof(load_irks_2_devices_param),
@@ -11660,17 +11756,21 @@ static void setup_ll_privacy_set_flags_3(const void *test_data)
setup_load_irks_callback, NULL, NULL);
/* Set Powered On */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
sizeof(param), param,
- setup_powered_callback, NULL, NULL);
+ setup_powered_condition_callback,
+ NULL, NULL);
/* Add Device 1 */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_le_public_param_1),
add_device_le_public_param_1,
setup_add_device_callback, NULL, NULL);
/* Device 1 Flags */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_DEVICE_FLAGS, data->mgmt_index,
sizeof(set_device_flags_param_1),
set_device_flags_param_1,
@@ -11678,6 +11778,7 @@ static void setup_ll_privacy_set_flags_3(const void *test_data)
NULL);
/* Add Device 2 */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_le_public_param_2),
add_device_le_public_param_2,
@@ -11698,6 +11799,8 @@ static void setup_ll_privacy_3_devices(const void *test_data)
struct test_data *data = tester_get_data();
unsigned char param[] = { 0x01 };
+ data->setup_settle = true;
+
/* Add IRKs of 4 Devices */
mgmt_send(data->mgmt, MGMT_OP_LOAD_IRKS, data->mgmt_index,
sizeof(load_irks_4_devices_param),
@@ -11705,12 +11808,14 @@ static void setup_ll_privacy_3_devices(const void *test_data)
setup_load_irks_callback, NULL, NULL);
/* Add Device 1 */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_le_public_param_1),
add_device_le_public_param_1,
setup_add_device_callback, NULL, NULL);
/* Device 1 Flags */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_DEVICE_FLAGS, data->mgmt_index,
sizeof(set_device_flags_param_1),
set_device_flags_param_1,
@@ -11718,12 +11823,14 @@ static void setup_ll_privacy_3_devices(const void *test_data)
NULL);
/* Add Device 2 */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_le_public_param_2),
add_device_le_public_param_2,
setup_add_device_callback, NULL, NULL);
/* Device 2 Flags */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_DEVICE_FLAGS, data->mgmt_index,
sizeof(set_device_flags_param_2),
set_device_flags_param_2,
@@ -11731,21 +11838,25 @@ static void setup_ll_privacy_3_devices(const void *test_data)
NULL);
/* Add Device 3 */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_le_public_param_3),
add_device_le_public_param_3,
setup_add_device_callback, NULL, NULL);
/* Device 3 Flags */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_DEVICE_FLAGS, data->mgmt_index,
sizeof(set_device_flags_param_3),
set_device_flags_param_3,
setup_set_device_flags_callback, NULL,
NULL);
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
sizeof(param), param,
- setup_powered_callback, NULL, NULL);
+ setup_powered_condition_callback,
+ NULL, NULL);
}
static void setup_ll_privacy_set_flags_4(const void *test_data)
@@ -11753,6 +11864,8 @@ static void setup_ll_privacy_set_flags_4(const void *test_data)
struct test_data *data = tester_get_data();
unsigned char param[] = { 0x01 };
+ data->setup_settle = true;
+
hciemu_set_central_le_rl_len(data->hciemu, 4);
/* Add IRKs of 4 Devices */
@@ -11762,12 +11875,14 @@ static void setup_ll_privacy_set_flags_4(const void *test_data)
setup_load_irks_callback, NULL, NULL);
/* Add Device 1 */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_le_public_param_1),
add_device_le_public_param_1,
setup_add_device_callback, NULL, NULL);
/* Device 1 Flags */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_DEVICE_FLAGS, data->mgmt_index,
sizeof(set_device_flags_param_1),
set_device_flags_param_1,
@@ -11775,12 +11890,14 @@ static void setup_ll_privacy_set_flags_4(const void *test_data)
NULL);
/* Add Device 2 */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_le_public_param_2),
add_device_le_public_param_2,
setup_add_device_callback, NULL, NULL);
/* Device 2 Flags */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_DEVICE_FLAGS, data->mgmt_index,
sizeof(set_device_flags_param_2),
set_device_flags_param_2,
@@ -11788,12 +11905,14 @@ static void setup_ll_privacy_set_flags_4(const void *test_data)
NULL);
/* Add Device 3 */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_le_public_param_3),
add_device_le_public_param_3,
setup_add_device_callback, NULL, NULL);
/* Device 3 Flags */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_DEVICE_FLAGS, data->mgmt_index,
sizeof(set_device_flags_param_3),
set_device_flags_param_3,
@@ -11801,14 +11920,17 @@ static void setup_ll_privacy_set_flags_4(const void *test_data)
NULL);
/* Add Device 4 */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_le_public_param_4),
add_device_le_public_param_4,
setup_add_device_callback, NULL, NULL);
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
sizeof(param), param,
- setup_powered_callback, NULL, NULL);
+ setup_powered_condition_callback,
+ NULL, NULL);
}
static void setup_ll_privacy_add_3(const void *test_data)
@@ -11816,6 +11938,8 @@ static void setup_ll_privacy_add_3(const void *test_data)
struct test_data *data = tester_get_data();
unsigned char param[] = { 0x01 };
+ data->setup_settle = true;
+
hciemu_set_central_le_al_len(data->hciemu, 2);
/* Add IRKs of 3 Devices */
@@ -11825,17 +11949,21 @@ static void setup_ll_privacy_add_3(const void *test_data)
setup_load_irks_callback, NULL, NULL);
/* Set Powered On */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
sizeof(param), param,
- setup_powered_callback, NULL, NULL);
+ setup_powered_condition_callback,
+ NULL, NULL);
/* Add Device 1 */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_le_public_param_1),
add_device_le_public_param_1,
setup_add_device_callback, NULL, NULL);
/* Device 1 Flags */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_DEVICE_FLAGS, data->mgmt_index,
sizeof(set_device_flags_param_1),
set_device_flags_param_1,
@@ -11843,12 +11971,14 @@ static void setup_ll_privacy_add_3(const void *test_data)
NULL);
/* Add Device 2 */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_le_public_param_2),
add_device_le_public_param_2,
setup_add_device_callback, NULL, NULL);
/* Device 2 Flags */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_DEVICE_FLAGS, data->mgmt_index,
sizeof(set_device_flags_param_2),
set_device_flags_param_2,
@@ -11863,9 +11993,13 @@ static void setup_ll_privacy_device2_discovry(const void *test_data)
unsigned char param[] = { 0x01 };
uint8_t disc_param[] = { 0x06 };
+ data->setup_settle = true;
+
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
sizeof(param), param,
- setup_powered_callback, NULL, NULL);
+ setup_powered_condition_callback,
+ NULL, NULL);
/* Load IRKs */
mgmt_send(data->mgmt, MGMT_OP_LOAD_IRKS, data->mgmt_index,
sizeof(load_irks_2_devices_param),
@@ -11873,11 +12007,13 @@ static void setup_ll_privacy_device2_discovry(const void *test_data)
setup_load_irks_callback, NULL, NULL);
/* Load Device1 */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_le_public_param_1),
add_device_le_public_param_1,
setup_add_device_callback, NULL, NULL);
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_le_public_param_2),
add_device_le_public_param_2,
@@ -11906,6 +12042,8 @@ static void setup_ll_privacy_add_4(const void *test_data)
unsigned char param[] = { 0x01 };
unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
+ data->setup_settle = true;
+
cp = (struct mgmt_cp_add_advertising *) adv_param;
setup_add_adv_param(cp, 1);
@@ -11926,6 +12064,8 @@ static void setup_ll_privacy_set_flags_5(const void *test_data)
unsigned char param[] = { 0x01 };
unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
+ data->setup_settle = true;
+
cp = (struct mgmt_cp_add_advertising *) adv_param;
setup_add_adv_param(cp, 1);
@@ -11941,11 +12081,13 @@ static void setup_ll_privacy_set_flags_5(const void *test_data)
NULL, NULL, NULL);
/* Add Advertising Instance */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
sizeof(adv_param), adv_param,
setup_add_adv_callback_adv, NULL, NULL);
/* Add Device 1 */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_le_public_param_1),
add_device_le_public_param_1,
@@ -11959,6 +12101,8 @@ static void setup_ll_privacy_set_flags_6(const void *test_data)
unsigned char param[] = { 0x01 };
unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
+ data->setup_settle = true;
+
cp = (struct mgmt_cp_add_advertising *) adv_param;
setup_add_adv_param(cp, 1);
@@ -11974,17 +12118,20 @@ static void setup_ll_privacy_set_flags_6(const void *test_data)
NULL, NULL, NULL);
/* Add Advertising Instance 1 */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
sizeof(adv_param), adv_param,
setup_add_adv_callback_adv, NULL, NULL);
/* Add Device 2 */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_le_public_param_2),
add_device_le_public_param_2,
setup_add_device_callback, NULL, NULL);
/* Device 2 Flags */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_DEVICE_FLAGS, data->mgmt_index,
sizeof(set_device_flags_param_2),
set_device_flags_param_2,
@@ -11992,6 +12139,7 @@ static void setup_ll_privacy_set_flags_6(const void *test_data)
NULL);
/* Add Device 1 */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_le_public_param_1),
add_device_le_public_param_1,
@@ -12005,6 +12153,8 @@ static void setup_ll_privacy_adv_3_devices(const void *test_data)
unsigned char param[] = { 0x01 };
unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
+ data->setup_settle = true;
+
cp = (struct mgmt_cp_add_advertising *) adv_param;
setup_add_adv_param(cp, 1);
@@ -12019,12 +12169,14 @@ static void setup_ll_privacy_adv_3_devices(const void *test_data)
setup_load_irks_callback, NULL, NULL);
/* Add Device 1 */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_le_public_param_1),
add_device_le_public_param_1,
setup_add_device_callback, NULL, NULL);
/* Device 1 Flags */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_DEVICE_FLAGS, data->mgmt_index,
sizeof(set_device_flags_param_1),
set_device_flags_param_1,
@@ -12032,12 +12184,14 @@ static void setup_ll_privacy_adv_3_devices(const void *test_data)
NULL);
/* Add Device 2 */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_le_public_param_2),
add_device_le_public_param_2,
setup_add_device_callback, NULL, NULL);
/* Device 2 Flags */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_DEVICE_FLAGS, data->mgmt_index,
sizeof(set_device_flags_param_2),
set_device_flags_param_2,
@@ -12045,21 +12199,25 @@ static void setup_ll_privacy_adv_3_devices(const void *test_data)
NULL);
/* Add Device 3 */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_le_public_param_3),
add_device_le_public_param_3,
setup_add_device_callback, NULL, NULL);
/* Device 3 Flags */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_DEVICE_FLAGS, data->mgmt_index,
sizeof(set_device_flags_param_3),
set_device_flags_param_3,
setup_set_device_flags_callback, NULL,
NULL);
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
sizeof(param), param,
- setup_powered_callback, NULL, NULL);
+ setup_powered_condition_callback,
+ NULL, NULL);
}
static void setup_ll_privacy_adv_1_device_2_advs(const void *test_data)
@@ -12069,6 +12227,8 @@ static void setup_ll_privacy_adv_1_device_2_advs(const void *test_data)
unsigned char param[] = { 0x01 };
unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
+ data->setup_settle = true;
+
cp = (struct mgmt_cp_add_advertising *) adv_param;
setup_add_adv_param(cp, 1);
@@ -12083,12 +12243,14 @@ static void setup_ll_privacy_adv_1_device_2_advs(const void *test_data)
NULL, NULL, NULL);
/* Add Device 1 */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_le_public_param_1),
add_device_le_public_param_1,
setup_add_device_callback, NULL, NULL);
/* Device 1 Flags */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_DEVICE_FLAGS, data->mgmt_index,
sizeof(set_device_flags_param_1),
set_device_flags_param_1,
@@ -12096,18 +12258,21 @@ static void setup_ll_privacy_adv_1_device_2_advs(const void *test_data)
NULL);
/* Add Device 2 */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_le_public_param_2),
add_device_le_public_param_2,
setup_add_device_callback, NULL, NULL);
/* Device 2 Flags */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_DEVICE_FLAGS, data->mgmt_index,
sizeof(set_device_flags_param_2),
set_device_flags_param_2,
setup_set_device_flags_callback, NULL,
NULL);
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
sizeof(adv_param), adv_param,
setup_add_adv_callback_adv, NULL, NULL);
@@ -12133,6 +12298,7 @@ static void setup_add_2_advertisings(const void *test_data)
sizeof(param), param,
NULL, NULL, NULL);
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
sizeof(adv_param), adv_param,
setup_add_adv_callback_adv,
@@ -12155,6 +12321,7 @@ static void setup_add_2_advertisings_no_power(const void *test_data)
sizeof(param), ¶m,
NULL, NULL, NULL);
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
sizeof(adv_param), adv_param,
setup_add_adv_callback_adv,
@@ -12167,6 +12334,8 @@ static void setup_ll_privacy_enable_powered(const void *test_data)
unsigned char param[] = { 0x01 };
struct bthost *bthost;
+ data->setup_settle = true;
+
bthost = hciemu_client_get_host(data->hciemu);
bthost_set_scan_params(bthost, 0x01, 0x00, 0x00);
bthost_set_scan_enable(bthost, 0x01);
@@ -12184,6 +12353,8 @@ static void setup_ll_privacy_add_adv(const void *test_data)
unsigned char set_adv_param[] = { 0x02 };
struct bthost *bthost;
+ data->setup_settle = true;
+
/* Setup bthost to enable the scan */
bthost = hciemu_client_get_host(data->hciemu);
bthost_set_scan_params(bthost, 0x01, 0x00, 0x00);
@@ -12216,15 +12387,20 @@ static void setup_ll_privacy_add_device(const void *test_data)
struct test_data *data = tester_get_data();
unsigned char param[] = { 0x01 };
+ data->setup_settle = true;
+
mgmt_send(data->mgmt, MGMT_OP_LOAD_IRKS, data->mgmt_index,
sizeof(load_irks_le_public_param_1),
load_irks_le_public_param_1,
setup_load_irks_callback, NULL, NULL);
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
sizeof(param), param,
- setup_powered_callback, NULL, NULL);
+ setup_powered_condition_callback,
+ NULL, NULL);
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_le_public_param_1),
add_device_le_public_param_1,
@@ -13583,15 +13759,18 @@ static void setup_suspend_resume_success_3(const void *test_data)
unsigned char param[] = { 0x01 };
/* Add Device 1 */
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
sizeof(add_device_success_param_3),
add_device_success_param_3,
setup_add_device_callback,
NULL, NULL);
+ test_add_setup_condition(data);
mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
sizeof(param), param,
- setup_powered_callback, NULL, NULL);
+ setup_powered_condition_callback,
+ NULL, NULL);
}
static void test_suspend_resume_success_3(const void *test_data)
--
2.56.0
next prev parent reply other threads:[~2026-10-22 15:47 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-22 15:46 [PATCH BlueZ v1 00/27] Run the testers under User Mode Linux with time travel Luiz Augusto von Dentz
2026-10-22 15:46 ` [PATCH BlueZ v1 01/27] tools/test-runner: Do not report filesystems already mounted Luiz Augusto von Dentz
2026-10-22 20:02 ` Run the testers under User Mode Linux with time travel bluez.test.bot
2026-10-22 15:46 ` [PATCH BlueZ v1 02/27] shared/tester: Time out teardown Luiz Augusto von Dentz
2026-10-22 15:46 ` Luiz Augusto von Dentz [this message]
2026-10-22 15:46 ` [PATCH BlueZ v1 04/27] iso-tester: Fix leaking socket watches Luiz Augusto von Dentz
2026-10-22 15:46 ` [PATCH BlueZ v1 05/27] l2cap-tester: Fix race in LE Client - Close socket 2 Luiz Augusto von Dentz
2026-10-22 15:46 ` [PATCH BlueZ v1 06/27] iso-tester: Fix busy waiting in PAST tests Luiz Augusto von Dentz
2026-10-22 15:46 ` [PATCH BlueZ v1 07/27] doc: Enable IPv6 in tester.config Luiz Augusto von Dentz
2026-10-22 15:46 ` [PATCH BlueZ v1 08/27] 6lowpan-tester: Find the interface of the controller Luiz Augusto von Dentz
2026-10-22 15:46 ` [PATCH BlueZ v1 09/27] emulator: Remove -T option from btvirt Luiz Augusto von Dentz
2026-10-22 15:46 ` [PATCH BlueZ v1 10/27] doc: Add btvirt documentation Luiz Augusto von Dentz
2026-10-22 15:46 ` [PATCH BlueZ v1 11/27] emulator: Add vhost-user backend Luiz Augusto von Dentz
2026-10-22 15:46 ` [PATCH BlueZ v1 12/27] emulator: Add vhost-user virtio server to btvirt Luiz Augusto von Dentz
2026-10-22 15:46 ` [PATCH BlueZ v1 13/27] emulator: Add time travel calendar " Luiz Augusto von Dentz
2026-10-22 15:46 ` [PATCH BlueZ v1 14/27] emulator: Add virtio console and time travel client " Luiz Augusto von Dentz
2026-10-22 15:46 ` [PATCH BlueZ v1 15/27] tools/test-runner: Add User Mode Linux support Luiz Augusto von Dentz
2026-10-22 15:46 ` [PATCH BlueZ v1 16/27] doc: Add virtio documentation Luiz Augusto von Dentz
2026-10-22 15:46 ` [PATCH BlueZ v1 17/27] shared/mainloop: Add idle callbacks Luiz Augusto von Dentz
2026-10-22 15:46 ` [PATCH BlueZ v1 18/27] shared/timeout: Run timeouts of 0 once idle Luiz Augusto von Dentz
2026-10-22 15:46 ` [PATCH BlueZ v1 19/27] shared/tester: Remove GLib dependency Luiz Augusto von Dentz
2026-10-22 15:46 ` [PATCH BlueZ v1 20/27] emulator/hciemu: " Luiz Augusto von Dentz
2026-10-22 15:46 ` [PATCH BlueZ v1 21/27] tools: Build testers that do not need GLib with the mainloop Luiz Augusto von Dentz
2026-10-22 15:46 ` [PATCH BlueZ v1 22/27] shared/mainloop: Add deferred callbacks Luiz Augusto von Dentz
2026-10-22 15:46 ` [PATCH BlueZ v1 23/27] tools: Add socket watches for testers without GLib Luiz Augusto von Dentz
2026-10-22 15:46 ` [PATCH BlueZ v1 24/27] tools: Run sco-tester, rfcomm-tester and 6lowpan-tester on the mainloop Luiz Augusto von Dentz
2026-10-22 15:46 ` [PATCH BlueZ v1 25/27] tools: Run l2cap-tester and iso-tester " Luiz Augusto von Dentz
2026-10-22 15:46 ` [PATCH BlueZ v1 26/27] doc/virtio: Update measurements of the testers Luiz Augusto von Dentz
2026-10-22 15:47 ` [PATCH BlueZ v1 27/27] doc: Split tester.config for QEMU and User Mode Linux Luiz Augusto von Dentz
2026-10-29 18:40 ` [PATCH BlueZ v1 00/27] Run the testers under User Mode Linux with time travel patchwork-bot+bluetooth
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261022154701.3959500-4-luiz.dentz@gmail.com \
--to=luiz.dentz@gmail.com \
--cc=linux-bluetooth@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox