1 // SPDX-License-Identifier: GPL-2.0-or-later
4 * BlueZ - Bluetooth protocol stack for Linux
6 * Copyright (C) 2012 Intel Corporation. All rights reserved.
17 #include <sys/ioctl.h>
19 #include <sys/types.h>
26 #include "lib/bluetooth.h"
28 #include "lib/hci_lib.h"
30 #include "lib/l2cap.h"
32 #include "monitor/bt.h"
33 #include "emulator/vhci.h"
34 #include "emulator/bthost.h"
35 #include "emulator/hciemu.h"
37 #include "src/shared/util.h"
38 #include "src/shared/tester.h"
39 #include "src/shared/mgmt.h"
40 #include "src/shared/queue.h"
43 tester_data_func_t test_setup;
44 const void *test_data;
45 uint8_t expected_version;
46 uint16_t expected_manufacturer;
47 uint32_t expected_supported_settings;
48 uint32_t initial_settings;
50 struct mgmt *mgmt_alt;
51 unsigned int mgmt_settings_id;
52 unsigned int mgmt_alt_settings_id;
53 unsigned int mgmt_alt_ev_id;
54 unsigned int mgmt_discov_ev_id;
56 uint16_t mgmt_revision;
58 struct hciemu *hciemu;
59 enum hciemu_type hciemu_type;
60 bool expect_hci_command_done;
61 struct queue *expect_hci_q;
63 int unmet_setup_conditions;
67 static void print_debug(const char *str, void *user_data)
69 const char *prefix = user_data;
71 tester_print("%s%s", prefix, str);
74 static void test_post_teardown(const void *test_data)
76 struct test_data *data = tester_get_data();
81 queue_destroy(data->expect_hci_q, NULL);
83 hciemu_unref(data->hciemu);
87 static void test_pre_setup_failed(void)
89 test_post_teardown(NULL);
90 tester_pre_setup_failed();
93 static void read_version_callback(uint8_t status, uint16_t length,
94 const void *param, void *user_data)
96 struct test_data *data = tester_get_data();
97 const struct mgmt_rp_read_version *rp = param;
99 tester_print("Read Version callback");
100 tester_print(" Status: %s (0x%02x)", mgmt_errstr(status), status);
102 if (status || !param) {
103 test_pre_setup_failed();
107 data->mgmt_version = rp->version;
108 data->mgmt_revision = btohs(rp->revision);
110 tester_print(" Version %u.%u",
111 data->mgmt_version, data->mgmt_revision);
114 static void read_commands_callback(uint8_t status, uint16_t length,
115 const void *param, void *user_data)
117 tester_print("Read Commands callback");
118 tester_print(" Status: %s (0x%02x)", mgmt_errstr(status), status);
120 if (status || !param) {
121 test_pre_setup_failed();
126 static bool check_settings(uint32_t supported, uint32_t expected)
130 if (supported == expected)
133 for (i = 0; i < 17; i++) {
134 if (supported & BIT(i))
137 if (expected & BIT(i)) {
138 tester_warn("Expected bit %u not supported", i);
146 static void read_info_callback(uint8_t status, uint16_t length,
147 const void *param, void *user_data)
149 struct test_data *data = tester_get_data();
150 const struct mgmt_rp_read_info *rp = param;
152 uint16_t manufacturer;
153 uint32_t supported_settings, current_settings;
154 struct bthost *bthost;
156 tester_print("Read Info callback");
157 tester_print(" Status: %s (0x%02x)", mgmt_errstr(status), status);
159 if (status || !param) {
160 test_pre_setup_failed();
164 ba2str(&rp->bdaddr, addr);
165 manufacturer = btohs(rp->manufacturer);
166 supported_settings = btohl(rp->supported_settings);
167 current_settings = btohl(rp->current_settings);
169 tester_print(" Address: %s", addr);
170 tester_print(" Version: 0x%02x", rp->version);
171 tester_print(" Manufacturer: 0x%04x", manufacturer);
172 tester_print(" Supported settings: 0x%08x", supported_settings);
173 tester_print(" Current settings: 0x%08x", current_settings);
174 tester_print(" Class: 0x%02x%02x%02x",
175 rp->dev_class[2], rp->dev_class[1], rp->dev_class[0]);
176 tester_print(" Name: %s", rp->name);
177 tester_print(" Short name: %s", rp->short_name);
179 if (strcmp(hciemu_get_address(data->hciemu), addr)) {
180 test_pre_setup_failed();
184 if (rp->version != data->expected_version) {
185 tester_warn("Expected version: 0x%02x != 0x%02x",
186 rp->version, data->expected_version);
187 test_pre_setup_failed();
191 if (manufacturer != data->expected_manufacturer) {
192 tester_warn("Expected manufacturer: 0x%04x != 0x%04x",
193 manufacturer, data->expected_manufacturer);
194 test_pre_setup_failed();
198 if (!check_settings(supported_settings,
199 data->expected_supported_settings)) {
200 tester_warn("Expected supported settings: 0x%08x != 0x%08x",
202 data->expected_supported_settings);
203 test_pre_setup_failed();
207 if (!check_settings(current_settings, data->initial_settings)) {
208 tester_warn("Initial settings: 0x%08x != 0x%08x",
209 current_settings, data->initial_settings);
210 test_pre_setup_failed();
214 if (rp->dev_class[0] != 0x00 || rp->dev_class[1] != 0x00 ||
215 rp->dev_class[2] != 0x00) {
216 test_pre_setup_failed();
220 bthost = hciemu_client_get_host(data->hciemu);
221 bthost_notify_ready(bthost, tester_pre_setup_complete);
224 static void index_added_callback(uint16_t index, uint16_t length,
225 const void *param, void *user_data)
227 struct test_data *data = tester_get_data();
229 tester_print("Index Added callback");
230 tester_print(" Index: 0x%04x", index);
232 data->mgmt_index = index;
234 mgmt_send(data->mgmt, MGMT_OP_READ_INFO, data->mgmt_index, 0, NULL,
235 read_info_callback, NULL, NULL);
238 static void index_removed_callback(uint16_t index, uint16_t length,
239 const void *param, void *user_data)
241 struct test_data *data = tester_get_data();
243 tester_print("Index Removed callback");
244 tester_print(" Index: 0x%04x", index);
246 if (index != data->mgmt_index)
249 mgmt_unregister_index(data->mgmt, data->mgmt_index);
250 mgmt_unregister_index(data->mgmt_alt, data->mgmt_index);
252 mgmt_unref(data->mgmt);
255 mgmt_unref(data->mgmt_alt);
256 data->mgmt_alt = NULL;
258 tester_post_teardown_complete();
261 struct hci_cmd_data {
268 const struct hci_cmd_data *cmd_data;
271 struct generic_data {
272 bool setup_le_states;
273 const uint8_t *le_states;
274 const uint16_t *setup_settings;
276 bool setup_limited_discov;
277 const void *setup_exp_feat_param;
278 uint16_t setup_expect_hci_command;
279 const void *setup_expect_hci_param;
280 uint8_t setup_expect_hci_len;
281 uint16_t setup_send_opcode;
282 const void *setup_send_param;
283 uint16_t setup_send_len;
284 const struct setup_mgmt_cmd *setup_mgmt_cmd_arr;
285 bool send_index_none;
286 const void *setup_discovery_param;
287 uint16_t send_opcode;
288 const void *send_param;
290 const void * (*send_func)(uint16_t *len);
291 uint8_t expect_status;
292 bool expect_ignore_param;
293 const void *expect_param;
295 const void * (*expect_func)(uint16_t *len);
296 uint32_t expect_settings_set;
297 uint32_t expect_settings_unset;
298 uint16_t expect_alt_ev;
299 const void *expect_alt_ev_param;
300 bool (*verify_alt_ev_func)(const void *param, uint16_t length);
301 uint16_t expect_alt_ev_len;
302 uint16_t expect_hci_command;
303 const void *expect_hci_param;
304 int (*expect_hci_param_check_func)(const void *param, uint16_t length);
305 uint8_t expect_hci_len;
306 const void * (*expect_hci_func)(uint8_t *len);
307 const struct hci_cmd_data *expect_hci_list;
311 uint8_t client_pin_len;
312 const void *client_pin;
313 bool client_enable_ssp;
315 uint8_t client_io_cap;
316 uint8_t client_auth_req;
318 bool client_reject_confirm;
320 bool client_enable_le;
321 bool client_enable_sc;
322 bool client_enable_adv;
324 bool force_power_off;
325 bool addr_type_avail;
329 const uint8_t *adv_data;
330 uint8_t adv_data_len;
333 static const uint8_t set_exp_feat_param_debug[] = {
334 0x1c, 0xda, 0x47, 0x1c, 0x48, 0x6c, 0x01, 0xab, /* UUID - Debug */
335 0x9f, 0x46, 0xec, 0xb9, 0x30, 0x25, 0x99, 0xd4,
336 0x01, /* Action - enable */
339 static void debug_exp_callback(uint8_t status, uint16_t length,
340 const void *param, void *user_data)
342 if (status != MGMT_STATUS_SUCCESS) {
343 tester_print("Debug feature could not be enabled");
347 tester_print("Debug feature is enabled");
350 static void debug_exp_feature(struct test_data *data)
352 tester_print("Enabling Debug feature");
354 mgmt_send(data->mgmt, MGMT_OP_SET_EXP_FEATURE, MGMT_INDEX_NONE,
355 sizeof(set_exp_feat_param_debug), set_exp_feat_param_debug,
356 debug_exp_callback, NULL, NULL);
359 static void read_index_list_callback(uint8_t status, uint16_t length,
360 const void *param, void *user_data)
362 struct test_data *data = tester_get_data();
363 const struct generic_data *test = data->test_data;
365 tester_print("Read Index List callback");
366 tester_print(" Status: %s (0x%02x)", mgmt_errstr(status), status);
368 if (status || !param) {
369 test_pre_setup_failed();
373 mgmt_register(data->mgmt, MGMT_EV_INDEX_ADDED, MGMT_INDEX_NONE,
374 index_added_callback, NULL, NULL);
376 mgmt_register(data->mgmt, MGMT_EV_INDEX_REMOVED, MGMT_INDEX_NONE,
377 index_removed_callback, NULL, NULL);
379 data->hciemu = hciemu_new(data->hciemu_type);
381 tester_warn("Failed to setup HCI emulation");
382 test_pre_setup_failed();
385 if (tester_use_debug())
386 hciemu_set_debug(data->hciemu, print_debug, "hciemu: ", NULL);
388 if (test && test->setup_le_states)
389 hciemu_set_central_le_states(data->hciemu, test->le_states);
392 static void test_pre_setup(const void *test_data)
394 struct test_data *data = tester_get_data();
396 data->mgmt = mgmt_new_default();
398 tester_warn("Failed to setup management interface");
399 test_pre_setup_failed();
403 data->mgmt_alt = mgmt_new_default();
404 if (!data->mgmt_alt) {
405 tester_warn("Failed to setup alternate management interface");
406 test_pre_setup_failed();
408 mgmt_unref(data->mgmt);
413 if (tester_use_debug()) {
414 mgmt_set_debug(data->mgmt, print_debug, "mgmt: ", NULL);
415 mgmt_set_debug(data->mgmt_alt, print_debug, "mgmt-alt: ", NULL);
416 debug_exp_feature(data);
419 mgmt_send(data->mgmt, MGMT_OP_READ_VERSION, MGMT_INDEX_NONE, 0, NULL,
420 read_version_callback, NULL, NULL);
422 mgmt_send(data->mgmt, MGMT_OP_READ_COMMANDS, MGMT_INDEX_NONE, 0, NULL,
423 read_commands_callback, NULL, NULL);
425 mgmt_send(data->mgmt, MGMT_OP_READ_INDEX_LIST, MGMT_INDEX_NONE, 0, NULL,
426 read_index_list_callback, NULL, NULL);
431 static void test_add_condition(struct test_data *data)
433 data->unmet_conditions++;
435 tester_print("Test condition added, total %d", data->unmet_conditions);
438 static void test_add_setup_condition(struct test_data *data)
440 data->unmet_setup_conditions++;
442 tester_print("Test setup condition added, total %d",
443 data->unmet_setup_conditions);
446 static void test_setup_condition_complete(struct test_data *data)
448 data->unmet_setup_conditions--;
450 tester_print("Test setup condition complete, %d left",
451 data->unmet_setup_conditions);
453 if (data->unmet_setup_conditions > 0)
456 tester_setup_complete();
459 static void test_condition_complete(struct test_data *data)
461 data->unmet_conditions--;
463 tester_print("Test condition complete, %d left",
464 data->unmet_conditions);
466 if (data->unmet_conditions > 0)
469 tester_test_passed();
472 #define test_full(name, data, setup, func, timeout, type, version, \
473 expected_settings, settings) \
475 struct test_data *user; \
476 user = new0(struct test_data, 1); \
477 user->hciemu_type = type; \
478 user->test_setup = setup; \
479 user->test_data = data; \
480 user->expected_version = version; \
481 user->expected_manufacturer = 0x05f1; \
482 user->expected_supported_settings = expected_settings; \
483 user->initial_settings = settings; \
484 tester_add_full(name, data, \
485 test_pre_setup, test_setup, func, NULL, \
486 test_post_teardown, timeout, user, free); \
489 #define test_bredrle_full(name, data, setup, func, timeout) \
490 test_full(name, data, setup, func, timeout, HCIEMU_TYPE_BREDRLE, \
491 0x09, 0x0001beff, 0x00000080)
493 #define test_bredrle(name, data, setup, func) \
494 test_bredrle_full(name, data, setup, func, 2)
496 #define test_bredr20(name, data, setup, func) \
497 test_full(name, data, setup, func, 2, HCIEMU_TYPE_LEGACY, \
498 0x03, 0x000110bf, 0x00000080)
500 #define test_bredr(name, data, setup, func) \
501 test_full(name, data, setup, func, 2, HCIEMU_TYPE_BREDR, \
502 0x05, 0x000110ff, 0x00000080)
504 #define test_le_full(name, data, setup, func, timeout) \
505 test_full(name, data, setup, func, timeout, HCIEMU_TYPE_LE, \
506 0x09, 0x0001be1b, 0x00000200)
508 #define test_le(name, data, setup, func) \
509 test_le_full(name, data, setup, func, 2)
511 #define test_bredrle50_full(name, data, setup, func, timeout) \
512 test_full(name, data, setup, func, timeout, HCIEMU_TYPE_BREDRLE50, \
513 0x09, 0x0001beff, 0x00000080)
515 #define test_bredrle50(name, data, setup, func) \
516 test_bredrle50_full(name, data, setup, func, 2)
518 #define test_hs_full(name, data, setup, func, timeout) \
519 test_full(name, data, setup, func, timeout, HCIEMU_TYPE_BREDRLE, \
520 0x09, 0x0001bfff, 0x00000080)
522 #define test_hs(name, data, setup, func) \
523 test_hs_full(name, data, setup, func, 2)
525 static void controller_setup(const void *test_data)
527 tester_test_passed();
530 struct setup_mgmt_cmd {
532 const void *send_param;
536 static const char dummy_data[] = { 0x00 };
538 static const struct generic_data invalid_command_test = {
539 .send_opcode = 0xffff,
540 .expect_status = MGMT_STATUS_UNKNOWN_COMMAND,
543 static const struct generic_data read_version_success_test = {
544 .send_index_none = true,
545 .send_opcode = MGMT_OP_READ_VERSION,
546 .expect_status = MGMT_STATUS_SUCCESS,
550 static const struct generic_data read_version_invalid_param_test = {
551 .send_index_none = true,
552 .send_opcode = MGMT_OP_READ_VERSION,
553 .send_param = dummy_data,
554 .send_len = sizeof(dummy_data),
555 .expect_status = MGMT_STATUS_INVALID_PARAMS,
558 static const struct generic_data read_version_invalid_index_test = {
559 .send_opcode = MGMT_OP_READ_VERSION,
560 .expect_status = MGMT_STATUS_INVALID_INDEX,
563 static const struct generic_data read_commands_invalid_param_test = {
564 .send_index_none = true,
565 .send_opcode = MGMT_OP_READ_COMMANDS,
566 .send_param = dummy_data,
567 .send_len = sizeof(dummy_data),
568 .expect_status = MGMT_STATUS_INVALID_PARAMS,
571 static const struct generic_data read_commands_invalid_index_test = {
572 .send_opcode = MGMT_OP_READ_COMMANDS,
573 .expect_status = MGMT_STATUS_INVALID_INDEX,
576 static const struct generic_data read_index_list_invalid_param_test = {
577 .send_index_none = true,
578 .send_opcode = MGMT_OP_READ_INDEX_LIST,
579 .send_param = dummy_data,
580 .send_len = sizeof(dummy_data),
581 .expect_status = MGMT_STATUS_INVALID_PARAMS,
584 static const struct generic_data read_index_list_invalid_index_test = {
585 .send_opcode = MGMT_OP_READ_INDEX_LIST,
586 .expect_status = MGMT_STATUS_INVALID_INDEX,
589 static const struct generic_data read_info_invalid_param_test = {
590 .send_opcode = MGMT_OP_READ_INFO,
591 .send_param = dummy_data,
592 .send_len = sizeof(dummy_data),
593 .expect_status = MGMT_STATUS_INVALID_PARAMS,
596 static const struct generic_data read_info_invalid_index_test = {
597 .send_index_none = true,
598 .send_opcode = MGMT_OP_READ_INFO,
599 .expect_status = MGMT_STATUS_INVALID_INDEX,
602 static const struct generic_data read_unconf_index_list_invalid_param_test = {
603 .send_index_none = true,
604 .send_opcode = MGMT_OP_READ_UNCONF_INDEX_LIST,
605 .send_param = dummy_data,
606 .send_len = sizeof(dummy_data),
607 .expect_status = MGMT_STATUS_INVALID_PARAMS,
610 static const struct generic_data read_unconf_index_list_invalid_index_test = {
611 .send_opcode = MGMT_OP_READ_UNCONF_INDEX_LIST,
612 .expect_status = MGMT_STATUS_INVALID_INDEX,
615 static const struct generic_data read_config_info_invalid_param_test = {
616 .send_opcode = MGMT_OP_READ_CONFIG_INFO,
617 .send_param = dummy_data,
618 .send_len = sizeof(dummy_data),
619 .expect_status = MGMT_STATUS_INVALID_PARAMS,
622 static const struct generic_data read_config_info_invalid_index_test = {
623 .send_index_none = true,
624 .send_opcode = MGMT_OP_READ_CONFIG_INFO,
625 .expect_status = MGMT_STATUS_INVALID_INDEX,
628 static const struct generic_data read_ext_index_list_invalid_param_test = {
629 .send_index_none = true,
630 .send_opcode = MGMT_OP_READ_EXT_INDEX_LIST,
631 .send_param = dummy_data,
632 .send_len = sizeof(dummy_data),
633 .expect_status = MGMT_STATUS_INVALID_PARAMS,
636 static const struct generic_data read_ext_index_list_invalid_index_test = {
637 .send_opcode = MGMT_OP_READ_EXT_INDEX_LIST,
638 .expect_status = MGMT_STATUS_INVALID_INDEX,
641 static const char set_powered_on_param[] = { 0x01 };
642 static const char set_powered_invalid_param[] = { 0x02 };
643 static const char set_powered_garbage_param[] = { 0x01, 0x00 };
644 static const char set_powered_settings_param[] = { 0x81, 0x00, 0x00, 0x00 };
646 static const struct generic_data set_powered_on_success_test = {
647 .send_opcode = MGMT_OP_SET_POWERED,
648 .send_param = set_powered_on_param,
649 .send_len = sizeof(set_powered_on_param),
650 .expect_status = MGMT_STATUS_SUCCESS,
651 .expect_param = set_powered_settings_param,
652 .expect_len = sizeof(set_powered_settings_param),
653 .expect_settings_set = MGMT_SETTING_POWERED,
656 static const struct generic_data set_powered_on_invalid_param_test_1 = {
657 .send_opcode = MGMT_OP_SET_POWERED,
658 .expect_status = MGMT_STATUS_INVALID_PARAMS,
661 static const struct generic_data set_powered_on_invalid_param_test_2 = {
662 .send_opcode = MGMT_OP_SET_POWERED,
663 .send_param = set_powered_invalid_param,
664 .send_len = sizeof(set_powered_invalid_param),
665 .expect_status = MGMT_STATUS_INVALID_PARAMS,
668 static const struct generic_data set_powered_on_invalid_param_test_3 = {
669 .send_opcode = MGMT_OP_SET_POWERED,
670 .send_param = set_powered_garbage_param,
671 .send_len = sizeof(set_powered_garbage_param),
672 .expect_status = MGMT_STATUS_INVALID_PARAMS,
675 static const struct generic_data set_powered_on_invalid_index_test = {
676 .send_index_none = true,
677 .send_opcode = MGMT_OP_SET_POWERED,
678 .send_param = set_powered_on_param,
679 .send_len = sizeof(set_powered_on_param),
680 .expect_status = MGMT_STATUS_INVALID_INDEX,
683 static uint16_t settings_powered_advertising_privacy[] = {
685 MGMT_OP_SET_ADVERTISING,
686 MGMT_OP_SET_POWERED, 0 };
688 static const char set_adv_off_param[] = { 0x00 };
690 static const struct generic_data set_powered_on_privacy_adv_test = {
691 .setup_settings = settings_powered_advertising_privacy,
692 .send_opcode = MGMT_OP_SET_ADVERTISING,
693 .send_param = set_adv_off_param,
694 .send_len = sizeof(set_adv_off_param),
695 .expect_status = MGMT_STATUS_SUCCESS,
696 .expect_ignore_param = true,
699 static const uint16_t settings_powered[] = { MGMT_OP_SET_POWERED, 0 };
701 static const char set_powered_off_param[] = { 0x00 };
702 static const char set_powered_off_settings_param[] = { 0x80, 0x00, 0x00, 0x00 };
703 static const char set_powered_off_class_of_dev[] = { 0x00, 0x00, 0x00 };
705 static const struct generic_data set_powered_off_success_test = {
706 .setup_settings = settings_powered,
707 .send_opcode = MGMT_OP_SET_POWERED,
708 .send_param = set_powered_off_param,
709 .send_len = sizeof(set_powered_off_param),
710 .expect_status = MGMT_STATUS_SUCCESS,
711 .expect_param = set_powered_off_settings_param,
712 .expect_len = sizeof(set_powered_off_settings_param),
713 .expect_settings_unset = MGMT_SETTING_POWERED,
716 static const struct generic_data set_powered_off_class_test = {
717 .send_opcode = MGMT_OP_SET_POWERED,
718 .send_param = set_powered_off_param,
719 .send_len = sizeof(set_powered_off_param),
720 .expect_status = MGMT_STATUS_SUCCESS,
721 .expect_param = set_powered_off_settings_param,
722 .expect_len = sizeof(set_powered_off_settings_param),
723 .expect_settings_unset = MGMT_SETTING_POWERED,
724 .expect_alt_ev = MGMT_EV_CLASS_OF_DEV_CHANGED,
725 .expect_alt_ev_param = set_powered_off_class_of_dev,
726 .expect_alt_ev_len = sizeof(set_powered_off_class_of_dev),
729 static const struct generic_data set_powered_off_invalid_param_test_1 = {
730 .setup_settings = settings_powered,
731 .send_opcode = MGMT_OP_SET_POWERED,
732 .expect_status = MGMT_STATUS_INVALID_PARAMS,
735 static const struct generic_data set_powered_off_invalid_param_test_2 = {
736 .setup_settings = settings_powered,
737 .send_opcode = MGMT_OP_SET_POWERED,
738 .send_param = set_powered_invalid_param,
739 .send_len = sizeof(set_powered_invalid_param),
740 .expect_status = MGMT_STATUS_INVALID_PARAMS,
743 static const struct generic_data set_powered_off_invalid_param_test_3 = {
744 .setup_settings = settings_powered,
745 .send_opcode = MGMT_OP_SET_POWERED,
746 .send_param = set_powered_garbage_param,
747 .send_len = sizeof(set_powered_garbage_param),
748 .expect_status = MGMT_STATUS_INVALID_PARAMS,
751 static const char set_connectable_on_param[] = { 0x01 };
752 static const char set_connectable_invalid_param[] = { 0x02 };
753 static const char set_connectable_garbage_param[] = { 0x01, 0x00 };
754 static const char set_connectable_settings_param_1[] = { 0x82, 0x00, 0x00, 0x00 };
755 static const char set_connectable_settings_param_2[] = { 0x83, 0x00, 0x00, 0x00 };
756 static const char set_connectable_scan_enable_param[] = { 0x02 };
758 static const struct generic_data set_connectable_on_success_test_1 = {
759 .send_opcode = MGMT_OP_SET_CONNECTABLE,
760 .send_param = set_connectable_on_param,
761 .send_len = sizeof(set_connectable_on_param),
762 .expect_status = MGMT_STATUS_SUCCESS,
763 .expect_param = set_connectable_settings_param_1,
764 .expect_len = sizeof(set_connectable_settings_param_1),
765 .expect_settings_set = MGMT_SETTING_CONNECTABLE,
768 static const struct generic_data set_connectable_on_success_test_2 = {
769 .setup_settings = settings_powered,
770 .send_opcode = MGMT_OP_SET_CONNECTABLE,
771 .send_param = set_connectable_on_param,
772 .send_len = sizeof(set_connectable_on_param),
773 .expect_status = MGMT_STATUS_SUCCESS,
774 .expect_param = set_connectable_settings_param_2,
775 .expect_len = sizeof(set_connectable_settings_param_2),
776 .expect_settings_set = MGMT_SETTING_CONNECTABLE,
777 .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
778 .expect_hci_param = set_connectable_scan_enable_param,
779 .expect_hci_len = sizeof(set_connectable_scan_enable_param),
782 static const struct generic_data set_connectable_on_invalid_param_test_1 = {
783 .send_opcode = MGMT_OP_SET_CONNECTABLE,
784 .expect_status = MGMT_STATUS_INVALID_PARAMS,
787 static const struct generic_data set_connectable_on_invalid_param_test_2 = {
788 .send_opcode = MGMT_OP_SET_CONNECTABLE,
789 .send_param = set_connectable_invalid_param,
790 .send_len = sizeof(set_connectable_invalid_param),
791 .expect_status = MGMT_STATUS_INVALID_PARAMS,
794 static const struct generic_data set_connectable_on_invalid_param_test_3 = {
795 .send_opcode = MGMT_OP_SET_CONNECTABLE,
796 .send_param = set_connectable_garbage_param,
797 .send_len = sizeof(set_connectable_garbage_param),
798 .expect_status = MGMT_STATUS_INVALID_PARAMS,
801 static const struct generic_data set_connectable_on_invalid_index_test = {
802 .send_index_none = true,
803 .send_opcode = MGMT_OP_SET_CONNECTABLE,
804 .send_param = set_connectable_on_param,
805 .send_len = sizeof(set_connectable_on_param),
806 .expect_status = MGMT_STATUS_INVALID_INDEX,
809 static uint16_t settings_powered_advertising[] = { MGMT_OP_SET_ADVERTISING,
810 MGMT_OP_SET_POWERED, 0 };
812 static const char set_connectable_le_settings_param_1[] = { 0x02, 0x02, 0x00, 0x00 };
813 static const char set_connectable_le_settings_param_2[] = { 0x03, 0x02, 0x00, 0x00 };
814 static const char set_connectable_le_settings_param_3[] = { 0x03, 0x06, 0x00, 0x00 };
816 static const struct generic_data set_connectable_on_le_test_1 = {
817 .send_opcode = MGMT_OP_SET_CONNECTABLE,
818 .send_param = set_connectable_on_param,
819 .send_len = sizeof(set_connectable_on_param),
820 .expect_status = MGMT_STATUS_SUCCESS,
821 .expect_param = set_connectable_le_settings_param_1,
822 .expect_len = sizeof(set_connectable_le_settings_param_1),
823 .expect_settings_set = MGMT_SETTING_CONNECTABLE,
826 static const struct generic_data set_connectable_on_le_test_2 = {
827 .setup_settings = settings_powered,
828 .send_opcode = MGMT_OP_SET_CONNECTABLE,
829 .send_param = set_connectable_on_param,
830 .send_len = sizeof(set_connectable_on_param),
831 .expect_status = MGMT_STATUS_SUCCESS,
832 .expect_param = set_connectable_le_settings_param_2,
833 .expect_len = sizeof(set_connectable_le_settings_param_2),
834 .expect_settings_set = MGMT_SETTING_CONNECTABLE,
837 static uint8_t set_connectable_on_adv_param[] = {
838 0x00, 0x08, /* min_interval */
839 0x00, 0x08, /* max_interval */
841 0x00, /* own_addr_type */
842 0x00, /* direct_addr_type */
843 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* direct_addr */
844 0x07, /* channel_map */
845 0x00, /* filter_policy */
848 static const struct generic_data set_connectable_on_le_test_3 = {
849 .setup_settings = settings_powered_advertising,
850 .send_opcode = MGMT_OP_SET_CONNECTABLE,
851 .send_param = set_connectable_on_param,
852 .send_len = sizeof(set_connectable_on_param),
853 .expect_status = MGMT_STATUS_SUCCESS,
854 .expect_param = set_connectable_le_settings_param_3,
855 .expect_len = sizeof(set_connectable_le_settings_param_3),
856 .expect_settings_set = MGMT_SETTING_CONNECTABLE,
857 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
858 .expect_hci_param = set_connectable_on_adv_param,
859 .expect_hci_len = sizeof(set_connectable_on_adv_param),
862 static const uint16_t settings_connectable[] = { MGMT_OP_SET_CONNECTABLE, 0 };
863 static const uint16_t settings_powered_connectable[] = {
864 MGMT_OP_SET_CONNECTABLE,
865 MGMT_OP_SET_POWERED, 0 };
866 static const uint16_t settings_powered_discoverable[] = {
867 MGMT_OP_SET_CONNECTABLE,
868 MGMT_OP_SET_DISCOVERABLE,
869 MGMT_OP_SET_POWERED, 0 };
871 static const char set_connectable_off_param[] = { 0x00 };
872 static const char set_connectable_off_settings_1[] = { 0x80, 0x00, 0x00, 0x00 };
873 static const char set_connectable_off_settings_2[] = { 0x81, 0x00, 0x00, 0x00 };
874 static const char set_connectable_off_scan_enable_param[] = { 0x00 };
876 static const struct generic_data set_connectable_off_success_test_1 = {
877 .setup_settings = settings_connectable,
878 .send_opcode = MGMT_OP_SET_CONNECTABLE,
879 .send_param = set_connectable_off_param,
880 .send_len = sizeof(set_connectable_off_param),
881 .expect_status = MGMT_STATUS_SUCCESS,
882 .expect_param = set_connectable_off_settings_1,
883 .expect_len = sizeof(set_connectable_off_settings_1),
884 .expect_settings_unset = MGMT_SETTING_CONNECTABLE,
887 static const struct generic_data set_connectable_off_success_test_2 = {
888 .setup_settings = settings_powered_connectable,
889 .send_opcode = MGMT_OP_SET_CONNECTABLE,
890 .send_param = set_connectable_off_param,
891 .send_len = sizeof(set_connectable_off_param),
892 .expect_status = MGMT_STATUS_SUCCESS,
893 .expect_param = set_connectable_off_settings_2,
894 .expect_len = sizeof(set_connectable_off_settings_2),
895 .expect_settings_unset = MGMT_SETTING_CONNECTABLE,
896 .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
897 .expect_hci_param = set_connectable_off_scan_enable_param,
898 .expect_hci_len = sizeof(set_connectable_off_scan_enable_param),
901 static const struct generic_data set_connectable_off_success_test_3 = {
902 .setup_settings = settings_powered_discoverable,
903 .send_opcode = MGMT_OP_SET_CONNECTABLE,
904 .send_param = set_connectable_off_param,
905 .send_len = sizeof(set_connectable_off_param),
906 .expect_status = MGMT_STATUS_SUCCESS,
907 .expect_param = set_connectable_off_settings_2,
908 .expect_len = sizeof(set_connectable_off_settings_2),
909 .expect_settings_unset = MGMT_SETTING_CONNECTABLE,
910 .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
911 .expect_hci_param = set_connectable_off_scan_enable_param,
912 .expect_hci_len = sizeof(set_connectable_off_scan_enable_param),
915 static const struct generic_data set_connectable_off_success_test_4 = {
916 .setup_settings = settings_powered_discoverable,
917 .send_opcode = MGMT_OP_SET_CONNECTABLE,
918 .send_param = set_connectable_off_param,
919 .send_len = sizeof(set_connectable_off_param),
920 .expect_status = MGMT_STATUS_SUCCESS,
921 .expect_param = set_connectable_off_settings_2,
922 .expect_len = sizeof(set_connectable_off_settings_2),
923 .expect_settings_unset = MGMT_SETTING_CONNECTABLE,
924 .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
925 .expect_hci_param = set_connectable_scan_enable_param,
926 .expect_hci_len = sizeof(set_connectable_scan_enable_param),
929 static const char set_connectable_off_le_settings_1[] = { 0x00, 0x02, 0x00, 0x00 };
930 static const char set_connectable_off_le_settings_2[] = { 0x01, 0x06, 0x00, 0x00 };
932 static uint16_t settings_le_connectable[] = { MGMT_OP_SET_LE,
933 MGMT_OP_SET_CONNECTABLE, 0 };
935 static const struct generic_data set_connectable_off_le_test_1 = {
936 .setup_settings = settings_le_connectable,
937 .send_opcode = MGMT_OP_SET_CONNECTABLE,
938 .send_param = set_connectable_off_param,
939 .send_len = sizeof(set_connectable_off_param),
940 .expect_status = MGMT_STATUS_SUCCESS,
941 .expect_param = set_connectable_off_le_settings_1,
942 .expect_len = sizeof(set_connectable_off_le_settings_1),
943 .expect_settings_unset = MGMT_SETTING_CONNECTABLE,
946 static uint16_t settings_powered_le_connectable_advertising[] = {
948 MGMT_OP_SET_CONNECTABLE,
949 MGMT_OP_SET_ADVERTISING,
950 MGMT_OP_SET_POWERED, 0 };
952 static uint8_t set_connectable_off_scan_adv_param[] = {
953 0x64, 0x00, /* min_interval */
954 0x96, 0x00, /* max_interval */
956 0x01, /* own_addr_type */
957 0x00, /* direct_addr_type */
958 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* direct_addr */
959 0x07, /* channel_map */
960 0x00, /* filter_policy */
963 static int set_connectable_off_scan_adv_check_func(const void *param,
966 const uint8_t *received = param;
967 uint8_t *expected = set_connectable_off_scan_adv_param;
969 /* Compare the received param with expected param, but ignore the
970 * min_internal and max_interval since these values are turned often
971 * in the kernel and we don't want to update the expected value every
974 return memcmp(&received[4], &expected[4], length - 4);
977 static const struct generic_data set_connectable_off_le_test_2 = {
978 .setup_settings = settings_powered_le_connectable_advertising,
979 .send_opcode = MGMT_OP_SET_CONNECTABLE,
980 .send_param = set_connectable_off_param,
981 .send_len = sizeof(set_connectable_off_param),
982 .expect_status = MGMT_STATUS_SUCCESS,
983 .expect_param = set_connectable_off_le_settings_2,
984 .expect_len = sizeof(set_connectable_off_le_settings_2),
985 .expect_settings_unset = MGMT_SETTING_CONNECTABLE,
986 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
987 .expect_hci_param = set_connectable_off_scan_adv_param,
988 .expect_hci_len = sizeof(set_connectable_off_scan_adv_param),
989 .expect_hci_param_check_func = set_connectable_off_scan_adv_check_func
992 static uint16_t settings_powered_le_discoverable[] = {
994 MGMT_OP_SET_CONNECTABLE,
996 MGMT_OP_SET_DISCOVERABLE, 0 };
998 static uint16_t settings_powered_le_discoverable_advertising[] = {
1000 MGMT_OP_SET_CONNECTABLE,
1001 MGMT_OP_SET_ADVERTISING,
1002 MGMT_OP_SET_POWERED,
1003 MGMT_OP_SET_DISCOVERABLE, 0 };
1005 static const struct generic_data set_connectable_off_le_test_3 = {
1006 .setup_settings = settings_powered_le_discoverable_advertising,
1007 .send_opcode = MGMT_OP_SET_CONNECTABLE,
1008 .send_param = set_connectable_off_param,
1009 .send_len = sizeof(set_connectable_off_param),
1010 .expect_status = MGMT_STATUS_SUCCESS,
1011 .expect_param = set_connectable_off_le_settings_2,
1012 .expect_len = sizeof(set_connectable_off_le_settings_2),
1013 .expect_settings_unset = MGMT_SETTING_CONNECTABLE,
1014 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
1015 .expect_hci_param = set_connectable_off_scan_adv_param,
1016 .expect_hci_len = sizeof(set_connectable_off_scan_adv_param),
1017 .expect_hci_param_check_func = set_connectable_off_scan_adv_check_func
1020 static const struct generic_data set_connectable_off_le_test_4 = {
1021 .setup_settings = settings_powered_le_discoverable_advertising,
1022 .setup_limited_discov = true,
1023 .send_opcode = MGMT_OP_SET_CONNECTABLE,
1024 .send_param = set_connectable_off_param,
1025 .send_len = sizeof(set_connectable_off_param),
1026 .expect_status = MGMT_STATUS_SUCCESS,
1027 .expect_param = set_connectable_off_le_settings_2,
1028 .expect_len = sizeof(set_connectable_off_le_settings_2),
1029 .expect_settings_unset = MGMT_SETTING_CONNECTABLE,
1030 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
1031 .expect_hci_param = set_connectable_off_scan_adv_param,
1032 .expect_hci_len = sizeof(set_connectable_off_scan_adv_param),
1033 .expect_hci_param_check_func = set_connectable_off_scan_adv_check_func
1036 static const char set_fast_conn_on_param[] = { 0x01 };
1037 static const char set_fast_conn_on_settings_1[] = { 0x87, 0x00, 0x00, 0x00 };
1038 static const char set_fast_conn_on_settings_2[] = { 0x85, 0x00, 0x00, 0x00 };
1039 static const char set_fast_conn_on_settings_3[] = { 0x84, 0x00, 0x00, 0x00 };
1041 static const struct generic_data set_fast_conn_on_success_test_1 = {
1042 .setup_settings = settings_powered_connectable,
1043 .send_opcode = MGMT_OP_SET_FAST_CONNECTABLE,
1044 .send_param = set_fast_conn_on_param,
1045 .send_len = sizeof(set_fast_conn_on_param),
1046 .expect_status = MGMT_STATUS_SUCCESS,
1047 .expect_param = set_fast_conn_on_settings_1,
1048 .expect_len = sizeof(set_fast_conn_on_settings_1),
1049 .expect_settings_set = MGMT_SETTING_FAST_CONNECTABLE,
1052 static const struct generic_data set_fast_conn_on_success_test_2 = {
1053 .setup_settings = settings_powered,
1054 .send_opcode = MGMT_OP_SET_FAST_CONNECTABLE,
1055 .send_param = set_fast_conn_on_param,
1056 .send_len = sizeof(set_fast_conn_on_param),
1057 .expect_status = MGMT_STATUS_SUCCESS,
1058 .expect_param = set_fast_conn_on_settings_2,
1059 .expect_len = sizeof(set_fast_conn_on_settings_2),
1060 .expect_settings_set = MGMT_SETTING_FAST_CONNECTABLE,
1063 static const struct generic_data set_fast_conn_on_success_test_3 = {
1064 .send_opcode = MGMT_OP_SET_FAST_CONNECTABLE,
1065 .send_param = set_fast_conn_on_param,
1066 .send_len = sizeof(set_fast_conn_on_param),
1067 .expect_status = MGMT_STATUS_SUCCESS,
1068 .expect_param = set_fast_conn_on_settings_3,
1069 .expect_len = sizeof(set_fast_conn_on_settings_3),
1070 .expect_settings_set = MGMT_SETTING_FAST_CONNECTABLE,
1073 static const struct generic_data set_fast_conn_on_not_supported_test_1 = {
1074 .setup_settings = settings_powered_connectable,
1075 .send_opcode = MGMT_OP_SET_FAST_CONNECTABLE,
1076 .send_param = set_fast_conn_on_param,
1077 .send_len = sizeof(set_fast_conn_on_param),
1078 .expect_status = MGMT_STATUS_NOT_SUPPORTED,
1081 static const char set_fast_conn_nval_param[] = { 0xff };
1083 static const struct generic_data set_fast_conn_nval_param_test_1 = {
1084 .send_opcode = MGMT_OP_SET_FAST_CONNECTABLE,
1085 .send_param = set_fast_conn_nval_param,
1086 .send_len = sizeof(set_fast_conn_nval_param),
1087 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1090 static const char set_bondable_on_param[] = { 0x01 };
1091 static const char set_bondable_invalid_param[] = { 0x02 };
1092 static const char set_bondable_garbage_param[] = { 0x01, 0x00 };
1093 static const char set_bondable_settings_param[] = { 0x90, 0x00, 0x00, 0x00 };
1095 static const struct generic_data set_bondable_on_success_test = {
1096 .send_opcode = MGMT_OP_SET_BONDABLE,
1097 .send_param = set_bondable_on_param,
1098 .send_len = sizeof(set_bondable_on_param),
1099 .expect_status = MGMT_STATUS_SUCCESS,
1100 .expect_param = set_bondable_settings_param,
1101 .expect_len = sizeof(set_bondable_settings_param),
1102 .expect_settings_set = MGMT_SETTING_BONDABLE,
1105 static const struct generic_data set_bondable_on_invalid_param_test_1 = {
1106 .send_opcode = MGMT_OP_SET_BONDABLE,
1107 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1110 static const struct generic_data set_bondable_on_invalid_param_test_2 = {
1111 .send_opcode = MGMT_OP_SET_BONDABLE,
1112 .send_param = set_bondable_invalid_param,
1113 .send_len = sizeof(set_bondable_invalid_param),
1114 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1117 static const struct generic_data set_bondable_on_invalid_param_test_3 = {
1118 .send_opcode = MGMT_OP_SET_BONDABLE,
1119 .send_param = set_bondable_garbage_param,
1120 .send_len = sizeof(set_bondable_garbage_param),
1121 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1124 static const struct generic_data set_bondable_on_invalid_index_test = {
1125 .send_index_none = true,
1126 .send_opcode = MGMT_OP_SET_BONDABLE,
1127 .send_param = set_bondable_on_param,
1128 .send_len = sizeof(set_bondable_on_param),
1129 .expect_status = MGMT_STATUS_INVALID_INDEX,
1132 static const uint8_t set_discoverable_on_param[] = { 0x01, 0x00, 0x00 };
1133 static const uint8_t set_discoverable_timeout_param[] = { 0x01, 0x0a, 0x00 };
1134 static const uint8_t set_discoverable_invalid_param[] = { 0x02, 0x00, 0x00 };
1135 static const uint8_t set_discoverable_off_param[] = { 0x00, 0x00, 0x00 };
1136 static const uint8_t set_discoverable_offtimeout_param[] = { 0x00, 0x01, 0x00 };
1137 static const uint8_t set_discoverable_garbage_param[] = { 0x01, 0x00, 0x00, 0x00 };
1138 static const uint8_t set_discoverable_on_settings_param_1[] = { 0x8a, 0x00, 0x00, 0x00 };
1139 static const uint8_t set_discoverable_on_settings_param_2[] = { 0x8b, 0x00, 0x00, 0x00 };
1140 static const uint8_t set_discoverable_off_settings_param_1[] = { 0x82, 0x00, 0x00, 0x00 };
1141 static const uint8_t set_discoverable_off_settings_param_2[] = { 0x83, 0x00, 0x00, 0x00 };
1142 static const uint8_t set_discoverable_on_scan_enable_param[] = { 0x03 };
1143 static const uint8_t set_discoverable_off_scan_enable_param[] = { 0x02 };
1145 static const struct generic_data set_discoverable_on_invalid_param_test_1 = {
1146 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1147 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1150 static const struct generic_data set_discoverable_on_invalid_param_test_2 = {
1151 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1152 .send_param = set_discoverable_invalid_param,
1153 .send_len = sizeof(set_discoverable_invalid_param),
1154 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1157 static const struct generic_data set_discoverable_on_invalid_param_test_3 = {
1158 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1159 .send_param = set_discoverable_garbage_param,
1160 .send_len = sizeof(set_discoverable_garbage_param),
1161 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1164 static const struct generic_data set_discoverable_on_invalid_param_test_4 = {
1165 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1166 .send_param = set_discoverable_offtimeout_param,
1167 .send_len = sizeof(set_discoverable_offtimeout_param),
1168 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1171 static const struct generic_data set_discoverable_on_not_powered_test_1 = {
1172 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1173 .send_param = set_discoverable_timeout_param,
1174 .send_len = sizeof(set_discoverable_timeout_param),
1175 .expect_status = MGMT_STATUS_NOT_POWERED,
1178 static const struct generic_data set_discoverable_on_not_powered_test_2 = {
1179 .setup_settings = settings_connectable,
1180 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1181 .send_param = set_discoverable_timeout_param,
1182 .send_len = sizeof(set_discoverable_timeout_param),
1183 .expect_status = MGMT_STATUS_NOT_POWERED,
1186 static const struct generic_data set_discoverable_on_rejected_test_1 = {
1187 .setup_settings = settings_powered,
1188 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1189 .send_param = set_discoverable_on_param,
1190 .send_len = sizeof(set_discoverable_on_param),
1191 .expect_status = MGMT_STATUS_REJECTED,
1194 static const struct generic_data set_discoverable_on_rejected_test_2 = {
1195 .setup_settings = settings_powered,
1196 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1197 .send_param = set_discoverable_on_param,
1198 .send_len = sizeof(set_discoverable_on_param),
1199 .expect_status = MGMT_STATUS_REJECTED,
1202 static const struct generic_data set_discoverable_on_rejected_test_3 = {
1203 .setup_settings = settings_powered,
1204 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1205 .send_param = set_discoverable_timeout_param,
1206 .send_len = sizeof(set_discoverable_timeout_param),
1207 .expect_status = MGMT_STATUS_REJECTED,
1210 static const struct generic_data set_discoverable_on_success_test_1 = {
1211 .setup_settings = settings_connectable,
1212 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1213 .send_param = set_discoverable_on_param,
1214 .send_len = sizeof(set_discoverable_on_param),
1215 .expect_status = MGMT_STATUS_SUCCESS,
1216 .expect_param = set_discoverable_on_settings_param_1,
1217 .expect_len = sizeof(set_discoverable_on_settings_param_1),
1218 .expect_settings_set = MGMT_SETTING_DISCOVERABLE,
1221 static const struct generic_data set_discoverable_on_success_test_2 = {
1222 .setup_settings = settings_powered_connectable,
1223 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1224 .send_param = set_discoverable_on_param,
1225 .send_len = sizeof(set_discoverable_on_param),
1226 .expect_status = MGMT_STATUS_SUCCESS,
1227 .expect_param = set_discoverable_on_settings_param_2,
1228 .expect_len = sizeof(set_discoverable_on_settings_param_2),
1229 .expect_settings_set = MGMT_SETTING_DISCOVERABLE,
1230 .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
1231 .expect_hci_param = set_discoverable_on_scan_enable_param,
1232 .expect_hci_len = sizeof(set_discoverable_on_scan_enable_param),
1235 static uint8_t set_discov_on_le_param[] = { 0x0b, 0x06, 0x00, 0x00 };
1236 static uint8_t set_discov_adv_data[32] = { 0x06, 0x02, 0x01, 0x06,
1239 static const struct generic_data set_discov_on_le_success_1 = {
1240 .setup_settings = settings_powered_le_connectable_advertising,
1241 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1242 .send_param = set_discoverable_on_param,
1243 .send_len = sizeof(set_discoverable_on_param),
1244 .expect_status = MGMT_STATUS_SUCCESS,
1245 .expect_param = set_discov_on_le_param,
1246 .expect_len = sizeof(set_discov_on_le_param),
1247 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
1248 .expect_hci_param = set_discov_adv_data,
1249 .expect_hci_len = sizeof(set_discov_adv_data),
1252 static const struct generic_data set_discoverable_off_success_test_1 = {
1253 .setup_settings = settings_connectable,
1254 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1255 .send_param = set_discoverable_off_param,
1256 .send_len = sizeof(set_discoverable_off_param),
1257 .expect_status = MGMT_STATUS_SUCCESS,
1258 .expect_param = set_discoverable_off_settings_param_1,
1259 .expect_len = sizeof(set_discoverable_off_settings_param_1),
1262 static const struct generic_data set_discoverable_off_success_test_2 = {
1263 .setup_settings = settings_powered_discoverable,
1264 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1265 .send_param = set_discoverable_off_param,
1266 .send_len = sizeof(set_discoverable_off_param),
1267 .expect_status = MGMT_STATUS_SUCCESS,
1268 .expect_param = set_discoverable_off_settings_param_2,
1269 .expect_len = sizeof(set_discoverable_off_settings_param_2),
1270 .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
1271 .expect_hci_param = set_discoverable_off_scan_enable_param,
1272 .expect_hci_len = sizeof(set_discoverable_off_scan_enable_param),
1275 static const uint8_t set_limited_discov_on_param[] = { 0x02, 0x01, 0x00 };
1277 static const struct generic_data set_limited_discov_on_success_1 = {
1278 .setup_settings = settings_powered_connectable,
1279 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1280 .send_param = set_limited_discov_on_param,
1281 .send_len = sizeof(set_limited_discov_on_param),
1282 .expect_status = MGMT_STATUS_SUCCESS,
1283 .expect_param = set_discoverable_on_settings_param_2,
1284 .expect_len = sizeof(set_discoverable_on_settings_param_2),
1285 .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
1286 .expect_hci_param = set_discoverable_on_scan_enable_param,
1287 .expect_hci_len = sizeof(set_discoverable_on_scan_enable_param),
1290 static uint8_t write_current_iac_lap_limited[] = { 0x01, 0x00, 0x8b, 0x9e };
1292 static const struct generic_data set_limited_discov_on_success_2 = {
1293 .setup_settings = settings_powered_connectable,
1294 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1295 .send_param = set_limited_discov_on_param,
1296 .send_len = sizeof(set_limited_discov_on_param),
1297 .expect_status = MGMT_STATUS_SUCCESS,
1298 .expect_param = set_discoverable_on_settings_param_2,
1299 .expect_len = sizeof(set_discoverable_on_settings_param_2),
1300 .expect_hci_command = BT_HCI_CMD_WRITE_CURRENT_IAC_LAP,
1301 .expect_hci_param = write_current_iac_lap_limited,
1302 .expect_hci_len = sizeof(write_current_iac_lap_limited),
1305 static uint8_t write_cod_limited[] = { 0x00, 0x20, 0x00 };
1307 static const struct generic_data set_limited_discov_on_success_3 = {
1308 .setup_settings = settings_powered_connectable,
1309 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1310 .send_param = set_limited_discov_on_param,
1311 .send_len = sizeof(set_limited_discov_on_param),
1312 .expect_status = MGMT_STATUS_SUCCESS,
1313 .expect_param = set_discoverable_on_settings_param_2,
1314 .expect_len = sizeof(set_discoverable_on_settings_param_2),
1315 .expect_hci_command = BT_HCI_CMD_WRITE_CLASS_OF_DEV,
1316 .expect_hci_param = write_cod_limited,
1317 .expect_hci_len = sizeof(write_cod_limited),
1320 static uint8_t set_limited_discov_adv_data[32] = { 0x06, 0x02, 0x01, 0x05,
1323 static const struct generic_data set_limited_discov_on_le_success_1 = {
1324 .setup_settings = settings_powered_le_connectable_advertising,
1325 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1326 .send_param = set_limited_discov_on_param,
1327 .send_len = sizeof(set_limited_discov_on_param),
1328 .expect_status = MGMT_STATUS_SUCCESS,
1329 .expect_param = set_discov_on_le_param,
1330 .expect_len = sizeof(set_discov_on_le_param),
1331 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
1332 .expect_hci_param = set_limited_discov_adv_data,
1333 .expect_hci_len = sizeof(set_limited_discov_adv_data),
1336 static uint16_t settings_link_sec[] = { MGMT_OP_SET_LINK_SECURITY, 0 };
1338 static const char set_link_sec_on_param[] = { 0x01 };
1339 static const char set_link_sec_invalid_param[] = { 0x02 };
1340 static const char set_link_sec_garbage_param[] = { 0x01, 0x00 };
1341 static const char set_link_sec_settings_param_1[] = { 0xa0, 0x00, 0x00, 0x00 };
1342 static const char set_link_sec_settings_param_2[] = { 0xa1, 0x00, 0x00, 0x00 };
1343 static const char set_link_sec_auth_enable_param[] = { 0x01 };
1345 static const struct generic_data set_link_sec_on_success_test_1 = {
1346 .send_opcode = MGMT_OP_SET_LINK_SECURITY,
1347 .send_param = set_link_sec_on_param,
1348 .send_len = sizeof(set_link_sec_on_param),
1349 .expect_status = MGMT_STATUS_SUCCESS,
1350 .expect_param = set_link_sec_settings_param_1,
1351 .expect_len = sizeof(set_link_sec_settings_param_1),
1352 .expect_settings_set = MGMT_SETTING_LINK_SECURITY,
1355 static const struct generic_data set_link_sec_on_success_test_2 = {
1356 .setup_settings = settings_powered,
1357 .send_opcode = MGMT_OP_SET_LINK_SECURITY,
1358 .send_param = set_link_sec_on_param,
1359 .send_len = sizeof(set_link_sec_on_param),
1360 .expect_status = MGMT_STATUS_SUCCESS,
1361 .expect_param = set_link_sec_settings_param_2,
1362 .expect_len = sizeof(set_link_sec_settings_param_2),
1363 .expect_settings_set = MGMT_SETTING_LINK_SECURITY,
1364 .expect_hci_command = BT_HCI_CMD_WRITE_AUTH_ENABLE,
1365 .expect_hci_param = set_link_sec_auth_enable_param,
1366 .expect_hci_len = sizeof(set_link_sec_auth_enable_param),
1369 static const struct generic_data set_link_sec_on_success_test_3 = {
1370 .setup_settings = settings_link_sec,
1371 .send_opcode = MGMT_OP_SET_POWERED,
1372 .send_param = set_powered_on_param,
1373 .send_len = sizeof(set_powered_on_param),
1374 .expect_status = MGMT_STATUS_SUCCESS,
1375 .expect_param = set_link_sec_settings_param_2,
1376 .expect_len = sizeof(set_link_sec_settings_param_2),
1377 .expect_settings_set = MGMT_SETTING_LINK_SECURITY,
1378 .expect_hci_command = BT_HCI_CMD_WRITE_AUTH_ENABLE,
1379 .expect_hci_param = set_link_sec_auth_enable_param,
1380 .expect_hci_len = sizeof(set_link_sec_auth_enable_param),
1383 static const struct generic_data set_link_sec_on_invalid_param_test_1 = {
1384 .send_opcode = MGMT_OP_SET_LINK_SECURITY,
1385 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1388 static const struct generic_data set_link_sec_on_invalid_param_test_2 = {
1389 .send_opcode = MGMT_OP_SET_LINK_SECURITY,
1390 .send_param = set_link_sec_invalid_param,
1391 .send_len = sizeof(set_link_sec_invalid_param),
1392 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1395 static const struct generic_data set_link_sec_on_invalid_param_test_3 = {
1396 .send_opcode = MGMT_OP_SET_LINK_SECURITY,
1397 .send_param = set_link_sec_garbage_param,
1398 .send_len = sizeof(set_link_sec_garbage_param),
1399 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1402 static const struct generic_data set_link_sec_on_invalid_index_test = {
1403 .send_index_none = true,
1404 .send_opcode = MGMT_OP_SET_LINK_SECURITY,
1405 .send_param = set_link_sec_on_param,
1406 .send_len = sizeof(set_link_sec_on_param),
1407 .expect_status = MGMT_STATUS_INVALID_INDEX,
1410 static const uint16_t settings_powered_link_sec[] = {
1411 MGMT_OP_SET_LINK_SECURITY,
1412 MGMT_OP_SET_POWERED, 0 };
1414 static const char set_link_sec_off_param[] = { 0x00 };
1415 static const char set_link_sec_off_settings_1[] = { 0x80, 0x00, 0x00, 0x00 };
1416 static const char set_link_sec_off_settings_2[] = { 0x81, 0x00, 0x00, 0x00 };
1417 static const char set_link_sec_off_auth_enable_param[] = { 0x00 };
1419 static const struct generic_data set_link_sec_off_success_test_1 = {
1420 .setup_settings = settings_link_sec,
1421 .send_opcode = MGMT_OP_SET_LINK_SECURITY,
1422 .send_param = set_link_sec_off_param,
1423 .send_len = sizeof(set_link_sec_off_param),
1424 .expect_status = MGMT_STATUS_SUCCESS,
1425 .expect_param = set_link_sec_off_settings_1,
1426 .expect_len = sizeof(set_link_sec_off_settings_1),
1427 .expect_settings_unset = MGMT_SETTING_LINK_SECURITY,
1430 static const struct generic_data set_link_sec_off_success_test_2 = {
1431 .setup_settings = settings_powered_link_sec,
1432 .send_opcode = MGMT_OP_SET_LINK_SECURITY,
1433 .send_param = set_link_sec_off_param,
1434 .send_len = sizeof(set_link_sec_off_param),
1435 .expect_status = MGMT_STATUS_SUCCESS,
1436 .expect_param = set_link_sec_off_settings_2,
1437 .expect_len = sizeof(set_link_sec_off_settings_2),
1438 .expect_settings_unset = MGMT_SETTING_LINK_SECURITY,
1439 .expect_hci_command = BT_HCI_CMD_WRITE_AUTH_ENABLE,
1440 .expect_hci_param = set_link_sec_off_auth_enable_param,
1441 .expect_hci_len = sizeof(set_link_sec_off_auth_enable_param),
1444 static uint16_t settings_ssp[] = { MGMT_OP_SET_SSP, 0 };
1446 static const char set_ssp_on_param[] = { 0x01 };
1447 static const char set_ssp_invalid_param[] = { 0x02 };
1448 static const char set_ssp_garbage_param[] = { 0x01, 0x00 };
1449 static const char set_ssp_settings_param_1[] = { 0xc0, 0x00, 0x00, 0x00 };
1450 static const char set_ssp_settings_param_2[] = { 0xc1, 0x00, 0x00, 0x00 };
1451 static const char set_ssp_on_write_ssp_mode_param[] = { 0x01 };
1453 static const struct generic_data set_ssp_on_success_test_1 = {
1454 .send_opcode = MGMT_OP_SET_SSP,
1455 .send_param = set_ssp_on_param,
1456 .send_len = sizeof(set_ssp_on_param),
1457 .expect_status = MGMT_STATUS_SUCCESS,
1458 .expect_param = set_ssp_settings_param_1,
1459 .expect_len = sizeof(set_ssp_settings_param_1),
1460 .expect_settings_set = MGMT_SETTING_SSP,
1463 static const struct generic_data set_ssp_on_success_test_2 = {
1464 .setup_settings = settings_powered,
1465 .send_opcode = MGMT_OP_SET_SSP,
1466 .send_param = set_ssp_on_param,
1467 .send_len = sizeof(set_ssp_on_param),
1468 .expect_status = MGMT_STATUS_SUCCESS,
1469 .expect_param = set_ssp_settings_param_2,
1470 .expect_len = sizeof(set_ssp_settings_param_2),
1471 .expect_settings_set = MGMT_SETTING_SSP,
1472 .expect_hci_command = BT_HCI_CMD_WRITE_SIMPLE_PAIRING_MODE,
1473 .expect_hci_param = set_ssp_on_write_ssp_mode_param,
1474 .expect_hci_len = sizeof(set_ssp_on_write_ssp_mode_param),
1477 static const struct generic_data set_ssp_on_success_test_3 = {
1478 .setup_settings = settings_ssp,
1479 .send_opcode = MGMT_OP_SET_POWERED,
1480 .send_param = set_powered_on_param,
1481 .send_len = sizeof(set_powered_on_param),
1482 .expect_status = MGMT_STATUS_SUCCESS,
1483 .expect_param = set_ssp_settings_param_2,
1484 .expect_len = sizeof(set_ssp_settings_param_2),
1485 .expect_settings_set = MGMT_SETTING_SSP,
1486 .expect_hci_command = BT_HCI_CMD_WRITE_SIMPLE_PAIRING_MODE,
1487 .expect_hci_param = set_ssp_on_write_ssp_mode_param,
1488 .expect_hci_len = sizeof(set_ssp_on_write_ssp_mode_param),
1491 static const struct generic_data set_ssp_on_invalid_param_test_1 = {
1492 .send_opcode = MGMT_OP_SET_SSP,
1493 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1496 static const struct generic_data set_ssp_on_invalid_param_test_2 = {
1497 .send_opcode = MGMT_OP_SET_SSP,
1498 .send_param = set_ssp_invalid_param,
1499 .send_len = sizeof(set_ssp_invalid_param),
1500 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1503 static const struct generic_data set_ssp_on_invalid_param_test_3 = {
1504 .send_opcode = MGMT_OP_SET_SSP,
1505 .send_param = set_ssp_garbage_param,
1506 .send_len = sizeof(set_ssp_garbage_param),
1507 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1510 static const struct generic_data set_ssp_on_invalid_index_test = {
1511 .send_index_none = true,
1512 .send_opcode = MGMT_OP_SET_SSP,
1513 .send_param = set_ssp_on_param,
1514 .send_len = sizeof(set_ssp_on_param),
1515 .expect_status = MGMT_STATUS_INVALID_INDEX,
1518 static uint16_t settings_powered_ssp[] = { MGMT_OP_SET_SSP,
1519 MGMT_OP_SET_POWERED, 0 };
1521 static uint16_t settings_powered_sc[] = { MGMT_OP_SET_SSP,
1522 MGMT_OP_SET_SECURE_CONN,
1523 MGMT_OP_SET_POWERED, 0 };
1525 static const char set_sc_on_param[] = { 0x01 };
1526 static const char set_sc_only_on_param[] = { 0x02 };
1527 static const char set_sc_invalid_param[] = { 0x03 };
1528 static const char set_sc_garbage_param[] = { 0x01, 0x00 };
1529 static const char set_sc_settings_param_1[] = { 0xc0, 0x08, 0x00, 0x00 };
1530 static const char set_sc_settings_param_2[] = { 0xc1, 0x08, 0x00, 0x00 };
1531 static const char set_sc_on_write_sc_support_param[] = { 0x01 };
1533 static const struct generic_data set_sc_on_success_test_1 = {
1534 .setup_settings = settings_ssp,
1535 .send_opcode = MGMT_OP_SET_SECURE_CONN,
1536 .send_param = set_sc_on_param,
1537 .send_len = sizeof(set_sc_on_param),
1538 .expect_status = MGMT_STATUS_SUCCESS,
1539 .expect_param = set_sc_settings_param_1,
1540 .expect_len = sizeof(set_sc_settings_param_1),
1541 .expect_settings_set = MGMT_SETTING_SECURE_CONN,
1544 static const struct generic_data set_sc_on_success_test_2 = {
1545 .setup_settings = settings_powered_ssp,
1546 .send_opcode = MGMT_OP_SET_SECURE_CONN,
1547 .send_param = set_sc_on_param,
1548 .send_len = sizeof(set_sc_on_param),
1549 .expect_status = MGMT_STATUS_SUCCESS,
1550 .expect_param = set_sc_settings_param_2,
1551 .expect_len = sizeof(set_sc_settings_param_2),
1552 .expect_settings_set = MGMT_SETTING_SECURE_CONN,
1553 .expect_hci_command = BT_HCI_CMD_WRITE_SECURE_CONN_SUPPORT,
1554 .expect_hci_param = set_sc_on_write_sc_support_param,
1555 .expect_hci_len = sizeof(set_sc_on_write_sc_support_param),
1558 static const struct generic_data set_sc_on_invalid_param_test_1 = {
1559 .setup_settings = settings_ssp,
1560 .send_opcode = MGMT_OP_SET_SECURE_CONN,
1561 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1564 static const struct generic_data set_sc_on_invalid_param_test_2 = {
1565 .setup_settings = settings_ssp,
1566 .send_opcode = MGMT_OP_SET_SECURE_CONN,
1567 .send_param = set_sc_invalid_param,
1568 .send_len = sizeof(set_sc_invalid_param),
1569 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1572 static const struct generic_data set_sc_on_invalid_param_test_3 = {
1573 .setup_settings = settings_ssp,
1574 .send_opcode = MGMT_OP_SET_SECURE_CONN,
1575 .send_param = set_sc_garbage_param,
1576 .send_len = sizeof(set_sc_garbage_param),
1577 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1580 static const struct generic_data set_sc_on_invalid_index_test = {
1581 .setup_settings = settings_ssp,
1582 .send_index_none = true,
1583 .send_opcode = MGMT_OP_SET_SECURE_CONN,
1584 .send_param = set_sc_on_param,
1585 .send_len = sizeof(set_sc_on_param),
1586 .expect_status = MGMT_STATUS_INVALID_INDEX,
1589 static const struct generic_data set_sc_on_not_supported_test_1 = {
1590 .setup_settings = settings_ssp,
1591 .send_opcode = MGMT_OP_SET_SECURE_CONN,
1592 .send_param = set_sc_on_param,
1593 .send_len = sizeof(set_sc_on_param),
1594 .expect_status = MGMT_STATUS_NOT_SUPPORTED,
1597 static const struct generic_data set_sc_on_not_supported_test_2 = {
1598 .setup_settings = settings_powered_ssp,
1599 .send_opcode = MGMT_OP_SET_SECURE_CONN,
1600 .send_param = set_sc_on_param,
1601 .send_len = sizeof(set_sc_on_param),
1602 .expect_status = MGMT_STATUS_NOT_SUPPORTED,
1605 static const struct generic_data set_sc_only_on_success_test_1 = {
1606 .setup_settings = settings_ssp,
1607 .send_opcode = MGMT_OP_SET_SECURE_CONN,
1608 .send_param = set_sc_only_on_param,
1609 .send_len = sizeof(set_sc_only_on_param),
1610 .expect_status = MGMT_STATUS_SUCCESS,
1611 .expect_param = set_sc_settings_param_1,
1612 .expect_len = sizeof(set_sc_settings_param_1),
1613 .expect_settings_set = MGMT_SETTING_SECURE_CONN,
1616 static const struct generic_data set_sc_only_on_success_test_2 = {
1617 .setup_settings = settings_powered_ssp,
1618 .send_opcode = MGMT_OP_SET_SECURE_CONN,
1619 .send_param = set_sc_only_on_param,
1620 .send_len = sizeof(set_sc_only_on_param),
1621 .expect_status = MGMT_STATUS_SUCCESS,
1622 .expect_param = set_sc_settings_param_2,
1623 .expect_len = sizeof(set_sc_settings_param_2),
1624 .expect_settings_set = MGMT_SETTING_SECURE_CONN,
1625 .expect_hci_command = BT_HCI_CMD_WRITE_SECURE_CONN_SUPPORT,
1626 .expect_hci_param = set_sc_on_write_sc_support_param,
1627 .expect_hci_len = sizeof(set_sc_on_write_sc_support_param),
1630 static const char set_hs_on_param[] = { 0x01 };
1631 static const char set_hs_invalid_param[] = { 0x02 };
1632 static const char set_hs_garbage_param[] = { 0x01, 0x00 };
1633 static const char set_hs_settings_param_1[] = { 0xc0, 0x01, 0x00, 0x00 };
1635 static const struct generic_data set_hs_on_success_test = {
1636 .setup_settings = settings_ssp,
1637 .send_opcode = MGMT_OP_SET_HS,
1638 .send_param = set_hs_on_param,
1639 .send_len = sizeof(set_hs_on_param),
1640 .expect_status = MGMT_STATUS_SUCCESS,
1641 .expect_param = set_hs_settings_param_1,
1642 .expect_len = sizeof(set_hs_settings_param_1),
1643 .expect_settings_set = MGMT_SETTING_HS,
1646 static const struct generic_data set_hs_on_invalid_param_test_1 = {
1647 .setup_settings = settings_ssp,
1648 .send_opcode = MGMT_OP_SET_HS,
1649 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1652 static const struct generic_data set_hs_on_invalid_param_test_2 = {
1653 .setup_settings = settings_ssp,
1654 .send_opcode = MGMT_OP_SET_HS,
1655 .send_param = set_hs_invalid_param,
1656 .send_len = sizeof(set_hs_invalid_param),
1657 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1660 static const struct generic_data set_hs_on_invalid_param_test_3 = {
1661 .setup_settings = settings_ssp,
1662 .send_opcode = MGMT_OP_SET_HS,
1663 .send_param = set_hs_garbage_param,
1664 .send_len = sizeof(set_hs_garbage_param),
1665 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1668 static const struct generic_data set_hs_on_invalid_index_test = {
1669 .setup_settings = settings_ssp,
1670 .send_index_none = true,
1671 .send_opcode = MGMT_OP_SET_HS,
1672 .send_param = set_hs_on_param,
1673 .send_len = sizeof(set_hs_on_param),
1674 .expect_status = MGMT_STATUS_INVALID_INDEX,
1677 static uint16_t settings_le[] = { MGMT_OP_SET_LE, 0 };
1679 static const char set_le_on_param[] = { 0x01 };
1680 static const char set_le_off_param[] = { 0x00 };
1681 static const char set_le_invalid_param[] = { 0x02 };
1682 static const char set_le_garbage_param[] = { 0x01, 0x00 };
1683 static const char set_le_settings_param_1[] = { 0x80, 0x02, 0x00, 0x00 };
1684 static const char set_le_settings_param_2[] = { 0x81, 0x02, 0x00, 0x00 };
1685 static const char set_le_on_write_le_host_param[] = { 0x01, 0x00 };
1687 static const struct generic_data set_le_on_success_test_1 = {
1688 .send_opcode = MGMT_OP_SET_LE,
1689 .send_param = set_le_on_param,
1690 .send_len = sizeof(set_le_on_param),
1691 .expect_status = MGMT_STATUS_SUCCESS,
1692 .expect_param = set_le_settings_param_1,
1693 .expect_len = sizeof(set_le_settings_param_1),
1694 .expect_settings_set = MGMT_SETTING_LE,
1697 static const struct generic_data set_le_on_success_test_2 = {
1698 .setup_settings = settings_powered,
1699 .send_opcode = MGMT_OP_SET_LE,
1700 .send_param = set_le_on_param,
1701 .send_len = sizeof(set_le_on_param),
1702 .expect_status = MGMT_STATUS_SUCCESS,
1703 .expect_param = set_le_settings_param_2,
1704 .expect_len = sizeof(set_le_settings_param_2),
1705 .expect_settings_set = MGMT_SETTING_LE,
1706 .expect_hci_command = BT_HCI_CMD_WRITE_LE_HOST_SUPPORTED,
1707 .expect_hci_param = set_le_on_write_le_host_param,
1708 .expect_hci_len = sizeof(set_le_on_write_le_host_param),
1711 static const struct generic_data set_le_on_success_test_3 = {
1712 .setup_settings = settings_le,
1713 .send_opcode = MGMT_OP_SET_POWERED,
1714 .send_param = set_powered_on_param,
1715 .send_len = sizeof(set_powered_on_param),
1716 .expect_status = MGMT_STATUS_SUCCESS,
1717 .expect_param = set_le_settings_param_2,
1718 .expect_len = sizeof(set_le_settings_param_2),
1719 .expect_settings_set = MGMT_SETTING_LE,
1720 .expect_hci_command = BT_HCI_CMD_WRITE_LE_HOST_SUPPORTED,
1721 .expect_hci_param = set_le_on_write_le_host_param,
1722 .expect_hci_len = sizeof(set_le_on_write_le_host_param),
1725 static const struct generic_data set_le_on_invalid_param_test_1 = {
1726 .send_opcode = MGMT_OP_SET_LE,
1727 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1730 static const struct generic_data set_le_on_invalid_param_test_2 = {
1731 .send_opcode = MGMT_OP_SET_LE,
1732 .send_param = set_le_invalid_param,
1733 .send_len = sizeof(set_le_invalid_param),
1734 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1737 static const struct generic_data set_le_on_invalid_param_test_3 = {
1738 .send_opcode = MGMT_OP_SET_LE,
1739 .send_param = set_le_garbage_param,
1740 .send_len = sizeof(set_le_garbage_param),
1741 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1744 static const struct generic_data set_le_on_invalid_index_test = {
1745 .send_index_none = true,
1746 .send_opcode = MGMT_OP_SET_LE,
1747 .send_param = set_le_on_param,
1748 .send_len = sizeof(set_le_on_param),
1749 .expect_status = MGMT_STATUS_INVALID_INDEX,
1752 static uint16_t settings_powered_le[] = { MGMT_OP_SET_LE,
1753 MGMT_OP_SET_POWERED, 0 };
1755 static const char set_adv_on_param[] = { 0x01 };
1756 static const char set_adv_on_param2[] = { 0x02 };
1757 static const char set_adv_settings_param_1[] = { 0x80, 0x06, 0x00, 0x00 };
1758 static const char set_adv_settings_param_2[] = { 0x81, 0x06, 0x00, 0x00 };
1759 static const char set_adv_on_set_adv_enable_param[] = { 0x01 };
1760 static const char set_adv_on_set_adv_disable_param[] = { 0x00 };
1762 static const struct generic_data set_adv_on_success_test_1 = {
1763 .setup_settings = settings_le,
1764 .send_opcode = MGMT_OP_SET_ADVERTISING,
1765 .send_param = set_adv_on_param,
1766 .send_len = sizeof(set_adv_on_param),
1767 .expect_status = MGMT_STATUS_SUCCESS,
1768 .expect_param = set_adv_settings_param_1,
1769 .expect_len = sizeof(set_adv_settings_param_1),
1770 .expect_settings_set = MGMT_SETTING_ADVERTISING,
1773 static const struct generic_data set_adv_on_success_test_2 = {
1774 .setup_settings = settings_powered_le,
1775 .send_opcode = MGMT_OP_SET_ADVERTISING,
1776 .send_param = set_adv_on_param,
1777 .send_len = sizeof(set_adv_on_param),
1778 .expect_status = MGMT_STATUS_SUCCESS,
1779 .expect_param = set_adv_settings_param_2,
1780 .expect_len = sizeof(set_adv_settings_param_2),
1781 .expect_settings_set = MGMT_SETTING_ADVERTISING,
1782 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_ENABLE,
1783 .expect_hci_param = set_adv_on_set_adv_enable_param,
1784 .expect_hci_len = sizeof(set_adv_on_set_adv_enable_param),
1787 static const struct generic_data set_adv_on_rejected_test_1 = {
1788 .setup_settings = settings_powered,
1789 .send_opcode = MGMT_OP_SET_ADVERTISING,
1790 .send_param = set_adv_on_param,
1791 .send_len = sizeof(set_adv_on_param),
1792 .expect_status = MGMT_STATUS_REJECTED,
1795 static const uint8_t set_adv_set_appearance_param[2] = { 0x54, 0x65 };
1797 static const uint8_t set_adv_scan_rsp_data_appear_1[] = {
1798 0x04, /* Scan rsp data len */
1799 0x03, /* Local name data len */
1800 0x19, /* Complete name */
1803 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1804 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1805 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1808 static const struct generic_data set_adv_on_appearance_test_1 = {
1809 .setup_settings = settings_powered_le,
1810 .setup_send_opcode = MGMT_OP_SET_APPEARANCE,
1811 .setup_send_param = set_adv_set_appearance_param,
1812 .setup_send_len = sizeof(set_adv_set_appearance_param),
1813 .send_opcode = MGMT_OP_SET_ADVERTISING,
1814 .send_param = set_adv_on_param,
1815 .expect_param = set_adv_settings_param_2,
1816 .expect_len = sizeof(set_adv_settings_param_2),
1817 .send_len = sizeof(set_adv_on_param),
1818 .expect_status = MGMT_STATUS_SUCCESS,
1819 .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_RSP_DATA,
1820 .expect_hci_param = set_adv_scan_rsp_data_appear_1,
1821 .expect_hci_len = sizeof(set_adv_scan_rsp_data_appear_1),
1824 static const char set_adv_set_local_name_param[260] = { 'T', 'e', 's', 't', ' ',
1825 'n', 'a', 'm', 'e' };
1827 static const uint8_t set_adv_scan_rsp_data_name_1[] = {
1828 0x0c, /* Scan rsp data len */
1829 0x0b, /* Local name data len */
1830 0x09, /* Complete name */
1831 0x54, 0x65, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, /* "Test name" */
1834 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1835 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1838 static const struct generic_data set_adv_on_local_name_test_1 = {
1839 .setup_settings = settings_powered_le,
1840 .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
1841 .setup_send_param = set_adv_set_local_name_param,
1842 .setup_send_len = sizeof(set_adv_set_local_name_param),
1843 .send_opcode = MGMT_OP_SET_ADVERTISING,
1844 .send_param = set_adv_on_param,
1845 .expect_param = set_adv_settings_param_2,
1846 .expect_len = sizeof(set_adv_settings_param_2),
1847 .send_len = sizeof(set_adv_on_param),
1848 .expect_status = MGMT_STATUS_SUCCESS,
1849 .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_RSP_DATA,
1850 .expect_hci_param = set_adv_scan_rsp_data_name_1,
1851 .expect_hci_len = sizeof(set_adv_scan_rsp_data_name_1),
1854 static const struct setup_mgmt_cmd set_advertising_mgmt_cmd_arr[] = {
1856 .send_opcode = MGMT_OP_SET_APPEARANCE,
1857 .send_param = set_adv_set_appearance_param,
1858 .send_len = sizeof(set_adv_set_appearance_param),
1861 .send_opcode = MGMT_OP_SET_LOCAL_NAME,
1862 .send_param = set_adv_set_local_name_param,
1863 .send_len = sizeof(set_adv_set_local_name_param),
1865 { /* last element should always have opcode 0x00 */
1866 .send_opcode = 0x00,
1872 static const uint8_t set_adv_scan_rsp_data_name_and_appearance[] = {
1873 0x10, /* scan rsp data len */
1874 0x03, /* appearance data len */
1875 0x19, /* eir_appearance */
1876 0x54, 0x65, /* appearance value */
1877 0x0b, /* local name data len */
1878 0x09, /* complete name */
1879 0x54, 0x65, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, /* "test name" */
1882 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1883 0x00, 0x00, 0x00, 0x00, 0x00,
1887 static const struct generic_data set_adv_on_local_name_appear_test_1 = {
1888 .setup_settings = settings_powered_le,
1889 .setup_mgmt_cmd_arr = set_advertising_mgmt_cmd_arr,
1890 .send_opcode = MGMT_OP_SET_ADVERTISING,
1891 .send_param = set_adv_on_param,
1892 .expect_param = set_adv_settings_param_2,
1893 .expect_len = sizeof(set_adv_settings_param_2),
1894 .send_len = sizeof(set_adv_on_param),
1895 .expect_status = MGMT_STATUS_SUCCESS,
1896 .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_RSP_DATA,
1897 .expect_hci_param = set_adv_scan_rsp_data_name_and_appearance,
1898 .expect_hci_len = sizeof(set_adv_scan_rsp_data_name_and_appearance),
1901 static const char set_bredr_off_param[] = { 0x00 };
1902 static const char set_bredr_on_param[] = { 0x01 };
1903 static const char set_bredr_invalid_param[] = { 0x02 };
1904 static const char set_bredr_settings_param_1[] = { 0x00, 0x02, 0x00, 0x00 };
1905 static const char set_bredr_settings_param_2[] = { 0x80, 0x02, 0x00, 0x00 };
1906 static const char set_bredr_settings_param_3[] = { 0x81, 0x02, 0x00, 0x00 };
1908 static const struct generic_data set_bredr_off_success_test_1 = {
1909 .setup_settings = settings_le,
1910 .send_opcode = MGMT_OP_SET_BREDR,
1911 .send_param = set_bredr_off_param,
1912 .send_len = sizeof(set_bredr_off_param),
1913 .expect_status = MGMT_STATUS_SUCCESS,
1914 .expect_param = set_bredr_settings_param_1,
1915 .expect_len = sizeof(set_bredr_settings_param_1),
1916 .expect_settings_unset = MGMT_SETTING_BREDR,
1919 static const struct generic_data set_bredr_on_success_test_1 = {
1920 .setup_settings = settings_le,
1921 .setup_nobredr = true,
1922 .send_opcode = MGMT_OP_SET_BREDR,
1923 .send_param = set_bredr_on_param,
1924 .send_len = sizeof(set_bredr_on_param),
1925 .expect_status = MGMT_STATUS_SUCCESS,
1926 .expect_param = set_bredr_settings_param_2,
1927 .expect_len = sizeof(set_bredr_settings_param_2),
1928 .expect_settings_set = MGMT_SETTING_BREDR,
1931 static const struct generic_data set_bredr_on_success_test_2 = {
1932 .setup_settings = settings_powered_le,
1933 .setup_nobredr = true,
1934 .send_opcode = MGMT_OP_SET_BREDR,
1935 .send_param = set_bredr_on_param,
1936 .send_len = sizeof(set_bredr_on_param),
1937 .expect_status = MGMT_STATUS_SUCCESS,
1938 .expect_param = set_bredr_settings_param_3,
1939 .expect_len = sizeof(set_bredr_settings_param_3),
1940 .expect_settings_set = MGMT_SETTING_BREDR,
1943 static const struct generic_data set_bredr_off_notsupp_test = {
1944 .send_opcode = MGMT_OP_SET_BREDR,
1945 .send_param = set_bredr_off_param,
1946 .send_len = sizeof(set_bredr_off_param),
1947 .expect_status = MGMT_STATUS_NOT_SUPPORTED,
1950 static const struct generic_data set_bredr_off_failure_test_1 = {
1951 .setup_settings = settings_powered_le,
1952 .send_opcode = MGMT_OP_SET_BREDR,
1953 .send_param = set_bredr_off_param,
1954 .send_len = sizeof(set_bredr_off_param),
1955 .expect_status = MGMT_STATUS_REJECTED,
1958 static const struct generic_data set_bredr_off_failure_test_2 = {
1959 .setup_settings = settings_powered,
1960 .send_opcode = MGMT_OP_SET_BREDR,
1961 .send_param = set_bredr_off_param,
1962 .send_len = sizeof(set_bredr_off_param),
1963 .expect_status = MGMT_STATUS_REJECTED,
1966 static const struct generic_data set_bredr_off_failure_test_3 = {
1967 .setup_settings = settings_le,
1968 .send_opcode = MGMT_OP_SET_BREDR,
1969 .send_param = set_bredr_invalid_param,
1970 .send_len = sizeof(set_bredr_invalid_param),
1971 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1974 static const char set_local_name_param[260] = { 'T', 'e', 's', 't', ' ',
1975 'n', 'a', 'm', 'e' };
1976 static const char write_local_name_hci[248] = { 'T', 'e', 's', 't', ' ',
1977 'n', 'a', 'm', 'e' };
1978 static const char write_eir_local_name_hci_1[241] = { 0x00,
1979 0x0a, 0x09, 'T', 'e', 's', 't', ' ', 'n', 'a', 'm', 'e',
1980 0x02, 0x0a, 0x00, };
1982 static const struct mgmt_cp_set_local_name set_local_name_cp = {
1983 .name = {'T', 'e', 's', 't', ' ', 'n', 'a', 'm', 'e'},
1984 .short_name = {'T', 'e', 's', 't'},
1987 static const struct mgmt_cp_set_local_name set_local_name_longer_cp = {
1988 .name = {'T', 'e', 's', 't', ' ', 'n', 'a', 'm', 'e', '1', '2', '3'},
1991 static const struct mgmt_cp_set_local_name set_local_name_long_short_cp = {
1992 .name = {'T', 'e', 's', 't', ' ', 'n', 'a', 'm', 'e', '1', '2', '3'},
1993 .short_name = {'T', 'e', 's', 't'},
1996 static const struct generic_data set_local_name_test_1 = {
1997 .send_opcode = MGMT_OP_SET_LOCAL_NAME,
1998 .send_param = set_local_name_param,
1999 .send_len = sizeof(set_local_name_param),
2000 .expect_status = MGMT_STATUS_SUCCESS,
2001 .expect_param = set_local_name_param,
2002 .expect_len = sizeof(set_local_name_param),
2003 .expect_alt_ev = MGMT_EV_LOCAL_NAME_CHANGED,
2004 .expect_alt_ev_param = set_local_name_param,
2005 .expect_alt_ev_len = sizeof(set_local_name_param),
2008 static const struct generic_data set_local_name_test_2 = {
2009 .setup_settings = settings_powered,
2010 .send_opcode = MGMT_OP_SET_LOCAL_NAME,
2011 .send_param = set_local_name_param,
2012 .send_len = sizeof(set_local_name_param),
2013 .expect_status = MGMT_STATUS_SUCCESS,
2014 .expect_param = set_local_name_param,
2015 .expect_len = sizeof(set_local_name_param),
2016 .expect_hci_command = BT_HCI_CMD_WRITE_LOCAL_NAME,
2017 .expect_hci_param = write_local_name_hci,
2018 .expect_hci_len = sizeof(write_local_name_hci),
2019 .expect_alt_ev = MGMT_EV_LOCAL_NAME_CHANGED,
2020 .expect_alt_ev_param = set_local_name_param,
2021 .expect_alt_ev_len = sizeof(set_local_name_param),
2024 static const struct generic_data set_local_name_test_3 = {
2025 .setup_settings = settings_powered_ssp,
2026 .send_opcode = MGMT_OP_SET_LOCAL_NAME,
2027 .send_param = set_local_name_param,
2028 .send_len = sizeof(set_local_name_param),
2029 .expect_status = MGMT_STATUS_SUCCESS,
2030 .expect_param = set_local_name_param,
2031 .expect_len = sizeof(set_local_name_param),
2032 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
2033 .expect_hci_param = write_eir_local_name_hci_1,
2034 .expect_hci_len = sizeof(write_eir_local_name_hci_1),
2035 .expect_alt_ev = MGMT_EV_LOCAL_NAME_CHANGED,
2036 .expect_alt_ev_param = set_local_name_param,
2037 .expect_alt_ev_len = sizeof(set_local_name_param),
2040 static const char start_discovery_invalid_param[] = { 0x00 };
2041 static const char start_discovery_bredr_param[] = { 0x01 };
2042 static const char start_discovery_le_param[] = { 0x06 };
2043 static const char start_discovery_bredrle_param[] = { 0x07 };
2044 static const char start_discovery_valid_hci[] = { 0x01, 0x01 };
2045 static const char start_discovery_evt[] = { 0x07, 0x01 };
2046 static const char start_discovery_le_evt[] = { 0x06, 0x01 };
2048 static const struct generic_data start_discovery_not_powered_test_1 = {
2049 .send_opcode = MGMT_OP_START_DISCOVERY,
2050 .send_param = start_discovery_bredr_param,
2051 .send_len = sizeof(start_discovery_bredr_param),
2052 .expect_status = MGMT_STATUS_NOT_POWERED,
2053 .expect_param = start_discovery_bredr_param,
2054 .expect_len = sizeof(start_discovery_bredr_param),
2057 static const struct generic_data start_discovery_invalid_param_test_1 = {
2058 .setup_settings = settings_powered,
2059 .send_opcode = MGMT_OP_START_DISCOVERY,
2060 .send_param = start_discovery_invalid_param,
2061 .send_len = sizeof(start_discovery_invalid_param),
2062 .expect_status = MGMT_STATUS_INVALID_PARAMS,
2063 .expect_param = start_discovery_invalid_param,
2064 .expect_len = sizeof(start_discovery_invalid_param),
2067 static const struct generic_data start_discovery_not_supported_test_1 = {
2068 .setup_settings = settings_powered,
2069 .send_opcode = MGMT_OP_START_DISCOVERY,
2070 .send_param = start_discovery_le_param,
2071 .send_len = sizeof(start_discovery_le_param),
2072 .expect_status = MGMT_STATUS_REJECTED,
2073 .expect_param = start_discovery_le_param,
2074 .expect_len = sizeof(start_discovery_le_param),
2077 static const struct generic_data start_discovery_valid_param_test_1 = {
2078 .setup_settings = settings_powered_le,
2079 .send_opcode = MGMT_OP_START_DISCOVERY,
2080 .send_param = start_discovery_bredrle_param,
2081 .send_len = sizeof(start_discovery_bredrle_param),
2082 .expect_status = MGMT_STATUS_SUCCESS,
2083 .expect_param = start_discovery_bredrle_param,
2084 .expect_len = sizeof(start_discovery_bredrle_param),
2085 .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_ENABLE,
2086 .expect_hci_param = start_discovery_valid_hci,
2087 .expect_hci_len = sizeof(start_discovery_valid_hci),
2088 .expect_alt_ev = MGMT_EV_DISCOVERING,
2089 .expect_alt_ev_param = start_discovery_evt,
2090 .expect_alt_ev_len = sizeof(start_discovery_evt),
2093 static const struct generic_data start_discovery_valid_param_test_2 = {
2094 .setup_settings = settings_powered,
2095 .send_opcode = MGMT_OP_START_DISCOVERY,
2096 .send_param = start_discovery_le_param,
2097 .send_len = sizeof(start_discovery_le_param),
2098 .expect_status = MGMT_STATUS_SUCCESS,
2099 .expect_param = start_discovery_le_param,
2100 .expect_len = sizeof(start_discovery_le_param),
2101 .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_ENABLE,
2102 .expect_hci_param = start_discovery_valid_hci,
2103 .expect_hci_len = sizeof(start_discovery_valid_hci),
2104 .expect_alt_ev = MGMT_EV_DISCOVERING,
2105 .expect_alt_ev_param = start_discovery_le_evt,
2106 .expect_alt_ev_len = sizeof(start_discovery_le_evt),
2109 static const struct generic_data start_discovery_valid_param_power_off_1 = {
2110 .setup_settings = settings_le,
2111 .send_opcode = MGMT_OP_START_DISCOVERY,
2112 .send_param = start_discovery_bredrle_param,
2113 .send_len = sizeof(start_discovery_bredrle_param),
2114 .expect_status = MGMT_STATUS_NOT_POWERED,
2115 .force_power_off = true,
2116 .expect_param = start_discovery_bredrle_param,
2117 .expect_len = sizeof(start_discovery_bredrle_param),
2120 static const char stop_discovery_bredrle_param[] = { 0x07 };
2121 static const char stop_discovery_bredrle_invalid_param[] = { 0x06 };
2122 static const char stop_discovery_valid_hci[] = { 0x00, 0x00 };
2123 static const char stop_discovery_evt[] = { 0x07, 0x00 };
2124 static const char stop_discovery_bredr_param[] = { 0x01 };
2125 static const char stop_discovery_bredr_discovering[] = { 0x01, 0x00 };
2127 static const struct generic_data stop_discovery_success_test_1 = {
2128 .setup_settings = settings_powered_le,
2129 .setup_send_opcode = MGMT_OP_START_DISCOVERY,
2130 .setup_send_param = start_discovery_bredrle_param,
2131 .setup_send_len = sizeof(start_discovery_bredrle_param),
2132 .send_opcode = MGMT_OP_STOP_DISCOVERY,
2133 .send_param = stop_discovery_bredrle_param,
2134 .send_len = sizeof(stop_discovery_bredrle_param),
2135 .expect_status = MGMT_STATUS_SUCCESS,
2136 .expect_param = stop_discovery_bredrle_param,
2137 .expect_len = sizeof(stop_discovery_bredrle_param),
2138 .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_ENABLE,
2139 .expect_hci_param = stop_discovery_valid_hci,
2140 .expect_hci_len = sizeof(stop_discovery_valid_hci),
2141 .expect_alt_ev = MGMT_EV_DISCOVERING,
2142 .expect_alt_ev_param = stop_discovery_evt,
2143 .expect_alt_ev_len = sizeof(stop_discovery_evt),
2146 static const struct generic_data stop_discovery_bredr_success_test_1 = {
2147 .setup_settings = settings_powered,
2148 .setup_send_opcode = MGMT_OP_START_DISCOVERY,
2149 .setup_send_param = start_discovery_bredr_param,
2150 .setup_send_len = sizeof(start_discovery_bredr_param),
2151 .send_opcode = MGMT_OP_STOP_DISCOVERY,
2152 .send_param = stop_discovery_bredr_param,
2153 .send_len = sizeof(stop_discovery_bredr_param),
2154 .expect_status = MGMT_STATUS_SUCCESS,
2155 .expect_param = stop_discovery_bredr_param,
2156 .expect_len = sizeof(stop_discovery_bredr_param),
2157 .expect_hci_command = BT_HCI_CMD_INQUIRY_CANCEL,
2158 .expect_alt_ev = MGMT_EV_DISCOVERING,
2159 .expect_alt_ev_param = stop_discovery_bredr_discovering,
2160 .expect_alt_ev_len = sizeof(stop_discovery_bredr_discovering),
2163 static const struct generic_data stop_discovery_rejected_test_1 = {
2164 .setup_settings = settings_powered_le,
2165 .send_opcode = MGMT_OP_STOP_DISCOVERY,
2166 .send_param = stop_discovery_bredrle_param,
2167 .send_len = sizeof(stop_discovery_bredrle_param),
2168 .expect_status = MGMT_STATUS_REJECTED,
2169 .expect_param = stop_discovery_bredrle_param,
2170 .expect_len = sizeof(stop_discovery_bredrle_param),
2173 static const struct generic_data stop_discovery_invalid_param_test_1 = {
2174 .setup_settings = settings_powered_le,
2175 .setup_send_opcode = MGMT_OP_START_DISCOVERY,
2176 .setup_send_param = start_discovery_bredrle_param,
2177 .setup_send_len = sizeof(start_discovery_bredrle_param),
2178 .send_opcode = MGMT_OP_STOP_DISCOVERY,
2179 .send_param = stop_discovery_bredrle_invalid_param,
2180 .send_len = sizeof(stop_discovery_bredrle_invalid_param),
2181 .expect_status = MGMT_STATUS_INVALID_PARAMS,
2182 .expect_param = stop_discovery_bredrle_invalid_param,
2183 .expect_len = sizeof(stop_discovery_bredrle_invalid_param),
2186 static const char start_service_discovery_invalid_param[] = { 0x00, 0x00, 0x00, 0x00 };
2187 static const char start_service_discovery_invalid_resp[] = { 0x00 };
2188 static const char start_service_discovery_bredr_param[] = { 0x01, 0x00, 0x00, 0x00};
2189 static const char start_service_discovery_bredr_resp[] = { 0x01 };
2190 static const char start_service_discovery_le_param[] = { 0x06, 0x00, 0x01, 0x00,
2191 0xfa, 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00,
2192 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 };
2193 static const char start_service_discovery_le_resp[] = { 0x06 };
2194 static const char start_service_discovery_bredrle_param[] = { 0x07, 0x00, 0x01, 0x00,
2195 0xfa, 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00,
2196 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 };
2197 static const char start_service_discovery_bredrle_resp[] = { 0x07 };
2198 static const char start_service_discovery_valid_hci[] = { 0x01, 0x01 };
2199 static const char start_service_discovery_evt[] = { 0x07, 0x01 };
2200 static const char start_service_discovery_le_evt[] = { 0x06, 0x01 };
2202 static const struct generic_data start_service_discovery_not_powered_test_1 = {
2203 .send_opcode = MGMT_OP_START_SERVICE_DISCOVERY,
2204 .send_param = start_service_discovery_bredr_param,
2205 .send_len = sizeof(start_service_discovery_bredr_param),
2206 .expect_status = MGMT_STATUS_NOT_POWERED,
2207 .expect_param = start_service_discovery_bredr_resp,
2208 .expect_len = sizeof(start_service_discovery_bredr_resp),
2211 static const struct generic_data start_service_discovery_invalid_param_test_1 = {
2212 .setup_settings = settings_powered,
2213 .send_opcode = MGMT_OP_START_SERVICE_DISCOVERY,
2214 .send_param = start_service_discovery_invalid_param,
2215 .send_len = sizeof(start_service_discovery_invalid_param),
2216 .expect_status = MGMT_STATUS_INVALID_PARAMS,
2217 .expect_param = start_service_discovery_invalid_resp,
2218 .expect_len = sizeof(start_service_discovery_invalid_resp),
2221 static const struct generic_data start_service_discovery_not_supported_test_1 = {
2222 .setup_settings = settings_powered,
2223 .send_opcode = MGMT_OP_START_SERVICE_DISCOVERY,
2224 .send_param = start_service_discovery_le_param,
2225 .send_len = sizeof(start_service_discovery_le_param),
2226 .expect_status = MGMT_STATUS_REJECTED,
2227 .expect_param = start_service_discovery_le_resp,
2228 .expect_len = sizeof(start_service_discovery_le_resp),
2231 static const struct generic_data start_service_discovery_valid_param_test_1 = {
2232 .setup_settings = settings_powered_le,
2233 .send_opcode = MGMT_OP_START_SERVICE_DISCOVERY,
2234 .send_param = start_service_discovery_bredrle_param,
2235 .send_len = sizeof(start_service_discovery_bredrle_param),
2236 .expect_status = MGMT_STATUS_SUCCESS,
2237 .expect_param = start_service_discovery_bredrle_resp,
2238 .expect_len = sizeof(start_service_discovery_bredrle_resp),
2239 .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_ENABLE,
2240 .expect_hci_param = start_service_discovery_valid_hci,
2241 .expect_hci_len = sizeof(start_service_discovery_valid_hci),
2242 .expect_alt_ev = MGMT_EV_DISCOVERING,
2243 .expect_alt_ev_param = start_service_discovery_evt,
2244 .expect_alt_ev_len = sizeof(start_service_discovery_evt),
2247 static const struct generic_data start_service_discovery_valid_param_test_2 = {
2248 .setup_settings = settings_powered,
2249 .send_opcode = MGMT_OP_START_SERVICE_DISCOVERY,
2250 .send_param = start_service_discovery_le_param,
2251 .send_len = sizeof(start_service_discovery_le_param),
2252 .expect_status = MGMT_STATUS_SUCCESS,
2253 .expect_param = start_service_discovery_le_resp,
2254 .expect_len = sizeof(start_service_discovery_le_resp),
2255 .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_ENABLE,
2256 .expect_hci_param = start_service_discovery_valid_hci,
2257 .expect_hci_len = sizeof(start_service_discovery_valid_hci),
2258 .expect_alt_ev = MGMT_EV_DISCOVERING,
2259 .expect_alt_ev_param = start_service_discovery_le_evt,
2260 .expect_alt_ev_len = sizeof(start_service_discovery_le_evt),
2263 static const char set_dev_class_valid_param[] = { 0x01, 0x0c };
2264 static const char set_dev_class_zero_rsp[] = { 0x00, 0x00, 0x00 };
2265 static const char set_dev_class_valid_rsp[] = { 0x0c, 0x01, 0x00 };
2266 static const char set_dev_class_valid_hci[] = { 0x0c, 0x01, 0x00 };
2267 static const char set_dev_class_invalid_param[] = { 0x01, 0x01 };
2269 static const struct generic_data set_dev_class_valid_param_test_1 = {
2270 .send_opcode = MGMT_OP_SET_DEV_CLASS,
2271 .send_param = set_dev_class_valid_param,
2272 .send_len = sizeof(set_dev_class_valid_param),
2273 .expect_status = MGMT_STATUS_SUCCESS,
2274 .expect_param = set_dev_class_zero_rsp,
2275 .expect_len = sizeof(set_dev_class_zero_rsp),
2278 static const struct generic_data set_dev_class_valid_param_test_2 = {
2279 .setup_settings = settings_powered,
2280 .send_opcode = MGMT_OP_SET_DEV_CLASS,
2281 .send_param = set_dev_class_valid_param,
2282 .send_len = sizeof(set_dev_class_valid_param),
2283 .expect_status = MGMT_STATUS_SUCCESS,
2284 .expect_param = set_dev_class_valid_rsp,
2285 .expect_len = sizeof(set_dev_class_valid_rsp),
2286 .expect_alt_ev = MGMT_EV_CLASS_OF_DEV_CHANGED,
2287 .expect_alt_ev_param = set_dev_class_valid_rsp,
2288 .expect_alt_ev_len = sizeof(set_dev_class_valid_rsp),
2289 .expect_hci_command = BT_HCI_CMD_WRITE_CLASS_OF_DEV,
2290 .expect_hci_param = set_dev_class_valid_hci,
2291 .expect_hci_len = sizeof(set_dev_class_valid_hci),
2294 static const struct generic_data set_dev_class_invalid_param_test_1 = {
2295 .send_opcode = MGMT_OP_SET_DEV_CLASS,
2296 .send_param = set_dev_class_invalid_param,
2297 .send_len = sizeof(set_dev_class_invalid_param),
2298 .expect_status = MGMT_STATUS_INVALID_PARAMS,
2301 static const char add_spp_uuid_param[] = {
2302 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
2303 0x00, 0x10, 0x00, 0x00, 0x01, 0x11, 0x00, 0x00,
2305 static const char add_dun_uuid_param[] = {
2306 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
2307 0x00, 0x10, 0x00, 0x00, 0x03, 0x11, 0x00, 0x00,
2309 static const char add_sync_uuid_param[] = {
2310 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
2311 0x00, 0x10, 0x00, 0x00, 0x04, 0x11, 0x00, 0x00,
2313 static const char add_opp_uuid_param[] = {
2314 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
2315 0x00, 0x10, 0x00, 0x00, 0x05, 0x11, 0x00, 0x00,
2317 static const char write_eir_uuid16_hci[241] = { 0x00,
2318 0x02, 0x0a, 0x00, 0x03, 0x03, 0x01, 0x11 };
2319 static const char write_eir_multi_uuid16_hci_1[241] = { 0x00,
2320 0x02, 0x0a, 0x00, 0x09, 0x03, 0x01, 0x11, 0x03,
2321 0x11, 0x04, 0x11, 0x05, 0x11 };
2322 static const char write_eir_multi_uuid16_hci_2[241] = { 0x00,
2323 0x02, 0x0a, 0x00, 0xeb, 0x02, 0x00, 0x20, 0x01,
2324 0x20, 0x02, 0x20, 0x03, 0x20, 0x04, 0x20, 0x05,
2325 0x20, 0x06, 0x20, 0x07, 0x20, 0x08, 0x20, 0x09,
2326 0x20, 0x0a, 0x20, 0x0b, 0x20, 0x0c, 0x20, 0x0d,
2327 0x20, 0x0e, 0x20, 0x0f, 0x20, 0x10, 0x20, 0x11,
2328 0x20, 0x12, 0x20, 0x13, 0x20, 0x14, 0x20, 0x15,
2329 0x20, 0x16, 0x20, 0x17, 0x20, 0x18, 0x20, 0x19,
2330 0x20, 0x1a, 0x20, 0x1b, 0x20, 0x1c, 0x20, 0x1d,
2331 0x20, 0x1e, 0x20, 0x1f, 0x20, 0x20, 0x20, 0x21,
2332 0x20, 0x22, 0x20, 0x23, 0x20, 0x24, 0x20, 0x25,
2333 0x20, 0x26, 0x20, 0x27, 0x20, 0x28, 0x20, 0x29,
2334 0x20, 0x2a, 0x20, 0x2b, 0x20, 0x2c, 0x20, 0x2d,
2335 0x20, 0x2e, 0x20, 0x2f, 0x20, 0x30, 0x20, 0x31,
2336 0x20, 0x32, 0x20, 0x33, 0x20, 0x34, 0x20, 0x35,
2337 0x20, 0x36, 0x20, 0x37, 0x20, 0x38, 0x20, 0x39,
2338 0x20, 0x3a, 0x20, 0x3b, 0x20, 0x3c, 0x20, 0x3d,
2339 0x20, 0x3e, 0x20, 0x3f, 0x20, 0x40, 0x20, 0x41,
2340 0x20, 0x42, 0x20, 0x43, 0x20, 0x44, 0x20, 0x45,
2341 0x20, 0x46, 0x20, 0x47, 0x20, 0x48, 0x20, 0x49,
2342 0x20, 0x4a, 0x20, 0x4b, 0x20, 0x4c, 0x20, 0x4d,
2343 0x20, 0x4e, 0x20, 0x4f, 0x20, 0x50, 0x20, 0x51,
2344 0x20, 0x52, 0x20, 0x53, 0x20, 0x54, 0x20, 0x55,
2345 0x20, 0x56, 0x20, 0x57, 0x20, 0x58, 0x20, 0x59,
2346 0x20, 0x5a, 0x20, 0x5b, 0x20, 0x5c, 0x20, 0x5d,
2347 0x20, 0x5e, 0x20, 0x5f, 0x20, 0x60, 0x20, 0x61,
2348 0x20, 0x62, 0x20, 0x63, 0x20, 0x64, 0x20, 0x65,
2349 0x20, 0x66, 0x20, 0x67, 0x20, 0x68, 0x20, 0x69,
2350 0x20, 0x6a, 0x20, 0x6b, 0x20, 0x6c, 0x20, 0x6d,
2351 0x20, 0x6e, 0x20, 0x6f, 0x20, 0x70, 0x20, 0x71,
2352 0x20, 0x72, 0x20, 0x73, 0x20, 0x74, 0x20, 0x00 };
2353 static const char add_uuid32_param_1[] = {
2354 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
2355 0x00, 0x10, 0x00, 0x00, 0x78, 0x56, 0x34, 0x12,
2357 static const char add_uuid32_param_2[] = {
2358 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
2359 0x00, 0x10, 0x00, 0x00, 0xef, 0xcd, 0xbc, 0x9a,
2361 static const char add_uuid32_param_3[] = {
2362 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
2363 0x00, 0x10, 0x00, 0x00, 0xff, 0xee, 0xdd, 0xcc,
2365 static const char add_uuid32_param_4[] = {
2366 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
2367 0x00, 0x10, 0x00, 0x00, 0x11, 0x22, 0x33, 0x44,
2369 static const char write_eir_uuid32_hci[241] = { 0x00,
2370 0x02, 0x0a, 0x00, 0x05, 0x05, 0x78, 0x56, 0x34,
2372 static const char write_eir_uuid32_multi_hci[241] = { 0x00,
2373 0x02, 0x0a, 0x00, 0x11, 0x05, 0x78, 0x56, 0x34,
2374 0x12, 0xef, 0xcd, 0xbc, 0x9a, 0xff, 0xee, 0xdd,
2375 0xcc, 0x11, 0x22, 0x33, 0x44 };
2376 static const char write_eir_uuid32_multi_hci_2[] = { 0x00,
2377 0x02, 0x0a, 0x00, 0xe9, 0x04, 0xff, 0xff, 0xff,
2378 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff,
2379 0xff, 0xfc, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff,
2380 0xff, 0xfa, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff,
2381 0xff, 0xf8, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff,
2382 0xff, 0xf6, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff,
2383 0xff, 0xf4, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff,
2384 0xff, 0xf2, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff,
2385 0xff, 0xf0, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff,
2386 0xff, 0xee, 0xff, 0xff, 0xff, 0xed, 0xff, 0xff,
2387 0xff, 0xec, 0xff, 0xff, 0xff, 0xeb, 0xff, 0xff,
2388 0xff, 0xea, 0xff, 0xff, 0xff, 0xe9, 0xff, 0xff,
2389 0xff, 0xe8, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff,
2390 0xff, 0xe6, 0xff, 0xff, 0xff, 0xe5, 0xff, 0xff,
2391 0xff, 0xe4, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff,
2392 0xff, 0xe2, 0xff, 0xff, 0xff, 0xe1, 0xff, 0xff,
2393 0xff, 0xe0, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff,
2394 0xff, 0xde, 0xff, 0xff, 0xff, 0xdd, 0xff, 0xff,
2395 0xff, 0xdc, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xff,
2396 0xff, 0xda, 0xff, 0xff, 0xff, 0xd9, 0xff, 0xff,
2397 0xff, 0xd8, 0xff, 0xff, 0xff, 0xd7, 0xff, 0xff,
2398 0xff, 0xd6, 0xff, 0xff, 0xff, 0xd5, 0xff, 0xff,
2399 0xff, 0xd4, 0xff, 0xff, 0xff, 0xd3, 0xff, 0xff,
2400 0xff, 0xd2, 0xff, 0xff, 0xff, 0xd1, 0xff, 0xff,
2401 0xff, 0xd0, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff,
2402 0xff, 0xce, 0xff, 0xff, 0xff, 0xcd, 0xff, 0xff,
2403 0xff, 0xcc, 0xff, 0xff, 0xff, 0xcb, 0xff, 0xff,
2404 0xff, 0xca, 0xff, 0xff, 0xff, 0xc9, 0xff, 0xff,
2405 0xff, 0xc8, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff,
2406 0xff, 0xc6, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 };
2407 static const char add_uuid128_param_1[] = {
2408 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
2409 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
2411 static const char add_uuid128_param_2[] = {
2412 0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa, 0x99, 0x88,
2413 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x00,
2415 static const char write_eir_uuid128_hci[241] = { 0x00,
2416 0x02, 0x0a, 0x00, 0x11, 0x07, 0x00, 0x11, 0x22,
2417 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa,
2418 0xbb, 0xcc, 0xdd, 0xee, 0xff };
2419 static const char write_eir_uuid128_multi_hci[241] = { 0x00,
2420 0x02, 0x0a, 0x00, 0x21, 0x07, 0x00, 0x11, 0x22,
2421 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa,
2422 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0xff, 0xee, 0xdd,
2423 0xcc, 0xbb, 0xaa, 0x99, 0x88, 0x77, 0x66, 0x55,
2424 0x44, 0x33, 0x22, 0x11 };
2425 static const char write_eir_uuid128_multi_hci_2[] = { 0x00,
2426 0x02, 0x0a, 0x00, 0xe1, 0x07, 0x11, 0x22, 0x33,
2427 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2428 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22, 0x33,
2429 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2430 0xcc, 0xdd, 0xee, 0xff, 0x01, 0x11, 0x22, 0x33,
2431 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2432 0xcc, 0xdd, 0xee, 0xff, 0x02, 0x11, 0x22, 0x33,
2433 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2434 0xcc, 0xdd, 0xee, 0xff, 0x03, 0x11, 0x22, 0x33,
2435 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2436 0xcc, 0xdd, 0xee, 0xff, 0x04, 0x11, 0x22, 0x33,
2437 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2438 0xcc, 0xdd, 0xee, 0xff, 0x05, 0x11, 0x22, 0x33,
2439 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2440 0xcc, 0xdd, 0xee, 0xff, 0x06, 0x11, 0x22, 0x33,
2441 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2442 0xcc, 0xdd, 0xee, 0xff, 0x07, 0x11, 0x22, 0x33,
2443 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2444 0xcc, 0xdd, 0xee, 0xff, 0x08, 0x11, 0x22, 0x33,
2445 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2446 0xcc, 0xdd, 0xee, 0xff, 0x09, 0x11, 0x22, 0x33,
2447 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2448 0xcc, 0xdd, 0xee, 0xff, 0x0a, 0x11, 0x22, 0x33,
2449 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2450 0xcc, 0xdd, 0xee, 0xff, 0x0b, 0x11, 0x22, 0x33,
2451 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2452 0xcc, 0xdd, 0xee, 0xff, 0x0c, 0xff, 0xee, 0xdd,
2453 0xcc, 0xbb, 0xaa, 0x99, 0x88, 0x77, 0x66, 0x55,
2454 0x44, 0x33, 0x22, 0x11, 0x00, 0x00, 0x00, 0x00,
2455 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
2456 static const char write_eir_uuid_mix_hci[241] = { 0x00,
2457 0x02, 0x0a, 0x00, 0x05, 0x03, 0x01, 0x11, 0x03,
2458 0x11, 0x09, 0x05, 0x78, 0x56, 0x34, 0x12, 0xef,
2459 0xcd, 0xbc, 0x9a, 0x21, 0x07, 0x00, 0x11, 0x22,
2460 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa,
2461 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0xff, 0xee, 0xdd,
2462 0xcc, 0xbb, 0xaa, 0x99, 0x88, 0x77, 0x66, 0x55,
2463 0x44, 0x33, 0x22, 0x11 };
2465 static const struct generic_data add_uuid16_test_1 = {
2466 .setup_settings = settings_powered_ssp,
2467 .send_opcode = MGMT_OP_ADD_UUID,
2468 .send_param = add_spp_uuid_param,
2469 .send_len = sizeof(add_spp_uuid_param),
2470 .expect_status = MGMT_STATUS_SUCCESS,
2471 .expect_param = set_dev_class_zero_rsp,
2472 .expect_len = sizeof(set_dev_class_zero_rsp),
2473 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
2474 .expect_hci_param = write_eir_uuid16_hci,
2475 .expect_hci_len = sizeof(write_eir_uuid16_hci),
2478 static const struct generic_data add_multi_uuid16_test_1 = {
2479 .send_opcode = MGMT_OP_ADD_UUID,
2480 .send_param = add_opp_uuid_param,
2481 .send_len = sizeof(add_opp_uuid_param),
2482 .expect_status = MGMT_STATUS_SUCCESS,
2483 .expect_param = set_dev_class_zero_rsp,
2484 .expect_len = sizeof(set_dev_class_zero_rsp),
2485 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
2486 .expect_hci_param = write_eir_multi_uuid16_hci_1,
2487 .expect_hci_len = sizeof(write_eir_multi_uuid16_hci_1),
2490 static const struct generic_data add_multi_uuid16_test_2 = {
2491 .send_opcode = MGMT_OP_ADD_UUID,
2492 .send_param = add_opp_uuid_param,
2493 .send_len = sizeof(add_opp_uuid_param),
2494 .expect_status = MGMT_STATUS_SUCCESS,
2495 .expect_param = set_dev_class_zero_rsp,
2496 .expect_len = sizeof(set_dev_class_zero_rsp),
2497 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
2498 .expect_hci_param = write_eir_multi_uuid16_hci_2,
2499 .expect_hci_len = sizeof(write_eir_multi_uuid16_hci_2),
2502 static const struct generic_data add_uuid32_test_1 = {
2503 .setup_settings = settings_powered_ssp,
2504 .send_opcode = MGMT_OP_ADD_UUID,
2505 .send_param = add_uuid32_param_1,
2506 .send_len = sizeof(add_uuid32_param_1),
2507 .expect_status = MGMT_STATUS_SUCCESS,
2508 .expect_param = set_dev_class_zero_rsp,
2509 .expect_len = sizeof(set_dev_class_zero_rsp),
2510 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
2511 .expect_hci_param = write_eir_uuid32_hci,
2512 .expect_hci_len = sizeof(write_eir_uuid32_hci),
2515 static const struct generic_data add_uuid32_multi_test_1 = {
2516 .send_opcode = MGMT_OP_ADD_UUID,
2517 .send_param = add_uuid32_param_4,
2518 .send_len = sizeof(add_uuid32_param_4),
2519 .expect_status = MGMT_STATUS_SUCCESS,
2520 .expect_param = set_dev_class_zero_rsp,
2521 .expect_len = sizeof(set_dev_class_zero_rsp),
2522 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
2523 .expect_hci_param = write_eir_uuid32_multi_hci,
2524 .expect_hci_len = sizeof(write_eir_uuid32_multi_hci),
2527 static const struct generic_data add_uuid32_multi_test_2 = {
2528 .send_opcode = MGMT_OP_ADD_UUID,
2529 .send_param = add_uuid32_param_4,
2530 .send_len = sizeof(add_uuid32_param_4),
2531 .expect_status = MGMT_STATUS_SUCCESS,
2532 .expect_param = set_dev_class_zero_rsp,
2533 .expect_len = sizeof(set_dev_class_zero_rsp),
2534 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
2535 .expect_hci_param = write_eir_uuid32_multi_hci_2,
2536 .expect_hci_len = sizeof(write_eir_uuid32_multi_hci_2),
2539 static const struct generic_data add_uuid128_test_1 = {
2540 .setup_settings = settings_powered_ssp,
2541 .send_opcode = MGMT_OP_ADD_UUID,
2542 .send_param = add_uuid128_param_1,
2543 .send_len = sizeof(add_uuid128_param_1),
2544 .expect_status = MGMT_STATUS_SUCCESS,
2545 .expect_param = set_dev_class_zero_rsp,
2546 .expect_len = sizeof(set_dev_class_zero_rsp),
2547 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
2548 .expect_hci_param = write_eir_uuid128_hci,
2549 .expect_hci_len = sizeof(write_eir_uuid128_hci),
2552 static const struct generic_data add_uuid128_multi_test_1 = {
2553 .send_opcode = MGMT_OP_ADD_UUID,
2554 .send_param = add_uuid128_param_2,
2555 .send_len = sizeof(add_uuid32_param_2),
2556 .expect_status = MGMT_STATUS_SUCCESS,
2557 .expect_param = set_dev_class_zero_rsp,
2558 .expect_len = sizeof(set_dev_class_zero_rsp),
2559 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
2560 .expect_hci_param = write_eir_uuid128_multi_hci,
2561 .expect_hci_len = sizeof(write_eir_uuid128_multi_hci),
2564 static const struct generic_data add_uuid128_multi_test_2 = {
2565 .send_opcode = MGMT_OP_ADD_UUID,
2566 .send_param = add_uuid128_param_2,
2567 .send_len = sizeof(add_uuid128_param_2),
2568 .expect_status = MGMT_STATUS_SUCCESS,
2569 .expect_param = set_dev_class_zero_rsp,
2570 .expect_len = sizeof(set_dev_class_zero_rsp),
2571 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
2572 .expect_hci_param = write_eir_uuid128_multi_hci_2,
2573 .expect_hci_len = sizeof(write_eir_uuid128_multi_hci_2),
2576 static const struct generic_data add_uuid_mix_test_1 = {
2577 .send_opcode = MGMT_OP_ADD_UUID,
2578 .send_param = add_uuid128_param_2,
2579 .send_len = sizeof(add_uuid128_param_2),
2580 .expect_status = MGMT_STATUS_SUCCESS,
2581 .expect_param = set_dev_class_zero_rsp,
2582 .expect_len = sizeof(set_dev_class_zero_rsp),
2583 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
2584 .expect_hci_param = write_eir_uuid_mix_hci,
2585 .expect_hci_len = sizeof(write_eir_uuid_mix_hci),
2588 static const char remove_dun_uuid_param[] = {
2589 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
2590 0x00, 0x10, 0x00, 0x00, 0x03, 0x11, 0x00, 0x00 };
2592 static const char write_eir_remove_dun_hci[241] = {
2593 0x00, 0x02, 0x0a, 0x00, 0x05, 0x03, 0x01, 0x11, 0x04,
2596 static const struct generic_data remove_uuid_success_1 = {
2597 .send_opcode = MGMT_OP_REMOVE_UUID,
2598 .send_param = remove_dun_uuid_param,
2599 .send_len = sizeof(remove_dun_uuid_param),
2600 .expect_status = MGMT_STATUS_SUCCESS,
2601 .expect_param = set_dev_class_zero_rsp,
2602 .expect_len = sizeof(set_dev_class_zero_rsp),
2603 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
2604 .expect_hci_param = write_eir_remove_dun_hci,
2605 .expect_hci_len = sizeof(write_eir_remove_dun_hci),
2608 static const char remove_all_uuid_param[16] = { 0x00 };
2610 static const struct generic_data remove_uuid_all_success_2 = {
2611 .send_opcode = MGMT_OP_REMOVE_UUID,
2612 .send_param = remove_all_uuid_param,
2613 .send_len = sizeof(remove_all_uuid_param),
2614 .expect_status = MGMT_STATUS_SUCCESS,
2615 .expect_param = set_dev_class_zero_rsp,
2616 .expect_len = sizeof(set_dev_class_zero_rsp),
2619 static const struct generic_data remove_uuid_power_off_success_3 = {
2620 .send_opcode = MGMT_OP_REMOVE_UUID,
2621 .send_param = remove_dun_uuid_param,
2622 .send_len = sizeof(remove_dun_uuid_param),
2623 .expect_status = MGMT_STATUS_SUCCESS,
2624 .expect_param = set_dev_class_zero_rsp,
2625 .expect_len = sizeof(set_dev_class_zero_rsp),
2628 static const struct generic_data remove_uuid_power_off_on_success_4 = {
2629 .send_opcode = MGMT_OP_SET_POWERED,
2630 .send_param = set_powered_on_param,
2631 .send_len = sizeof(set_powered_on_param),
2632 .expect_status = MGMT_STATUS_SUCCESS,
2633 .expect_param = set_ssp_settings_param_2,
2634 .expect_len = sizeof(set_ssp_settings_param_2),
2635 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
2636 .expect_hci_param = write_eir_remove_dun_hci,
2637 .expect_hci_len = sizeof(write_eir_remove_dun_hci),
2640 static const struct generic_data remove_uuid_invalid_params_1 = {
2641 .send_opcode = MGMT_OP_REMOVE_UUID,
2642 .send_param = add_opp_uuid_param,
2643 .send_len = sizeof(add_opp_uuid_param),
2644 .expect_status = MGMT_STATUS_INVALID_PARAMS,
2647 static const char load_link_keys_valid_param_1[] = { 0x00, 0x00, 0x00 };
2648 static const char load_link_keys_valid_param_2[] = { 0x01, 0x00, 0x00 };
2649 static const char load_link_keys_invalid_param_1[] = { 0x02, 0x00, 0x00 };
2650 static const char load_link_keys_invalid_param_2[] = { 0x00, 0x01, 0x00 };
2651 /* Invalid bdaddr type */
2652 static const char load_link_keys_invalid_param_3[] = { 0x00, 0x01, 0x00,
2653 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* addr */
2654 0x01, /* addr type */
2655 0x00, /* key type */
2656 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2657 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2658 0x04, /* PIN length */
2661 static const struct generic_data load_link_keys_success_test_1 = {
2662 .send_opcode = MGMT_OP_LOAD_LINK_KEYS,
2663 .send_param = load_link_keys_valid_param_1,
2664 .send_len = sizeof(load_link_keys_valid_param_1),
2665 .expect_status = MGMT_STATUS_SUCCESS,
2668 static const struct generic_data load_link_keys_success_test_2 = {
2669 .send_opcode = MGMT_OP_LOAD_LINK_KEYS,
2670 .send_param = load_link_keys_valid_param_2,
2671 .send_len = sizeof(load_link_keys_valid_param_2),
2672 .expect_status = MGMT_STATUS_SUCCESS,
2675 static const struct generic_data load_link_keys_invalid_params_test_1 = {
2676 .send_opcode = MGMT_OP_LOAD_LINK_KEYS,
2677 .send_param = load_link_keys_invalid_param_1,
2678 .send_len = sizeof(load_link_keys_invalid_param_1),
2679 .expect_status = MGMT_STATUS_INVALID_PARAMS,
2682 static const struct generic_data load_link_keys_invalid_params_test_2 = {
2683 .send_opcode = MGMT_OP_LOAD_LINK_KEYS,
2684 .send_param = load_link_keys_invalid_param_2,
2685 .send_len = sizeof(load_link_keys_invalid_param_2),
2686 .expect_status = MGMT_STATUS_INVALID_PARAMS,
2689 static const struct generic_data load_link_keys_invalid_params_test_3 = {
2690 .send_opcode = MGMT_OP_LOAD_LINK_KEYS,
2691 .send_param = load_link_keys_invalid_param_3,
2692 .send_len = sizeof(load_link_keys_invalid_param_3),
2693 .expect_status = MGMT_STATUS_INVALID_PARAMS,
2696 static const char load_ltks_valid_param_1[] = { 0x00, 0x00 };
2698 static const char load_ltks_valid_param_2[] = {
2699 0x01, 0x00, /* count */
2700 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2701 0x01, /* addr type */
2702 0x00, /* authenticated */
2704 0x00, /* encryption size */
2705 0x00, 0x00, /* diversifier */
2706 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2707 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2708 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2711 /* 20 keys at once */
2712 static const char load_ltks_valid_param_20[] = {
2713 0x14, 0x00, /* count */
2714 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2715 0x01, /* addr type */
2716 0x00, /* authenticated */
2718 0x00, /* encryption size */
2719 0x00, 0x00, /* diversifier */
2720 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2721 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2722 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2724 0x01, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2725 0x01, /* addr type */
2726 0x00, /* authenticated */
2728 0x00, /* encryption size */
2729 0x00, 0x00, /* diversifier */
2730 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2731 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2732 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2734 0x02, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2735 0x01, /* addr type */
2736 0x00, /* authenticated */
2738 0x00, /* encryption size */
2739 0x00, 0x00, /* diversifier */
2740 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2741 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2742 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2744 0x03, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2745 0x01, /* addr type */
2746 0x00, /* authenticated */
2748 0x00, /* encryption size */
2749 0x00, 0x00, /* diversifier */
2750 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2751 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2752 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2754 0x04, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2755 0x01, /* addr type */
2756 0x00, /* authenticated */
2758 0x00, /* encryption size */
2759 0x00, 0x00, /* diversifier */
2760 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2761 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2762 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2764 0x05, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2765 0x01, /* addr type */
2766 0x00, /* authenticated */
2768 0x00, /* encryption size */
2769 0x00, 0x00, /* diversifier */
2770 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2771 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2772 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2774 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2775 0x01, /* addr type */
2776 0x00, /* authenticated */
2778 0x00, /* encryption size */
2779 0x00, 0x00, /* diversifier */
2780 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2781 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2782 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2784 0x07, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2785 0x01, /* addr type */
2786 0x00, /* authenticated */
2788 0x00, /* encryption size */
2789 0x00, 0x00, /* diversifier */
2790 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2791 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2792 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2794 0x08, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2795 0x01, /* addr type */
2796 0x00, /* authenticated */
2798 0x00, /* encryption size */
2799 0x00, 0x00, /* diversifier */
2800 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2801 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2802 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2804 0x09, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2805 0x01, /* addr type */
2806 0x00, /* authenticated */
2808 0x00, /* encryption size */
2809 0x00, 0x00, /* diversifier */
2810 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2811 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2812 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2814 0x0a, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2815 0x01, /* addr type */
2816 0x00, /* authenticated */
2818 0x00, /* encryption size */
2819 0x00, 0x00, /* diversifier */
2820 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2821 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2822 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2824 0x0b, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2825 0x01, /* addr type */
2826 0x00, /* authenticated */
2828 0x00, /* encryption size */
2829 0x00, 0x00, /* diversifier */
2830 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2831 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2832 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2834 0x0c, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2835 0x01, /* addr type */
2836 0x00, /* authenticated */
2838 0x00, /* encryption size */
2839 0x00, 0x00, /* diversifier */
2840 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2841 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2842 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2844 0x0d, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2845 0x01, /* addr type */
2846 0x00, /* authenticated */
2848 0x00, /* encryption size */
2849 0x00, 0x00, /* diversifier */
2850 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2851 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2852 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2854 0x0e, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2855 0x01, /* addr type */
2856 0x00, /* authenticated */
2858 0x00, /* encryption size */
2859 0x00, 0x00, /* diversifier */
2860 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2861 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2862 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2864 0x0f, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2865 0x01, /* addr type */
2866 0x00, /* authenticated */
2868 0x00, /* encryption size */
2869 0x00, 0x00, /* diversifier */
2870 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2871 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2872 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2874 0x10, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2875 0x01, /* addr type */
2876 0x00, /* authenticated */
2878 0x00, /* encryption size */
2879 0x00, 0x00, /* diversifier */
2880 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2881 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2882 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2884 0x11, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2885 0x01, /* addr type */
2886 0x00, /* authenticated */
2888 0x00, /* encryption size */
2889 0x00, 0x00, /* diversifier */
2890 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2891 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2892 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2894 0x12, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2895 0x01, /* addr type */
2896 0x00, /* authenticated */
2898 0x00, /* encryption size */
2899 0x00, 0x00, /* diversifier */
2900 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2901 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2902 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2904 0x13, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2905 0x01, /* addr type */
2906 0x00, /* authenticated */
2908 0x00, /* encryption size */
2909 0x00, 0x00, /* diversifier */
2910 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2911 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2912 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2915 /* Invalid key count */
2916 static const char load_ltks_invalid_param_1[] = { 0x01, 0x00 };
2917 /* Invalid addr type */
2918 static const char load_ltks_invalid_param_2[] = {
2919 0x01, 0x00, /* count */
2920 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2921 0x00, /* addr type */
2922 0x00, /* authenticated */
2924 0x00, /* encryption size */
2925 0x00, 0x00, /* diversifier */
2926 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2927 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2928 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2930 /* Invalid central value */
2931 static const char load_ltks_invalid_param_3[] = {
2932 0x01, 0x00, /* count */
2933 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2934 0x01, /* addr type */
2935 0x00, /* authenticated */
2937 0x00, /* encryption size */
2938 0x00, 0x00, /* diversifier */
2939 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2940 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2941 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2944 static const struct generic_data load_ltks_success_test_1 = {
2945 .send_opcode = MGMT_OP_LOAD_LONG_TERM_KEYS,
2946 .send_param = load_ltks_valid_param_1,
2947 .send_len = sizeof(load_ltks_valid_param_1),
2948 .expect_status = MGMT_STATUS_SUCCESS,
2951 static const struct generic_data load_ltks_success_test_2 = {
2952 .send_opcode = MGMT_OP_LOAD_LONG_TERM_KEYS,
2953 .send_param = load_ltks_valid_param_2,
2954 .send_len = sizeof(load_ltks_valid_param_2),
2955 .expect_status = MGMT_STATUS_SUCCESS,
2958 static const struct generic_data load_ltks_success_test_3 = {
2959 .send_opcode = MGMT_OP_LOAD_LONG_TERM_KEYS,
2960 .send_param = load_ltks_valid_param_2,
2961 .send_len = sizeof(load_ltks_valid_param_2),
2962 .expect_status = MGMT_STATUS_SUCCESS,
2965 static const struct generic_data load_ltks_success_test_4 = {
2966 .send_opcode = MGMT_OP_LOAD_LONG_TERM_KEYS,
2967 .send_param = load_ltks_valid_param_20,
2968 .send_len = sizeof(load_ltks_valid_param_20),
2969 .expect_status = MGMT_STATUS_SUCCESS,
2972 static const struct generic_data load_ltks_success_test_5 = {
2973 .setup_settings = settings_powered_le,
2974 .send_opcode = MGMT_OP_LOAD_LONG_TERM_KEYS,
2975 .send_param = load_ltks_valid_param_20,
2976 .send_len = sizeof(load_ltks_valid_param_20),
2977 .expect_status = MGMT_STATUS_SUCCESS,
2980 static const struct generic_data load_ltks_invalid_params_test_1 = {
2981 .send_opcode = MGMT_OP_LOAD_LONG_TERM_KEYS,
2982 .send_param = load_ltks_invalid_param_1,
2983 .send_len = sizeof(load_ltks_invalid_param_1),
2984 .expect_status = MGMT_STATUS_INVALID_PARAMS,
2987 static const struct generic_data load_ltks_invalid_params_test_2 = {
2988 .send_opcode = MGMT_OP_LOAD_LONG_TERM_KEYS,
2989 .send_param = load_ltks_invalid_param_2,
2990 .send_len = sizeof(load_ltks_invalid_param_2),
2991 .expect_status = MGMT_STATUS_INVALID_PARAMS,
2994 static const struct generic_data load_ltks_invalid_params_test_3 = {
2995 .send_opcode = MGMT_OP_LOAD_LONG_TERM_KEYS,
2996 .send_param = load_ltks_invalid_param_3,
2997 .send_len = sizeof(load_ltks_invalid_param_3),
2998 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3001 static const char load_ltks_invalid_param_4[22] = { 0x1d, 0x07 };
3002 static const struct generic_data load_ltks_invalid_params_test_4 = {
3003 .send_opcode = MGMT_OP_LOAD_LONG_TERM_KEYS,
3004 .send_param = load_ltks_invalid_param_4,
3005 .send_len = sizeof(load_ltks_invalid_param_4),
3006 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3009 static const char set_io_cap_invalid_param_1[] = { 0xff };
3011 static const struct generic_data set_io_cap_invalid_param_test_1 = {
3012 .send_opcode = MGMT_OP_SET_IO_CAPABILITY,
3013 .send_param = set_io_cap_invalid_param_1,
3014 .send_len = sizeof(set_io_cap_invalid_param_1),
3015 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3018 static const char pair_device_param[] = {
3019 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00, 0x00 };
3020 static const char pair_device_rsp[] = {
3021 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00 };
3022 static const char pair_device_invalid_param_1[] = {
3023 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff, 0x00 };
3024 static const char pair_device_invalid_param_rsp_1[] = {
3025 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
3026 static const char pair_device_invalid_param_2[] = {
3027 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00, 0x05 };
3028 static const char pair_device_invalid_param_rsp_2[] = {
3029 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00 };
3031 static const struct generic_data pair_device_not_powered_test_1 = {
3032 .send_opcode = MGMT_OP_PAIR_DEVICE,
3033 .send_param = pair_device_param,
3034 .send_len = sizeof(pair_device_param),
3035 .expect_status = MGMT_STATUS_NOT_POWERED,
3036 .expect_param = pair_device_rsp,
3037 .expect_len = sizeof(pair_device_rsp),
3040 static const struct generic_data pair_device_invalid_param_test_1 = {
3041 .send_opcode = MGMT_OP_PAIR_DEVICE,
3042 .send_param = pair_device_invalid_param_1,
3043 .send_len = sizeof(pair_device_invalid_param_1),
3044 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3045 .expect_param = pair_device_invalid_param_rsp_1,
3046 .expect_len = sizeof(pair_device_invalid_param_rsp_1),
3049 static const struct generic_data pair_device_invalid_param_test_2 = {
3050 .send_opcode = MGMT_OP_PAIR_DEVICE,
3051 .send_param = pair_device_invalid_param_2,
3052 .send_len = sizeof(pair_device_invalid_param_2),
3053 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3054 .expect_param = pair_device_invalid_param_rsp_2,
3055 .expect_len = sizeof(pair_device_invalid_param_rsp_2),
3058 static const void *pair_device_send_param_func(uint16_t *len)
3060 struct test_data *data = tester_get_data();
3061 const struct generic_data *test = data->test_data;
3062 static uint8_t param[8];
3064 memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
3066 if (test->addr_type_avail)
3067 param[6] = test->addr_type;
3068 else if (data->hciemu_type == HCIEMU_TYPE_LE)
3069 param[6] = 0x01; /* Address type */
3071 param[6] = 0x00; /* Address type */
3072 param[7] = test->io_cap;
3074 *len = sizeof(param);
3079 static const void *pair_device_expect_param_func(uint16_t *len)
3081 struct test_data *data = tester_get_data();
3082 const struct generic_data *test = data->test_data;
3083 static uint8_t param[7];
3085 memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
3087 if (test->addr_type_avail)
3088 param[6] = test->addr_type;
3089 else if (data->hciemu_type == HCIEMU_TYPE_LE)
3090 param[6] = 0x01; /* Address type */
3092 param[6] = 0x00; /* Address type */
3094 *len = sizeof(param);
3099 static uint16_t settings_powered_bondable[] = { MGMT_OP_SET_BONDABLE,
3100 MGMT_OP_SET_POWERED, 0 };
3101 static uint8_t auth_req_param[] = { 0x2a, 0x00 };
3102 static uint8_t pair_device_pin[] = { 0x30, 0x30, 0x30, 0x30 }; /* "0000" */
3104 static const struct generic_data pair_device_success_test_1 = {
3105 .setup_settings = settings_powered_bondable,
3106 .send_opcode = MGMT_OP_PAIR_DEVICE,
3107 .send_func = pair_device_send_param_func,
3108 .expect_status = MGMT_STATUS_SUCCESS,
3109 .expect_func = pair_device_expect_param_func,
3110 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
3111 .expect_alt_ev_len = 26,
3112 .expect_hci_command = BT_HCI_CMD_AUTH_REQUESTED,
3113 .expect_hci_param = auth_req_param,
3114 .expect_hci_len = sizeof(auth_req_param),
3115 .pin = pair_device_pin,
3116 .pin_len = sizeof(pair_device_pin),
3117 .client_pin = pair_device_pin,
3118 .client_pin_len = sizeof(pair_device_pin),
3121 static uint16_t settings_powered_bondable_linksec[] = { MGMT_OP_SET_BONDABLE,
3122 MGMT_OP_SET_POWERED,
3123 MGMT_OP_SET_LINK_SECURITY,
3126 static const struct generic_data pair_device_success_test_2 = {
3127 .setup_settings = settings_powered_bondable_linksec,
3128 .send_opcode = MGMT_OP_PAIR_DEVICE,
3129 .send_func = pair_device_send_param_func,
3130 .expect_status = MGMT_STATUS_SUCCESS,
3131 .expect_func = pair_device_expect_param_func,
3132 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
3133 .expect_alt_ev_len = 26,
3134 .expect_hci_command = BT_HCI_CMD_AUTH_REQUESTED,
3135 .expect_hci_param = auth_req_param,
3136 .expect_hci_len = sizeof(auth_req_param),
3137 .pin = pair_device_pin,
3138 .pin_len = sizeof(pair_device_pin),
3139 .client_pin = pair_device_pin,
3140 .client_pin_len = sizeof(pair_device_pin),
3143 static const struct generic_data pair_device_legacy_nonbondable_1 = {
3144 .setup_settings = settings_powered,
3145 .send_opcode = MGMT_OP_PAIR_DEVICE,
3146 .send_func = pair_device_send_param_func,
3147 .expect_status = MGMT_STATUS_SUCCESS,
3148 .expect_func = pair_device_expect_param_func,
3149 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
3150 .expect_alt_ev_len = 26,
3151 .pin = pair_device_pin,
3152 .pin_len = sizeof(pair_device_pin),
3153 .client_pin = pair_device_pin,
3154 .client_pin_len = sizeof(pair_device_pin),
3157 static const struct generic_data pair_device_power_off_test_1 = {
3158 .setup_settings = settings_powered_bondable,
3159 .send_opcode = MGMT_OP_PAIR_DEVICE,
3160 .send_func = pair_device_send_param_func,
3161 .force_power_off = true,
3162 .expect_status = MGMT_STATUS_NOT_POWERED,
3163 .expect_func = pair_device_expect_param_func,
3166 static const void *client_bdaddr_param_func(uint8_t *len)
3168 struct test_data *data = tester_get_data();
3169 static uint8_t bdaddr[6];
3171 memcpy(bdaddr, hciemu_get_client_bdaddr(data->hciemu), 6);
3173 *len = sizeof(bdaddr);
3178 static const struct generic_data pair_device_not_supported_test_1 = {
3179 .setup_settings = settings_powered_bondable,
3180 .send_opcode = MGMT_OP_PAIR_DEVICE,
3181 .send_func = pair_device_send_param_func,
3182 .expect_status = MGMT_STATUS_NOT_SUPPORTED,
3183 .expect_func = pair_device_expect_param_func,
3184 .addr_type_avail = true,
3185 .addr_type = BDADDR_BREDR,
3188 static const struct generic_data pair_device_not_supported_test_2 = {
3189 .setup_settings = settings_powered_bondable,
3190 .send_opcode = MGMT_OP_PAIR_DEVICE,
3191 .send_func = pair_device_send_param_func,
3192 .expect_status = MGMT_STATUS_NOT_SUPPORTED,
3193 .expect_func = pair_device_expect_param_func,
3194 .addr_type_avail = true,
3195 .addr_type = BDADDR_LE_PUBLIC,
3198 static uint16_t settings_powered_bondable_le[] = { MGMT_OP_SET_LE,
3199 MGMT_OP_SET_BONDABLE,
3200 MGMT_OP_SET_POWERED,
3203 static const struct generic_data pair_device_reject_transport_not_enabled_1 = {
3204 .setup_settings = settings_powered_bondable_le,
3205 .setup_nobredr = true,
3206 .send_opcode = MGMT_OP_PAIR_DEVICE,
3207 .send_func = pair_device_send_param_func,
3208 .expect_status = MGMT_STATUS_REJECTED,
3209 .expect_func = pair_device_expect_param_func,
3210 .addr_type_avail = true,
3211 .addr_type = BDADDR_BREDR,
3214 static const struct generic_data pair_device_reject_transport_not_enabled_2 = {
3215 .setup_settings = settings_powered_bondable,
3216 .send_opcode = MGMT_OP_PAIR_DEVICE,
3217 .send_func = pair_device_send_param_func,
3218 .expect_status = MGMT_STATUS_REJECTED,
3219 .expect_func = pair_device_expect_param_func,
3220 .addr_type_avail = true,
3221 .addr_type = BDADDR_LE_PUBLIC,
3224 static const struct generic_data pair_device_reject_test_1 = {
3225 .setup_settings = settings_powered_bondable,
3226 .send_opcode = MGMT_OP_PAIR_DEVICE,
3227 .send_func = pair_device_send_param_func,
3228 .expect_status = MGMT_STATUS_AUTH_FAILED,
3229 .expect_func = pair_device_expect_param_func,
3230 .expect_alt_ev = MGMT_EV_AUTH_FAILED,
3231 .expect_alt_ev_len = 8,
3232 .expect_hci_command = BT_HCI_CMD_PIN_CODE_REQUEST_NEG_REPLY,
3233 .expect_hci_func = client_bdaddr_param_func,
3235 .client_pin = pair_device_pin,
3236 .client_pin_len = sizeof(pair_device_pin),
3239 static const struct generic_data pair_device_reject_test_2 = {
3240 .setup_settings = settings_powered_bondable,
3241 .send_opcode = MGMT_OP_PAIR_DEVICE,
3242 .send_func = pair_device_send_param_func,
3243 .expect_status = MGMT_STATUS_AUTH_FAILED,
3244 .expect_func = pair_device_expect_param_func,
3245 .expect_alt_ev = MGMT_EV_AUTH_FAILED,
3246 .expect_alt_ev_len = 8,
3247 .expect_hci_command = BT_HCI_CMD_AUTH_REQUESTED,
3248 .expect_hci_param = auth_req_param,
3249 .expect_hci_len = sizeof(auth_req_param),
3250 .pin = pair_device_pin,
3251 .pin_len = sizeof(pair_device_pin),
3254 static const struct generic_data pair_device_reject_test_3 = {
3255 .setup_settings = settings_powered_bondable_linksec,
3256 .send_opcode = MGMT_OP_PAIR_DEVICE,
3257 .send_func = pair_device_send_param_func,
3258 .expect_status = MGMT_STATUS_AUTH_FAILED,
3259 .expect_func = pair_device_expect_param_func,
3260 .expect_hci_command = BT_HCI_CMD_PIN_CODE_REQUEST_NEG_REPLY,
3261 .expect_hci_func = client_bdaddr_param_func,
3263 .client_pin = pair_device_pin,
3264 .client_pin_len = sizeof(pair_device_pin),
3267 static const struct generic_data pair_device_reject_test_4 = {
3268 .setup_settings = settings_powered_bondable_linksec,
3269 .send_opcode = MGMT_OP_PAIR_DEVICE,
3270 .send_func = pair_device_send_param_func,
3271 .expect_status = MGMT_STATUS_AUTH_FAILED,
3272 .expect_func = pair_device_expect_param_func,
3273 .pin = pair_device_pin,
3274 .pin_len = sizeof(pair_device_pin),
3277 static uint16_t settings_powered_bondable_ssp[] = { MGMT_OP_SET_BONDABLE,
3279 MGMT_OP_SET_POWERED,
3282 static const struct generic_data pair_device_ssp_test_1 = {
3283 .setup_settings = settings_powered_bondable_ssp,
3284 .client_enable_ssp = true,
3285 .send_opcode = MGMT_OP_PAIR_DEVICE,
3286 .send_func = pair_device_send_param_func,
3287 .expect_status = MGMT_STATUS_SUCCESS,
3288 .expect_func = pair_device_expect_param_func,
3289 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
3290 .expect_alt_ev_len = 26,
3291 .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
3292 .expect_hci_func = client_bdaddr_param_func,
3293 .io_cap = 0x03, /* NoInputNoOutput */
3294 .client_io_cap = 0x03, /* NoInputNoOutput */
3297 static const void *client_io_cap_param_func(uint8_t *len)
3299 struct test_data *data = tester_get_data();
3300 const struct generic_data *test = data->test_data;
3301 static uint8_t param[9];
3303 memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
3304 memcpy(¶m[6], test->expect_hci_param, 3);
3306 *len = sizeof(param);
3311 const uint8_t no_bonding_io_cap[] = { 0x03, 0x00, 0x00 };
3312 static const struct generic_data pair_device_ssp_test_2 = {
3313 .setup_settings = settings_powered_ssp,
3314 .client_enable_ssp = true,
3315 .send_opcode = MGMT_OP_PAIR_DEVICE,
3316 .send_func = pair_device_send_param_func,
3317 .expect_status = MGMT_STATUS_SUCCESS,
3318 .expect_func = pair_device_expect_param_func,
3319 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
3320 .expect_alt_ev_len = 26,
3321 .expect_hci_command = BT_HCI_CMD_IO_CAPABILITY_REQUEST_REPLY,
3322 .expect_hci_func = client_io_cap_param_func,
3323 .expect_hci_param = no_bonding_io_cap,
3324 .expect_hci_len = sizeof(no_bonding_io_cap),
3325 .io_cap = 0x03, /* NoInputNoOutput */
3326 .client_io_cap = 0x03, /* NoInputNoOutput */
3329 const uint8_t bonding_io_cap[] = { 0x03, 0x00, 0x02 };
3330 static const struct generic_data pair_device_ssp_test_3 = {
3331 .setup_settings = settings_powered_bondable_ssp,
3332 .client_enable_ssp = true,
3333 .send_opcode = MGMT_OP_PAIR_DEVICE,
3334 .send_func = pair_device_send_param_func,
3335 .expect_status = MGMT_STATUS_SUCCESS,
3336 .expect_func = pair_device_expect_param_func,
3337 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
3338 .expect_alt_ev_len = 26,
3339 .expect_hci_command = BT_HCI_CMD_IO_CAPABILITY_REQUEST_REPLY,
3340 .expect_hci_func = client_io_cap_param_func,
3341 .expect_hci_param = bonding_io_cap,
3342 .expect_hci_len = sizeof(bonding_io_cap),
3343 .io_cap = 0x03, /* NoInputNoOutput */
3344 .client_io_cap = 0x03, /* NoInputNoOutput */
3347 static const struct generic_data pair_device_ssp_test_4 = {
3348 .setup_settings = settings_powered_bondable_ssp,
3349 .client_enable_ssp = true,
3350 .send_opcode = MGMT_OP_PAIR_DEVICE,
3351 .send_func = pair_device_send_param_func,
3352 .expect_status = MGMT_STATUS_SUCCESS,
3353 .expect_func = pair_device_expect_param_func,
3354 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
3355 .expect_alt_ev_len = 26,
3356 .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
3357 .expect_hci_func = client_bdaddr_param_func,
3358 .io_cap = 0x01, /* DisplayYesNo */
3359 .client_io_cap = 0x01, /* DisplayYesNo */
3362 const uint8_t mitm_no_bonding_io_cap[] = { 0x01, 0x00, 0x01 };
3363 static const struct generic_data pair_device_ssp_test_5 = {
3364 .setup_settings = settings_powered_ssp,
3365 .client_enable_ssp = true,
3366 .send_opcode = MGMT_OP_PAIR_DEVICE,
3367 .send_func = pair_device_send_param_func,
3368 .expect_status = MGMT_STATUS_SUCCESS,
3369 .expect_func = pair_device_expect_param_func,
3370 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
3371 .expect_alt_ev_len = 26,
3372 .expect_hci_command = BT_HCI_CMD_IO_CAPABILITY_REQUEST_REPLY,
3373 .expect_hci_func = client_io_cap_param_func,
3374 .expect_hci_param = mitm_no_bonding_io_cap,
3375 .expect_hci_len = sizeof(mitm_no_bonding_io_cap),
3376 .io_cap = 0x01, /* DisplayYesNo */
3377 .client_io_cap = 0x01, /* DisplayYesNo */
3380 const uint8_t mitm_bonding_io_cap[] = { 0x01, 0x00, 0x03 };
3381 static const struct generic_data pair_device_ssp_test_6 = {
3382 .setup_settings = settings_powered_bondable_ssp,
3383 .client_enable_ssp = true,
3384 .send_opcode = MGMT_OP_PAIR_DEVICE,
3385 .send_func = pair_device_send_param_func,
3386 .expect_status = MGMT_STATUS_SUCCESS,
3387 .expect_func = pair_device_expect_param_func,
3388 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
3389 .expect_alt_ev_len = 26,
3390 .expect_hci_command = BT_HCI_CMD_IO_CAPABILITY_REQUEST_REPLY,
3391 .expect_hci_func = client_io_cap_param_func,
3392 .expect_hci_param = mitm_bonding_io_cap,
3393 .expect_hci_len = sizeof(mitm_bonding_io_cap),
3394 .io_cap = 0x01, /* DisplayYesNo */
3395 .client_io_cap = 0x01, /* DisplayYesNo */
3398 static const struct generic_data pair_device_ssp_reject_1 = {
3399 .setup_settings = settings_powered_bondable_ssp,
3400 .client_enable_ssp = true,
3401 .send_opcode = MGMT_OP_PAIR_DEVICE,
3402 .send_func = pair_device_send_param_func,
3403 .expect_status = MGMT_STATUS_AUTH_FAILED,
3404 .expect_func = pair_device_expect_param_func,
3405 .expect_alt_ev = MGMT_EV_AUTH_FAILED,
3406 .expect_alt_ev_len = 8,
3407 .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_NEG_REPLY,
3408 .expect_hci_func = client_bdaddr_param_func,
3409 .io_cap = 0x01, /* DisplayYesNo */
3410 .client_io_cap = 0x01, /* DisplayYesNo */
3411 .client_auth_req = 0x01, /* No Bonding - MITM */
3412 .reject_confirm = true,
3415 static const struct generic_data pair_device_ssp_reject_2 = {
3416 .setup_settings = settings_powered_bondable_ssp,
3417 .client_enable_ssp = true,
3418 .send_opcode = MGMT_OP_PAIR_DEVICE,
3419 .send_func = pair_device_send_param_func,
3420 .expect_status = MGMT_STATUS_AUTH_FAILED,
3421 .expect_func = pair_device_expect_param_func,
3422 .expect_alt_ev = MGMT_EV_AUTH_FAILED,
3423 .expect_alt_ev_len = 8,
3424 .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
3425 .expect_hci_func = client_bdaddr_param_func,
3426 .io_cap = 0x01, /* DisplayYesNo */
3427 .client_io_cap = 0x01, /* DisplayYesNo */
3428 .client_reject_confirm = true,
3431 static const struct generic_data pair_device_ssp_nonbondable_1 = {
3432 .setup_settings = settings_powered_ssp,
3433 .client_enable_ssp = true,
3434 .send_opcode = MGMT_OP_PAIR_DEVICE,
3435 .send_func = pair_device_send_param_func,
3436 .expect_status = MGMT_STATUS_SUCCESS,
3437 .expect_func = pair_device_expect_param_func,
3438 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
3439 .expect_alt_ev_len = 26,
3440 .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
3441 .expect_hci_func = client_bdaddr_param_func,
3442 .io_cap = 0x01, /* DisplayYesNo */
3443 .client_io_cap = 0x01, /* DisplayYesNo */
3446 static const struct generic_data pair_device_le_success_test_1 = {
3447 .setup_settings = settings_powered_bondable,
3448 .send_opcode = MGMT_OP_PAIR_DEVICE,
3449 .send_func = pair_device_send_param_func,
3451 .expect_status = MGMT_STATUS_SUCCESS,
3452 .expect_func = pair_device_expect_param_func,
3453 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
3454 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
3457 static bool ltk_is_authenticated(const struct mgmt_ltk_info *ltk)
3459 switch (ltk->type) {
3468 static bool ltk_is_sc(const struct mgmt_ltk_info *ltk)
3470 switch (ltk->type) {
3480 static bool verify_ltk(const void *param, uint16_t length)
3482 struct test_data *data = tester_get_data();
3483 const struct generic_data *test = data->test_data;
3484 const struct mgmt_ev_new_long_term_key *ev = param;
3486 if (length != sizeof(struct mgmt_ev_new_long_term_key)) {
3487 tester_warn("Invalid new ltk length %u != %zu", length,
3488 sizeof(struct mgmt_ev_new_long_term_key));
3492 if (test->just_works && ltk_is_authenticated(&ev->key)) {
3493 tester_warn("Authenticated key for just-works");
3497 if (!test->just_works && !ltk_is_authenticated(&ev->key)) {
3498 tester_warn("Unauthenticated key for MITM");
3502 if (test->expect_sc_key && !ltk_is_sc(&ev->key)) {
3503 tester_warn("Non-LE SC key for SC pairing");
3507 if (!test->expect_sc_key && ltk_is_sc(&ev->key)) {
3508 tester_warn("SC key for Non-SC pairing");
3515 static const struct generic_data pair_device_le_success_test_2 = {
3516 .setup_settings = settings_powered_bondable,
3517 .io_cap = 0x02, /* KeyboardOnly */
3518 .client_io_cap = 0x04, /* KeyboardDisplay */
3519 .send_opcode = MGMT_OP_PAIR_DEVICE,
3520 .send_func = pair_device_send_param_func,
3521 .expect_status = MGMT_STATUS_SUCCESS,
3522 .expect_func = pair_device_expect_param_func,
3523 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
3524 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
3525 .verify_alt_ev_func = verify_ltk,
3528 static uint16_t settings_powered_sc_bondable_le_ssp[] = {
3529 MGMT_OP_SET_BONDABLE,
3532 MGMT_OP_SET_SECURE_CONN,
3533 MGMT_OP_SET_POWERED,
3536 static const struct generic_data pair_device_smp_bredr_test_1 = {
3537 .setup_settings = settings_powered_sc_bondable_le_ssp,
3538 .client_enable_ssp = true,
3539 .client_enable_le = true,
3540 .client_enable_sc = true,
3541 .expect_sc_key = true,
3543 .send_opcode = MGMT_OP_PAIR_DEVICE,
3544 .send_func = pair_device_send_param_func,
3545 .expect_status = MGMT_STATUS_SUCCESS,
3546 .expect_func = pair_device_expect_param_func,
3547 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
3548 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
3549 .verify_alt_ev_func = verify_ltk,
3550 .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
3551 .expect_hci_func = client_bdaddr_param_func,
3552 .io_cap = 0x03, /* NoInputNoOutput */
3553 .client_io_cap = 0x03, /* NoInputNoOutput */
3556 static const struct generic_data pair_device_smp_bredr_test_2 = {
3557 .setup_settings = settings_powered_sc_bondable_le_ssp,
3558 .client_enable_ssp = true,
3559 .client_enable_le = true,
3560 .client_enable_sc = true,
3561 .expect_sc_key = true,
3562 .send_opcode = MGMT_OP_PAIR_DEVICE,
3563 .send_func = pair_device_send_param_func,
3564 .expect_status = MGMT_STATUS_SUCCESS,
3565 .expect_func = pair_device_expect_param_func,
3566 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
3567 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
3568 .verify_alt_ev_func = verify_ltk,
3569 .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
3570 .expect_hci_func = client_bdaddr_param_func,
3571 .io_cap = 0x01, /* DisplayYesNo */
3572 .client_io_cap = 0x01, /* DisplayYesNo */
3575 static const struct generic_data pair_device_le_reject_test_1 = {
3576 .setup_settings = settings_powered_bondable,
3577 .io_cap = 0x02, /* KeyboardOnly */
3578 .client_io_cap = 0x04, /* KeyboardDisplay */
3579 .send_opcode = MGMT_OP_PAIR_DEVICE,
3580 .send_func = pair_device_send_param_func,
3581 .expect_status = MGMT_STATUS_AUTH_FAILED,
3582 .expect_func = pair_device_expect_param_func,
3583 .expect_alt_ev = MGMT_EV_AUTH_FAILED,
3584 .expect_alt_ev_len = sizeof(struct mgmt_ev_auth_failed),
3585 .reject_confirm = true,
3588 static uint16_t settings_powered_sc_bondable[] = { MGMT_OP_SET_BONDABLE,
3589 MGMT_OP_SET_SECURE_CONN,
3590 MGMT_OP_SET_POWERED, 0 };
3592 static const struct generic_data pair_device_le_sc_legacy_test_1 = {
3593 .setup_settings = settings_powered_sc_bondable,
3594 .send_opcode = MGMT_OP_PAIR_DEVICE,
3595 .send_func = pair_device_send_param_func,
3597 .expect_status = MGMT_STATUS_SUCCESS,
3598 .expect_func = pair_device_expect_param_func,
3599 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
3600 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
3601 .verify_alt_ev_func = verify_ltk,
3604 static const struct generic_data pair_device_le_sc_success_test_1 = {
3605 .setup_settings = settings_powered_sc_bondable,
3606 .send_opcode = MGMT_OP_PAIR_DEVICE,
3607 .send_func = pair_device_send_param_func,
3609 .client_enable_sc = true,
3610 .expect_sc_key = true,
3611 .expect_status = MGMT_STATUS_SUCCESS,
3612 .expect_func = pair_device_expect_param_func,
3613 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
3614 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
3615 .verify_alt_ev_func = verify_ltk,
3618 static const struct generic_data pair_device_le_sc_success_test_2 = {
3619 .setup_settings = settings_powered_sc_bondable,
3620 .send_opcode = MGMT_OP_PAIR_DEVICE,
3621 .send_func = pair_device_send_param_func,
3622 .client_enable_sc = true,
3623 .expect_sc_key = true,
3624 .io_cap = 0x02, /* KeyboardOnly */
3625 .client_io_cap = 0x02, /* KeyboardOnly */
3626 .expect_status = MGMT_STATUS_SUCCESS,
3627 .expect_func = pair_device_expect_param_func,
3628 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
3629 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
3630 .verify_alt_ev_func = verify_ltk,
3633 static bool lk_is_authenticated(const struct mgmt_link_key_info *lk)
3636 case 0x00: /* Combination Key */
3637 case 0x01: /* Local Unit Key */
3638 case 0x02: /* Remote Unit Key */
3639 case 0x03: /* Debug Combination Key */
3640 if (lk->pin_len == 16)
3643 case 0x05: /* Authenticated Combination Key generated from P-192 */
3644 case 0x08: /* Authenticated Combination Key generated from P-256 */
3651 static bool lk_is_sc(const struct mgmt_link_key_info *lk)
3654 case 0x07: /* Unauthenticated Combination Key generated from P-256 */
3655 case 0x08: /* Authenticated Combination Key generated from P-256 */
3662 static bool verify_link_key(const void *param, uint16_t length)
3664 struct test_data *data = tester_get_data();
3665 const struct generic_data *test = data->test_data;
3666 const struct mgmt_ev_new_link_key *ev = param;
3668 if (length != sizeof(struct mgmt_ev_new_link_key)) {
3669 tester_warn("Invalid new Link Key length %u != %zu", length,
3670 sizeof(struct mgmt_ev_new_link_key));
3674 if (test->just_works && lk_is_authenticated(&ev->key)) {
3675 tester_warn("Authenticated key for just-works");
3679 if (!test->just_works && !lk_is_authenticated(&ev->key)) {
3680 tester_warn("Unauthenticated key for MITM");
3684 if (test->expect_sc_key && !lk_is_sc(&ev->key)) {
3685 tester_warn("Non-LE SC key for SC pairing");
3689 if (!test->expect_sc_key && lk_is_sc(&ev->key)) {
3690 tester_warn("SC key for Non-SC pairing");
3697 static uint16_t settings_powered_le_sc_bondable[] = {
3700 MGMT_OP_SET_BONDABLE,
3701 MGMT_OP_SET_SECURE_CONN,
3702 MGMT_OP_SET_POWERED, 0 };
3704 static const struct generic_data pair_device_le_sc_success_test_3 = {
3705 .setup_settings = settings_powered_le_sc_bondable,
3706 .send_opcode = MGMT_OP_PAIR_DEVICE,
3707 .send_func = pair_device_send_param_func,
3708 .addr_type_avail = true,
3710 .client_enable_sc = true,
3711 .client_enable_ssp = true,
3712 .client_enable_adv = true,
3713 .expect_sc_key = true,
3714 .io_cap = 0x02, /* KeyboardOnly */
3715 .client_io_cap = 0x02, /* KeyboardOnly */
3716 .expect_status = MGMT_STATUS_SUCCESS,
3717 .expect_func = pair_device_expect_param_func,
3718 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
3719 .expect_alt_ev_len = 26,
3720 .verify_alt_ev_func = verify_link_key,
3723 static uint16_t settings_powered_connectable_bondable[] = {
3724 MGMT_OP_SET_BONDABLE,
3725 MGMT_OP_SET_CONNECTABLE,
3726 MGMT_OP_SET_POWERED, 0 };
3728 static const struct generic_data pairing_acceptor_legacy_1 = {
3729 .setup_settings = settings_powered_connectable_bondable,
3730 .pin = pair_device_pin,
3731 .pin_len = sizeof(pair_device_pin),
3732 .client_pin = pair_device_pin,
3733 .client_pin_len = sizeof(pair_device_pin),
3734 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
3735 .expect_alt_ev_len = 26,
3738 static const struct generic_data pairing_acceptor_legacy_2 = {
3739 .setup_settings = settings_powered_connectable_bondable,
3741 .client_pin = pair_device_pin,
3742 .client_pin_len = sizeof(pair_device_pin),
3743 .expect_alt_ev = MGMT_EV_AUTH_FAILED,
3744 .expect_alt_ev_len = 8,
3747 static const struct generic_data pairing_acceptor_legacy_3 = {
3748 .setup_settings = settings_powered_connectable,
3749 .client_pin = pair_device_pin,
3750 .client_pin_len = sizeof(pair_device_pin),
3751 .expect_alt_ev = MGMT_EV_AUTH_FAILED,
3752 .expect_alt_ev_len = 8,
3753 .expect_hci_command = BT_HCI_CMD_PIN_CODE_REQUEST_NEG_REPLY,
3754 .expect_hci_func = client_bdaddr_param_func,
3757 static uint16_t settings_powered_connectable_bondable_linksec[] = {
3758 MGMT_OP_SET_BONDABLE,
3759 MGMT_OP_SET_CONNECTABLE,
3760 MGMT_OP_SET_LINK_SECURITY,
3761 MGMT_OP_SET_POWERED, 0 };
3763 static const struct generic_data pairing_acceptor_linksec_1 = {
3764 .setup_settings = settings_powered_connectable_bondable_linksec,
3765 .pin = pair_device_pin,
3766 .pin_len = sizeof(pair_device_pin),
3767 .client_pin = pair_device_pin,
3768 .client_pin_len = sizeof(pair_device_pin),
3769 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
3770 .expect_alt_ev_len = 26,
3773 static const struct generic_data pairing_acceptor_linksec_2 = {
3774 .setup_settings = settings_powered_connectable_bondable_linksec,
3776 .client_pin = pair_device_pin,
3777 .client_pin_len = sizeof(pair_device_pin),
3778 .expect_alt_ev = MGMT_EV_CONNECT_FAILED,
3779 .expect_alt_ev_len = 8,
3782 static uint16_t settings_powered_connectable_bondable_ssp[] = {
3783 MGMT_OP_SET_BONDABLE,
3784 MGMT_OP_SET_CONNECTABLE,
3786 MGMT_OP_SET_POWERED, 0 };
3788 static const struct generic_data pairing_acceptor_ssp_1 = {
3789 .setup_settings = settings_powered_connectable_bondable_ssp,
3790 .client_enable_ssp = true,
3791 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
3792 .expect_alt_ev_len = 26,
3793 .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
3794 .expect_hci_func = client_bdaddr_param_func,
3795 .io_cap = 0x03, /* NoInputNoOutput */
3796 .client_io_cap = 0x03, /* NoInputNoOutput */
3800 static const struct generic_data pairing_acceptor_ssp_2 = {
3801 .setup_settings = settings_powered_connectable_bondable_ssp,
3802 .client_enable_ssp = true,
3803 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
3804 .expect_alt_ev_len = 26,
3805 .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
3806 .expect_hci_func = client_bdaddr_param_func,
3807 .io_cap = 0x01, /* DisplayYesNo */
3808 .client_io_cap = 0x01, /* DisplayYesNo */
3811 static const struct generic_data pairing_acceptor_ssp_3 = {
3812 .setup_settings = settings_powered_connectable_bondable_ssp,
3813 .client_enable_ssp = true,
3814 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
3815 .expect_alt_ev_len = 26,
3816 .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
3817 .expect_hci_func = client_bdaddr_param_func,
3818 .io_cap = 0x01, /* DisplayYesNo */
3819 .client_io_cap = 0x01, /* DisplayYesNo */
3823 static const void *client_io_cap_reject_param_func(uint8_t *len)
3825 struct test_data *data = tester_get_data();
3826 static uint8_t param[7];
3828 memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
3829 param[6] = 0x18; /* Pairing Not Allowed */
3831 *len = sizeof(param);
3836 static uint16_t settings_powered_connectable_ssp[] = {
3837 MGMT_OP_SET_CONNECTABLE,
3839 MGMT_OP_SET_POWERED, 0 };
3841 static const struct generic_data pairing_acceptor_ssp_4 = {
3842 .setup_settings = settings_powered_connectable_ssp,
3843 .client_enable_ssp = true,
3844 .expect_alt_ev = MGMT_EV_AUTH_FAILED,
3845 .expect_alt_ev_len = 8,
3846 .expect_hci_command = BT_HCI_CMD_IO_CAPABILITY_REQUEST_NEG_REPLY,
3847 .expect_hci_func = client_io_cap_reject_param_func,
3848 .io_cap = 0x01, /* DisplayYesNo */
3849 .client_io_cap = 0x01, /* DisplayYesNo */
3850 .client_auth_req = 0x02, /* Dedicated Bonding - No MITM */
3853 static uint16_t settings_powered_sc_bondable_connectable_le_ssp[] = {
3854 MGMT_OP_SET_BONDABLE,
3855 MGMT_OP_SET_CONNECTABLE,
3858 MGMT_OP_SET_SECURE_CONN,
3859 MGMT_OP_SET_POWERED,
3862 static const struct generic_data pairing_acceptor_smp_bredr_1 = {
3863 .setup_settings = settings_powered_sc_bondable_connectable_le_ssp,
3864 .client_enable_ssp = true,
3865 .client_enable_le = true,
3866 .client_enable_sc = true,
3867 .expect_sc_key = true,
3868 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
3869 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
3870 .verify_alt_ev_func = verify_ltk,
3872 .io_cap = 0x03, /* NoInputNoOutput */
3873 .client_io_cap = 0x03, /* No InputNoOutput */
3874 .client_auth_req = 0x00, /* No Bonding - No MITM */
3877 static const struct generic_data pairing_acceptor_smp_bredr_2 = {
3878 .setup_settings = settings_powered_sc_bondable_connectable_le_ssp,
3879 .client_enable_ssp = true,
3880 .client_enable_le = true,
3881 .client_enable_sc = true,
3882 .expect_sc_key = true,
3883 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
3884 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
3885 .verify_alt_ev_func = verify_ltk,
3886 .io_cap = 0x01, /* DisplayYesNo */
3887 .client_io_cap = 0x01, /* DisplayYesNo */
3888 .client_auth_req = 0x02, /* Dedicated Bonding - No MITM */
3891 static uint16_t settings_powered_bondable_connectable_advertising[] = {
3892 MGMT_OP_SET_BONDABLE,
3893 MGMT_OP_SET_CONNECTABLE,
3894 MGMT_OP_SET_ADVERTISING,
3895 MGMT_OP_SET_POWERED, 0 };
3897 static const struct generic_data pairing_acceptor_le_1 = {
3898 .setup_settings = settings_powered_bondable_connectable_advertising,
3899 .io_cap = 0x03, /* NoInputNoOutput */
3900 .client_io_cap = 0x03, /* NoInputNoOutput */
3902 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
3903 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
3904 .verify_alt_ev_func = verify_ltk,
3907 static const struct generic_data pairing_acceptor_le_2 = {
3908 .setup_settings = settings_powered_bondable_connectable_advertising,
3909 .io_cap = 0x04, /* KeyboardDisplay */
3910 .client_io_cap = 0x04, /* KeyboardDisplay */
3911 .client_auth_req = 0x05, /* Bonding - MITM */
3912 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
3913 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
3914 .verify_alt_ev_func = verify_ltk,
3917 static const struct generic_data pairing_acceptor_le_3 = {
3918 .setup_settings = settings_powered_bondable_connectable_advertising,
3919 .io_cap = 0x04, /* KeyboardDisplay */
3920 .client_io_cap = 0x04, /* KeyboardDisplay */
3921 .expect_alt_ev = MGMT_EV_AUTH_FAILED,
3922 .expect_alt_ev_len = sizeof(struct mgmt_ev_auth_failed),
3923 .reject_confirm = true,
3926 static const struct generic_data pairing_acceptor_le_4 = {
3927 .setup_settings = settings_powered_bondable_connectable_advertising,
3928 .io_cap = 0x02, /* KeyboardOnly */
3929 .client_io_cap = 0x04, /* KeyboardDisplay */
3930 .client_auth_req = 0x05, /* Bonding - MITM */
3931 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
3932 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
3933 .verify_alt_ev_func = verify_ltk,
3936 static const struct generic_data pairing_acceptor_le_5 = {
3937 .setup_settings = settings_powered_bondable_connectable_advertising,
3938 .io_cap = 0x02, /* KeyboardOnly */
3939 .client_io_cap = 0x04, /* KeyboardDisplay */
3940 .client_auth_req = 0x05, /* Bonding - MITM */
3941 .reject_confirm = true,
3942 .expect_alt_ev = MGMT_EV_AUTH_FAILED,
3943 .expect_alt_ev_len = sizeof(struct mgmt_ev_auth_failed),
3946 static const char unpair_device_param[] = {
3947 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00, 0x00 };
3948 static const char unpair_device_rsp[] = {
3949 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00 };
3950 static const char unpair_device_invalid_param_1[] = {
3951 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff, 0x00 };
3952 static const char unpair_device_invalid_param_rsp_1[] = {
3953 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
3954 static const char unpair_device_invalid_param_2[] = {
3955 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00, 0x02 };
3956 static const char unpair_device_invalid_param_rsp_2[] = {
3957 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00 };
3959 static const struct generic_data unpair_device_not_powered_test_1 = {
3960 .send_opcode = MGMT_OP_UNPAIR_DEVICE,
3961 .send_param = unpair_device_param,
3962 .send_len = sizeof(unpair_device_param),
3963 .expect_status = MGMT_STATUS_NOT_POWERED,
3964 .expect_param = unpair_device_rsp,
3965 .expect_len = sizeof(unpair_device_rsp),
3968 static const struct generic_data unpair_device_invalid_param_test_1 = {
3969 .send_opcode = MGMT_OP_UNPAIR_DEVICE,
3970 .send_param = unpair_device_invalid_param_1,
3971 .send_len = sizeof(unpair_device_invalid_param_1),
3972 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3973 .expect_param = unpair_device_invalid_param_rsp_1,
3974 .expect_len = sizeof(unpair_device_invalid_param_rsp_1),
3977 static const struct generic_data unpair_device_invalid_param_test_2 = {
3978 .send_opcode = MGMT_OP_UNPAIR_DEVICE,
3979 .send_param = unpair_device_invalid_param_2,
3980 .send_len = sizeof(unpair_device_invalid_param_2),
3981 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3982 .expect_param = unpair_device_invalid_param_rsp_2,
3983 .expect_len = sizeof(unpair_device_invalid_param_rsp_2),
3986 static const char disconnect_invalid_param_1[] = {
3987 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
3988 static const char disconnect_invalid_param_rsp_1[] = {
3989 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
3991 static const struct generic_data disconnect_invalid_param_test_1 = {
3992 .send_opcode = MGMT_OP_DISCONNECT,
3993 .send_param = disconnect_invalid_param_1,
3994 .send_len = sizeof(disconnect_invalid_param_1),
3995 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3996 .expect_param = disconnect_invalid_param_rsp_1,
3997 .expect_len = sizeof(disconnect_invalid_param_rsp_1),
4000 static const char block_device_invalid_param_1[] = {
4001 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
4002 static const char block_device_invalid_param_rsp_1[] = {
4003 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
4005 static const struct generic_data block_device_invalid_param_test_1 = {
4006 .send_opcode = MGMT_OP_BLOCK_DEVICE,
4007 .send_param = block_device_invalid_param_1,
4008 .send_len = sizeof(block_device_invalid_param_1),
4009 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4010 .expect_param = block_device_invalid_param_rsp_1,
4011 .expect_len = sizeof(block_device_invalid_param_rsp_1),
4014 static const char unblock_device_invalid_param_1[] = {
4015 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
4016 static const char unblock_device_invalid_param_rsp_1[] = {
4017 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
4019 static const struct generic_data unblock_device_invalid_param_test_1 = {
4020 .send_opcode = MGMT_OP_UNBLOCK_DEVICE,
4021 .send_param = unblock_device_invalid_param_1,
4022 .send_len = sizeof(unblock_device_invalid_param_1),
4023 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4024 .expect_param = unblock_device_invalid_param_rsp_1,
4025 .expect_len = sizeof(unblock_device_invalid_param_rsp_1),
4028 static const char set_static_addr_valid_param[] = {
4029 0x11, 0x22, 0x33, 0x44, 0x55, 0xc0 };
4030 static const char set_static_addr_settings[] = { 0x00, 0x82, 0x00, 0x00 };
4032 static const struct generic_data set_static_addr_success_test = {
4033 .send_opcode = MGMT_OP_SET_STATIC_ADDRESS,
4034 .send_param = set_static_addr_valid_param,
4035 .send_len = sizeof(set_static_addr_valid_param),
4036 .expect_status = MGMT_STATUS_SUCCESS,
4037 .expect_param = set_static_addr_settings,
4038 .expect_len = sizeof(set_static_addr_settings),
4039 .expect_settings_set = MGMT_SETTING_STATIC_ADDRESS,
4042 static const char set_static_addr_settings_dual[] = { 0x80, 0x00, 0x00, 0x00 };
4044 static const struct generic_data set_static_addr_success_test_2 = {
4045 .send_opcode = MGMT_OP_SET_STATIC_ADDRESS,
4046 .send_param = set_static_addr_valid_param,
4047 .send_len = sizeof(set_static_addr_valid_param),
4048 .expect_status = MGMT_STATUS_SUCCESS,
4049 .expect_param = set_static_addr_settings_dual,
4050 .expect_len = sizeof(set_static_addr_settings_dual),
4053 static const struct generic_data set_static_addr_failure_test = {
4054 .setup_settings = settings_powered,
4055 .send_opcode = MGMT_OP_SET_STATIC_ADDRESS,
4056 .send_param = set_static_addr_valid_param,
4057 .send_len = sizeof(set_static_addr_valid_param),
4058 .expect_status = MGMT_STATUS_REJECTED,
4061 static const struct generic_data set_static_addr_failure_test_2 = {
4062 .setup_settings = settings_powered,
4063 .send_opcode = MGMT_OP_SET_STATIC_ADDRESS,
4064 .send_param = set_static_addr_valid_param,
4065 .send_len = sizeof(set_static_addr_valid_param),
4066 .expect_status = MGMT_STATUS_NOT_SUPPORTED,
4069 static const char set_scan_params_valid_param[] = { 0x60, 0x00, 0x30, 0x00 };
4071 static const struct generic_data set_scan_params_success_test = {
4072 .send_opcode = MGMT_OP_SET_SCAN_PARAMS,
4073 .send_param = set_scan_params_valid_param,
4074 .send_len = sizeof(set_scan_params_valid_param),
4075 .expect_status = MGMT_STATUS_SUCCESS,
4078 static const char load_irks_empty_list[] = { 0x00, 0x00 };
4080 static const struct generic_data load_irks_success1_test = {
4081 .send_opcode = MGMT_OP_LOAD_IRKS,
4082 .send_param = load_irks_empty_list,
4083 .send_len = sizeof(load_irks_empty_list),
4084 .expect_status = MGMT_STATUS_SUCCESS,
4087 static const char load_irks_one_irk[] = { 0x01, 0x00,
4088 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x01,
4089 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
4090 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
4092 static const struct generic_data load_irks_success2_test = {
4093 .send_opcode = MGMT_OP_LOAD_IRKS,
4094 .send_param = load_irks_one_irk,
4095 .send_len = sizeof(load_irks_one_irk),
4096 .expect_status = MGMT_STATUS_SUCCESS,
4099 static const char load_irks_nval_addr_type[] = { 0x01, 0x00,
4100 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x00,
4101 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
4102 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
4104 static const struct generic_data load_irks_nval_param1_test = {
4105 .send_opcode = MGMT_OP_LOAD_IRKS,
4106 .send_param = load_irks_nval_addr_type,
4107 .send_len = sizeof(load_irks_nval_addr_type),
4108 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4111 static const char load_irks_nval_rand_addr[] = { 0x01, 0x00,
4112 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x02,
4113 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
4114 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
4116 static const struct generic_data load_irks_nval_param2_test = {
4117 .send_opcode = MGMT_OP_LOAD_IRKS,
4118 .send_param = load_irks_nval_rand_addr,
4119 .send_len = sizeof(load_irks_nval_rand_addr),
4120 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4123 static const char load_irks_nval_len[] = { 0x02, 0x00, 0xff, 0xff };
4125 static const struct generic_data load_irks_nval_param3_test = {
4126 .send_opcode = MGMT_OP_LOAD_IRKS,
4127 .send_param = load_irks_nval_len,
4128 .send_len = sizeof(load_irks_nval_len),
4129 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4132 static const struct generic_data load_irks_not_supported_test = {
4133 .send_opcode = MGMT_OP_LOAD_IRKS,
4134 .send_param = load_irks_empty_list,
4135 .send_len = sizeof(load_irks_empty_list),
4136 .expect_status = MGMT_STATUS_NOT_SUPPORTED,
4139 static const char set_privacy_1_valid_param[] = { 0x01,
4140 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
4141 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
4142 static const char set_privacy_settings_param[] = { 0x80, 0x20, 0x00, 0x00 };
4144 static const struct generic_data set_privacy_success_1_test = {
4145 .send_opcode = MGMT_OP_SET_PRIVACY,
4146 .send_param = set_privacy_1_valid_param,
4147 .send_len = sizeof(set_privacy_1_valid_param),
4148 .expect_status = MGMT_STATUS_SUCCESS,
4149 .expect_param = set_privacy_settings_param,
4150 .expect_len = sizeof(set_privacy_settings_param),
4151 .expect_settings_set = MGMT_SETTING_PRIVACY,
4154 static const char set_privacy_2_valid_param[] = { 0x02,
4155 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
4156 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
4158 static const struct generic_data set_privacy_success_2_test = {
4159 .send_opcode = MGMT_OP_SET_PRIVACY,
4160 .send_param = set_privacy_2_valid_param,
4161 .send_len = sizeof(set_privacy_2_valid_param),
4162 .expect_status = MGMT_STATUS_SUCCESS,
4163 .expect_param = set_privacy_settings_param,
4164 .expect_len = sizeof(set_privacy_settings_param),
4165 .expect_settings_set = MGMT_SETTING_PRIVACY,
4168 static const struct generic_data set_privacy_powered_test = {
4169 .setup_settings = settings_powered,
4170 .send_opcode = MGMT_OP_SET_PRIVACY,
4171 .send_param = set_privacy_1_valid_param,
4172 .send_len = sizeof(set_privacy_1_valid_param),
4173 .expect_status = MGMT_STATUS_REJECTED,
4176 static const char set_privacy_nval_param[] = { 0xff,
4177 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
4178 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
4179 static const struct generic_data set_privacy_nval_param_test = {
4180 .send_opcode = MGMT_OP_SET_PRIVACY,
4181 .send_param = set_privacy_nval_param,
4182 .send_len = sizeof(set_privacy_nval_param),
4183 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4186 static const void *get_clock_info_send_param_func(uint16_t *len)
4188 struct test_data *data = tester_get_data();
4189 static uint8_t param[7];
4191 memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
4192 param[6] = 0x00; /* Address type */
4194 *len = sizeof(param);
4199 static const void *get_clock_info_expect_param_func(uint16_t *len)
4201 struct test_data *data = tester_get_data();
4202 static uint8_t param[17];
4203 struct mgmt_rp_get_clock_info *rp;
4205 rp = (struct mgmt_rp_get_clock_info *)param;
4206 memset(param, 0, sizeof(param));
4207 memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
4208 param[6] = 0x00; /* Address type */
4210 rp->local_clock = 0x11223344;
4211 rp->piconet_clock = 0x11223344;
4212 rp->accuracy = 0x5566;
4214 *len = sizeof(param);
4219 static const void *get_clock_info_expect_param_not_powered_func(uint16_t *len)
4221 struct test_data *data = tester_get_data();
4222 static uint8_t param[17];
4224 memset(param, 0, sizeof(param));
4225 memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
4226 param[6] = 0x00; /* Address type */
4228 *len = sizeof(param);
4233 static const void *get_conn_info_send_param_func(uint16_t *len)
4235 struct test_data *data = tester_get_data();
4236 static uint8_t param[7];
4238 memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
4239 param[6] = 0x00; /* Address type */
4241 *len = sizeof(param);
4246 static const void *get_conn_info_expect_param_func(uint16_t *len)
4248 struct test_data *data = tester_get_data();
4249 static uint8_t param[10];
4251 memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
4252 param[6] = 0x00; /* Address type */
4253 param[7] = 0xff; /* RSSI (= -1) */
4254 param[8] = 0xff; /* TX power (= -1) */
4255 param[9] = 0x04; /* max TX power */
4257 *len = sizeof(param);
4262 static const void *get_conn_info_error_expect_param_func(uint16_t *len)
4264 struct test_data *data = tester_get_data();
4265 static uint8_t param[10];
4267 /* All unset parameters shall be 0 in case of error */
4268 memset(param, 0, sizeof(param));
4270 memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
4271 param[6] = 0x00; /* Address type */
4273 *len = sizeof(param);
4278 static const struct generic_data get_clock_info_succes1_test = {
4279 .setup_settings = settings_powered_connectable_bondable_ssp,
4280 .send_opcode = MGMT_OP_GET_CLOCK_INFO,
4281 .send_func = get_clock_info_send_param_func,
4282 .expect_status = MGMT_STATUS_SUCCESS,
4283 .expect_func = get_clock_info_expect_param_func,
4286 static const struct generic_data get_clock_info_fail1_test = {
4287 .send_opcode = MGMT_OP_GET_CLOCK_INFO,
4288 .send_func = get_clock_info_send_param_func,
4289 .expect_status = MGMT_STATUS_NOT_POWERED,
4290 .expect_func = get_clock_info_expect_param_not_powered_func,
4293 static const struct generic_data get_conn_info_succes1_test = {
4294 .setup_settings = settings_powered_connectable_bondable_ssp,
4295 .send_opcode = MGMT_OP_GET_CONN_INFO,
4296 .send_func = get_conn_info_send_param_func,
4297 .expect_status = MGMT_STATUS_SUCCESS,
4298 .expect_func = get_conn_info_expect_param_func,
4301 static const struct generic_data get_conn_info_ncon_test = {
4302 .setup_settings = settings_powered_connectable_bondable_ssp,
4303 .send_opcode = MGMT_OP_GET_CONN_INFO,
4304 .send_func = get_conn_info_send_param_func,
4305 .expect_status = MGMT_STATUS_NOT_CONNECTED,
4306 .expect_func = get_conn_info_error_expect_param_func,
4309 static const void *get_conn_info_expect_param_power_off_func(uint16_t *len)
4311 struct test_data *data = tester_get_data();
4312 static uint8_t param[10];
4314 memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
4315 param[6] = 0x00; /* Address type */
4316 param[7] = 127; /* RSSI */
4317 param[8] = 127; /* TX power */
4318 param[9] = 127; /* max TX power */
4320 *len = sizeof(param);
4325 static const struct generic_data get_conn_info_power_off_test = {
4326 .setup_settings = settings_powered_connectable_bondable_ssp,
4327 .send_opcode = MGMT_OP_GET_CONN_INFO,
4328 .send_func = get_conn_info_send_param_func,
4329 .force_power_off = true,
4330 .expect_status = MGMT_STATUS_NOT_POWERED,
4331 .expect_func = get_conn_info_expect_param_power_off_func,
4332 .fail_tolerant = true,
4335 static const uint8_t load_conn_param_nval_1[16] = { 0x12, 0x11 };
4336 static const struct generic_data load_conn_params_fail_1 = {
4337 .send_opcode = MGMT_OP_LOAD_CONN_PARAM,
4338 .send_param = load_conn_param_nval_1,
4339 .send_len = sizeof(load_conn_param_nval_1),
4340 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4343 static const uint8_t add_device_nval_1[] = {
4344 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
4348 static const uint8_t add_device_rsp[] = {
4349 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
4352 static const struct generic_data add_device_fail_1 = {
4353 .send_opcode = MGMT_OP_ADD_DEVICE,
4354 .send_param = add_device_nval_1,
4355 .send_len = sizeof(add_device_nval_1),
4356 .expect_param = add_device_rsp,
4357 .expect_len = sizeof(add_device_rsp),
4358 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4361 static const uint8_t add_device_nval_2[] = {
4362 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
4366 static const struct generic_data add_device_fail_2 = {
4367 .send_opcode = MGMT_OP_ADD_DEVICE,
4368 .send_param = add_device_nval_2,
4369 .send_len = sizeof(add_device_nval_2),
4370 .expect_param = add_device_rsp,
4371 .expect_len = sizeof(add_device_rsp),
4372 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4375 static const uint8_t add_device_nval_3[] = {
4376 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
4380 static const struct generic_data add_device_fail_3 = {
4381 .send_opcode = MGMT_OP_ADD_DEVICE,
4382 .send_param = add_device_nval_3,
4383 .send_len = sizeof(add_device_nval_3),
4384 .expect_param = add_device_rsp,
4385 .expect_len = sizeof(add_device_rsp),
4386 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4389 static const uint8_t add_device_nval_4[] = {
4390 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
4394 static const uint8_t add_device_rsp_4[] = {
4395 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
4398 static const struct generic_data add_device_fail_4 = {
4399 .send_opcode = MGMT_OP_ADD_DEVICE,
4400 .send_param = add_device_nval_4,
4401 .send_len = sizeof(add_device_nval_4),
4402 .expect_param = add_device_rsp_4,
4403 .expect_len = sizeof(add_device_rsp_4),
4404 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4407 static const uint8_t add_device_success_param_1[] = {
4408 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
4412 static const struct generic_data add_device_success_1 = {
4413 .send_opcode = MGMT_OP_ADD_DEVICE,
4414 .send_param = add_device_success_param_1,
4415 .send_len = sizeof(add_device_success_param_1),
4416 .expect_param = add_device_rsp,
4417 .expect_len = sizeof(add_device_rsp),
4418 .expect_status = MGMT_STATUS_SUCCESS,
4419 .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
4420 .expect_alt_ev_param = add_device_success_param_1,
4421 .expect_alt_ev_len = sizeof(add_device_success_param_1),
4424 static const uint8_t add_device_success_param_2[] = {
4425 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
4429 static const uint8_t add_device_rsp_le[] = {
4430 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
4433 static const struct generic_data add_device_success_2 = {
4434 .send_opcode = MGMT_OP_ADD_DEVICE,
4435 .send_param = add_device_success_param_2,
4436 .send_len = sizeof(add_device_success_param_2),
4437 .expect_param = add_device_rsp_le,
4438 .expect_len = sizeof(add_device_rsp_le),
4439 .expect_status = MGMT_STATUS_SUCCESS,
4440 .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
4441 .expect_alt_ev_param = add_device_success_param_2,
4442 .expect_alt_ev_len = sizeof(add_device_success_param_2),
4445 static const uint8_t add_device_success_param_3[] = {
4446 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
4450 static const struct generic_data add_device_success_3 = {
4451 .send_opcode = MGMT_OP_ADD_DEVICE,
4452 .send_param = add_device_success_param_3,
4453 .send_len = sizeof(add_device_success_param_3),
4454 .expect_param = add_device_rsp_le,
4455 .expect_len = sizeof(add_device_rsp_le),
4456 .expect_status = MGMT_STATUS_SUCCESS,
4457 .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
4458 .expect_alt_ev_param = add_device_success_param_3,
4459 .expect_alt_ev_len = sizeof(add_device_success_param_3),
4462 static const struct generic_data add_device_success_4 = {
4463 .setup_settings = settings_powered,
4464 .send_opcode = MGMT_OP_ADD_DEVICE,
4465 .send_param = add_device_success_param_1,
4466 .send_len = sizeof(add_device_success_param_1),
4467 .expect_param = add_device_rsp,
4468 .expect_len = sizeof(add_device_rsp),
4469 .expect_status = MGMT_STATUS_SUCCESS,
4470 .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
4471 .expect_alt_ev_param = add_device_success_param_1,
4472 .expect_alt_ev_len = sizeof(add_device_success_param_1),
4473 .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
4474 .expect_hci_param = set_connectable_scan_enable_param,
4475 .expect_hci_len = sizeof(set_connectable_scan_enable_param),
4478 static const uint8_t le_scan_enable[] = { 0x01, 0x01 };
4479 static const struct generic_data add_device_success_5 = {
4480 .setup_settings = settings_powered_le,
4481 .send_opcode = MGMT_OP_ADD_DEVICE,
4482 .send_param = add_device_success_param_2,
4483 .send_len = sizeof(add_device_success_param_2),
4484 .expect_param = add_device_rsp_le,
4485 .expect_len = sizeof(add_device_rsp_le),
4486 .expect_status = MGMT_STATUS_SUCCESS,
4487 .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
4488 .expect_alt_ev_param = add_device_success_param_2,
4489 .expect_alt_ev_len = sizeof(add_device_success_param_2),
4490 .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_ENABLE,
4491 .expect_hci_param = le_scan_enable,
4492 .expect_hci_len = sizeof(le_scan_enable),
4495 static const uint8_t remove_device_nval_1[] = {
4496 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
4499 static const struct generic_data remove_device_fail_1 = {
4500 .send_opcode = MGMT_OP_REMOVE_DEVICE,
4501 .send_param = remove_device_nval_1,
4502 .send_len = sizeof(remove_device_nval_1),
4503 .expect_param = remove_device_nval_1,
4504 .expect_len = sizeof(remove_device_nval_1),
4505 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4508 static const uint8_t remove_device_param_1[] = {
4509 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
4512 static const struct generic_data remove_device_fail_2 = {
4513 .send_opcode = MGMT_OP_REMOVE_DEVICE,
4514 .send_param = remove_device_param_1,
4515 .send_len = sizeof(remove_device_param_1),
4516 .expect_param = remove_device_param_1,
4517 .expect_len = sizeof(remove_device_param_1),
4518 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4521 static const uint8_t remove_device_param_3[] = {
4522 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
4525 static const struct generic_data remove_device_fail_3 = {
4526 .send_opcode = MGMT_OP_REMOVE_DEVICE,
4527 .send_param = remove_device_param_3,
4528 .send_len = sizeof(remove_device_param_3),
4529 .expect_param = remove_device_param_3,
4530 .expect_len = sizeof(remove_device_param_3),
4531 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4534 static const struct generic_data remove_device_success_1 = {
4535 .send_opcode = MGMT_OP_REMOVE_DEVICE,
4536 .send_param = remove_device_param_1,
4537 .send_len = sizeof(remove_device_param_1),
4538 .expect_param = remove_device_param_1,
4539 .expect_len = sizeof(remove_device_param_1),
4540 .expect_status = MGMT_STATUS_SUCCESS,
4541 .expect_alt_ev = MGMT_EV_DEVICE_REMOVED,
4542 .expect_alt_ev_param = remove_device_param_1,
4543 .expect_alt_ev_len = sizeof(remove_device_param_1),
4546 static const struct generic_data remove_device_success_2 = {
4547 .send_opcode = MGMT_OP_REMOVE_DEVICE,
4548 .send_param = remove_device_param_1,
4549 .send_len = sizeof(remove_device_param_1),
4550 .expect_param = remove_device_param_1,
4551 .expect_len = sizeof(remove_device_param_1),
4552 .expect_status = MGMT_STATUS_SUCCESS,
4553 .expect_alt_ev = MGMT_EV_DEVICE_REMOVED,
4554 .expect_alt_ev_param = remove_device_param_1,
4555 .expect_alt_ev_len = sizeof(remove_device_param_1),
4556 .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
4557 .expect_hci_param = set_connectable_off_scan_enable_param,
4558 .expect_hci_len = sizeof(set_connectable_off_scan_enable_param),
4561 static const struct generic_data remove_device_success_3 = {
4562 .setup_settings = settings_powered,
4563 .send_opcode = MGMT_OP_REMOVE_DEVICE,
4564 .send_param = remove_device_param_1,
4565 .send_len = sizeof(remove_device_param_1),
4566 .expect_param = remove_device_param_1,
4567 .expect_len = sizeof(remove_device_param_1),
4568 .expect_status = MGMT_STATUS_SUCCESS,
4569 .expect_alt_ev = MGMT_EV_DEVICE_REMOVED,
4570 .expect_alt_ev_param = remove_device_param_1,
4571 .expect_alt_ev_len = sizeof(remove_device_param_1),
4574 static const uint8_t remove_device_param_2[] = {
4575 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
4578 static const struct generic_data remove_device_success_4 = {
4579 .setup_settings = settings_powered,
4580 .send_opcode = MGMT_OP_REMOVE_DEVICE,
4581 .send_param = remove_device_param_2,
4582 .send_len = sizeof(remove_device_param_2),
4583 .expect_param = remove_device_param_2,
4584 .expect_len = sizeof(remove_device_param_2),
4585 .expect_status = MGMT_STATUS_SUCCESS,
4586 .expect_alt_ev = MGMT_EV_DEVICE_REMOVED,
4587 .expect_alt_ev_param = remove_device_param_2,
4588 .expect_alt_ev_len = sizeof(remove_device_param_2),
4591 static const struct generic_data remove_device_success_5 = {
4592 .send_opcode = MGMT_OP_REMOVE_DEVICE,
4593 .send_param = remove_device_param_2,
4594 .send_len = sizeof(remove_device_param_2),
4595 .expect_param = remove_device_param_2,
4596 .expect_len = sizeof(remove_device_param_2),
4597 .expect_status = MGMT_STATUS_SUCCESS,
4598 .expect_alt_ev = MGMT_EV_DEVICE_REMOVED,
4599 .expect_alt_ev_param = remove_device_param_2,
4600 .expect_alt_ev_len = sizeof(remove_device_param_2),
4603 static const uint8_t remove_device_param_all[7] = { 0x00 };
4605 static const struct generic_data remove_device_success_6 = {
4606 .send_opcode = MGMT_OP_REMOVE_DEVICE,
4607 .send_param = remove_device_param_all,
4608 .send_len = sizeof(remove_device_param_all),
4609 .expect_param = remove_device_param_all,
4610 .expect_len = sizeof(remove_device_param_all),
4611 .expect_status = MGMT_STATUS_SUCCESS,
4614 static const struct generic_data read_adv_features_invalid_param_test = {
4615 .send_opcode = MGMT_OP_READ_ADV_FEATURES,
4616 .send_param = dummy_data,
4617 .send_len = sizeof(dummy_data),
4618 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4621 static const struct generic_data read_adv_features_invalid_index_test = {
4622 .send_index_none = true,
4623 .send_opcode = MGMT_OP_READ_ADV_FEATURES,
4624 .expect_status = MGMT_STATUS_INVALID_INDEX,
4627 static const uint8_t read_adv_features_rsp_1[] = {
4628 0x7f, 0xf0, 0x01, 0x00, /* supported flags */
4629 0x1f, /* max_adv_data_len */
4630 0x1f, /* max_scan_rsp_len */
4631 0x05, /* max_instances */
4632 0x00, /* num_instances */
4635 static const struct generic_data read_adv_features_success_1 = {
4636 .send_opcode = MGMT_OP_READ_ADV_FEATURES,
4637 .expect_param = read_adv_features_rsp_1,
4638 .expect_len = sizeof(read_adv_features_rsp_1),
4639 .expect_status = MGMT_STATUS_SUCCESS,
4642 static const uint8_t read_adv_features_rsp_2[] = {
4643 0x7f, 0xf0, 0x01, 0x00, /* supported flags */
4644 0x1f, /* max_adv_data_len */
4645 0x1f, /* max_scan_rsp_len */
4646 0x05, /* max_instances */
4647 0x01, /* num_instances */
4648 0x01, /* instance identifiers */
4651 static const struct generic_data read_adv_features_success_2 = {
4652 .send_opcode = MGMT_OP_READ_ADV_FEATURES,
4653 .expect_param = read_adv_features_rsp_2,
4654 .expect_len = sizeof(read_adv_features_rsp_2),
4655 .expect_status = MGMT_STATUS_SUCCESS,
4658 /* simple add advertising command */
4659 static const uint8_t add_advertising_param_uuid[] = {
4660 0x01, /* adv instance */
4661 0x00, 0x00, 0x00, 0x00, /* flags: none */
4662 0x00, 0x00, /* duration: default */
4663 0x00, 0x00, /* timeout: none */
4664 0x09, /* adv data len */
4665 0x00, /* scan rsp len */
4668 0x02, /* AD type: some 16 bit service class UUIDs */
4669 0x0d, 0x18, /* heart rate monitor */
4671 0xff, /* AD type: manufacturer specific data */
4672 0x01, 0x02, 0x03, /* custom advertising data */
4675 /* add advertising with scan response data */
4676 static const uint8_t add_advertising_param_scanrsp[] = {
4677 /* instance, flags, duration, timeout, adv data len: same as before */
4678 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
4679 0x0a, /* scan rsp len */
4680 /* adv data: same as before */
4681 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
4682 /* scan rsp data: */
4684 0x19, /* AD type: external appearance */
4685 0x40, 0x03, /* some custom appearance */
4687 0x03, /* AD type: all 16 bit service class UUIDs */
4688 0x0d, 0x18, /* heart rate monitor */
4689 0x0f, 0x18, /* battery service */
4692 /* add advertising with timeout */
4693 static const uint8_t add_advertising_param_timeout[] = {
4694 /* instance, flags, duration: same as before */
4695 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4696 0x05, 0x00, /* timeout: 5 seconds */
4697 /* adv data: same as before */
4698 0x09, 0x00, 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
4701 /* add advertising with connectable flag */
4702 static const uint8_t add_advertising_param_connectable[] = {
4703 0x01, /* adv instance */
4704 0x01, 0x00, 0x00, 0x00, /* flags: connectable*/
4705 /* duration, timeout, adv/scan data: same as before */
4706 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
4707 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
4710 /* add advertising with general discoverable flag */
4711 static const uint8_t add_advertising_param_general_discov[] = {
4712 0x01, /* adv instance */
4713 0x02, 0x00, 0x00, 0x00, /* flags: general discoverable*/
4714 /* duration, timeout, adv/scan data: same as before */
4715 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
4716 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
4719 /* add advertising with limited discoverable flag */
4720 static const uint8_t add_advertising_param_limited_discov[] = {
4721 0x01, /* adv instance */
4722 0x04, 0x00, 0x00, 0x00, /* flags: limited discoverable */
4723 /* duration, timeout, adv/scan data: same as before */
4724 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
4725 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
4728 /* add advertising with managed flags */
4729 static const uint8_t add_advertising_param_managed[] = {
4730 0x01, /* adv instance */
4731 0x08, 0x00, 0x00, 0x00, /* flags: managed flags */
4732 /* duration, timeout, adv/scan data: same as before */
4733 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
4734 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
4737 /* add advertising with tx power flag */
4738 static const uint8_t add_advertising_param_txpwr[] = {
4739 0x01, /* adv instance */
4740 0x10, 0x00, 0x00, 0x00, /* flags: tx power */
4741 /* duration, timeout, adv/scan data: same as before */
4742 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
4743 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
4746 /* add advertising command for a second instance */
4747 static const uint8_t add_advertising_param_test2[] = {
4748 0x02, /* adv instance */
4749 0x00, 0x00, 0x00, 0x00, /* flags: none */
4750 0x00, 0x00, /* duration: default */
4751 0x01, 0x00, /* timeout: 1 second */
4752 0x07, /* adv data len */
4753 0x00, /* scan rsp len */
4756 0x08, /* AD type: shortened local name */
4757 0x74, 0x65, 0x73, 0x74, 0x32, /* "test2" */
4760 static const uint8_t advertising_instance1_param[] = {
4764 static const uint8_t advertising_instance2_param[] = {
4768 static const uint8_t set_adv_data_uuid[] = {
4771 /* advertise heart rate monitor and manufacturer specific data */
4772 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
4774 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4775 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4779 static const uint8_t set_adv_data_test1[] = {
4780 0x07, /* adv data len */
4782 0x08, /* AD type: shortened local name */
4783 0x74, 0x65, 0x73, 0x74, 0x31, /* "test1" */
4785 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4786 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4787 0x00, 0x00, 0x00, 0x00,
4790 static const uint8_t set_adv_data_test2[] = {
4791 0x07, /* adv data len */
4793 0x08, /* AD type: shortened local name */
4794 0x74, 0x65, 0x73, 0x74, 0x32, /* "test2" */
4796 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4797 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4798 0x00, 0x00, 0x00, 0x00,
4801 static const uint8_t set_adv_data_txpwr[] = {
4802 0x03, /* adv data len */
4804 0x0a, /* AD type: tx power */
4805 0x00, /* tx power */
4807 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4808 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4809 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4812 static const uint8_t set_adv_data_general_discov[] = {
4813 0x0c, /* adv data len */
4815 0x01, /* AD type: flags */
4816 0x02, /* general discoverable */
4818 0x02, /* AD type: some 16bit service class UUIDs */
4819 0x0d, 0x18, /* heart rate monitor */
4821 0xff, /* AD type: manufacturer specific data */
4822 0x01, 0x02, 0x03, /* custom advertising data */
4824 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4825 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4828 static const uint8_t set_adv_data_limited_discov[] = {
4829 0x0c, /* adv data len */
4831 0x01, /* AD type: flags */
4832 0x01, /* limited discoverable */
4833 /* rest: same as before */
4834 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
4836 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4837 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4840 static const uint8_t set_adv_data_uuid_txpwr[] = {
4841 0x0c, /* adv data len */
4843 0x02, /* AD type: some 16bit service class UUIDs */
4844 0x0d, 0x18, /* heart rate monitor */
4846 0xff, /* AD type: manufacturer specific data */
4847 0x01, 0x02, 0x03, /* custom advertising data */
4849 0x0a, /* AD type: tx power */
4850 0x00, /* tx power */
4852 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4853 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4856 static const uint8_t set_scan_rsp_uuid[] = {
4857 0x0a, /* scan rsp data len */
4859 0x19, /* AD type: external appearance */
4860 0x40, 0x03, /* some custom appearance */
4862 0x03, /* AD type: all 16 bit service class UUIDs */
4863 0x0d, 0x18, 0x0f, 0x18, /* heart rate monitor, battery service */
4865 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4866 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4870 static const uint8_t add_advertising_invalid_param_1[] = {
4871 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
4872 0x03, 0x03, 0x0d, 0x18,
4873 0x19, 0xff, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
4874 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
4875 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e,
4878 static const uint8_t add_advertising_invalid_param_2[] = {
4879 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
4880 0x04, 0x03, 0x0d, 0x18,
4881 0x04, 0xff, 0x01, 0x02, 0x03,
4884 static const uint8_t add_advertising_invalid_param_3[] = {
4885 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
4886 0x03, 0x03, 0x0d, 0x18,
4887 0x02, 0xff, 0x01, 0x02, 0x03,
4890 static const uint8_t add_advertising_invalid_param_4[] = {
4891 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
4892 0x03, 0x03, 0x0d, 0x18,
4893 0x05, 0xff, 0x01, 0x02, 0x03,
4896 static const uint8_t add_advertising_invalid_param_5[] = {
4897 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00,
4898 0x03, 0x03, 0x0d, 0x18,
4899 0x19, 0xff, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
4900 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
4901 0x15, 0x16, 0x17, 0x18,
4904 static const uint8_t add_advertising_invalid_param_6[] = {
4905 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
4906 0x03, 0x03, 0x0d, 0x18,
4907 0x19, 0xff, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
4908 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
4909 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e,
4912 static const uint8_t add_advertising_invalid_param_7[] = {
4913 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
4914 0x04, 0x03, 0x0d, 0x18,
4915 0x04, 0xff, 0x01, 0x02, 0x03,
4918 static const uint8_t add_advertising_invalid_param_8[] = {
4919 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
4920 0x03, 0x03, 0x0d, 0x18,
4921 0x02, 0xff, 0x01, 0x02, 0x03,
4924 static const uint8_t add_advertising_invalid_param_9[] = {
4925 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
4926 0x03, 0x03, 0x0d, 0x18,
4927 0x05, 0xff, 0x01, 0x02, 0x03,
4930 static const uint8_t add_advertising_invalid_param_10[] = {
4931 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D,
4932 0x03, 0x03, 0x0d, 0x18,
4933 0x19, 0xff, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
4934 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
4935 0x15, 0x16, 0x17, 0x18,
4938 static const struct generic_data add_advertising_fail_1 = {
4939 .setup_settings = settings_powered,
4940 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4941 .send_param = add_advertising_param_uuid,
4942 .send_len = sizeof(add_advertising_param_uuid),
4943 .expect_status = MGMT_STATUS_REJECTED,
4946 static const struct generic_data add_advertising_fail_2 = {
4947 .setup_settings = settings_powered_le,
4948 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4949 .send_param = add_advertising_invalid_param_1,
4950 .send_len = sizeof(add_advertising_invalid_param_1),
4951 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4954 static const struct generic_data add_advertising_fail_3 = {
4955 .setup_settings = settings_powered_le,
4956 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4957 .send_param = add_advertising_invalid_param_2,
4958 .send_len = sizeof(add_advertising_invalid_param_2),
4959 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4962 static const struct generic_data add_advertising_fail_4 = {
4963 .setup_settings = settings_powered_le,
4964 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4965 .send_param = add_advertising_invalid_param_3,
4966 .send_len = sizeof(add_advertising_invalid_param_3),
4967 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4970 static const struct generic_data add_advertising_fail_5 = {
4971 .setup_settings = settings_powered_le,
4972 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4973 .send_param = add_advertising_invalid_param_4,
4974 .send_len = sizeof(add_advertising_invalid_param_4),
4975 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4978 static const struct generic_data add_advertising_fail_6 = {
4979 .setup_settings = settings_powered_le,
4980 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4981 .send_param = add_advertising_invalid_param_5,
4982 .send_len = sizeof(add_advertising_invalid_param_5),
4983 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4986 static const struct generic_data add_advertising_fail_7 = {
4987 .setup_settings = settings_powered_le,
4988 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4989 .send_param = add_advertising_invalid_param_6,
4990 .send_len = sizeof(add_advertising_invalid_param_6),
4991 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4994 static const struct generic_data add_advertising_fail_8 = {
4995 .setup_settings = settings_powered_le,
4996 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4997 .send_param = add_advertising_invalid_param_7,
4998 .send_len = sizeof(add_advertising_invalid_param_7),
4999 .expect_status = MGMT_STATUS_INVALID_PARAMS,
5002 static const struct generic_data add_advertising_fail_9 = {
5003 .setup_settings = settings_powered_le,
5004 .send_opcode = MGMT_OP_ADD_ADVERTISING,
5005 .send_param = add_advertising_invalid_param_8,
5006 .send_len = sizeof(add_advertising_invalid_param_8),
5007 .expect_status = MGMT_STATUS_INVALID_PARAMS,
5010 static const struct generic_data add_advertising_fail_10 = {
5011 .setup_settings = settings_powered_le,
5012 .send_opcode = MGMT_OP_ADD_ADVERTISING,
5013 .send_param = add_advertising_invalid_param_9,
5014 .send_len = sizeof(add_advertising_invalid_param_9),
5015 .expect_status = MGMT_STATUS_INVALID_PARAMS,
5018 static const struct generic_data add_advertising_fail_11 = {
5019 .setup_settings = settings_powered_le,
5020 .send_opcode = MGMT_OP_ADD_ADVERTISING,
5021 .send_param = add_advertising_invalid_param_10,
5022 .send_len = sizeof(add_advertising_invalid_param_10),
5023 .expect_status = MGMT_STATUS_INVALID_PARAMS,
5026 static const struct generic_data add_advertising_fail_12 = {
5027 .setup_settings = settings_le,
5028 .send_opcode = MGMT_OP_ADD_ADVERTISING,
5029 .send_param = add_advertising_param_timeout,
5030 .send_len = sizeof(add_advertising_param_timeout),
5031 .expect_status = MGMT_STATUS_REJECTED,
5034 static const struct generic_data add_advertising_success_1 = {
5035 .setup_settings = settings_powered_le,
5036 .send_opcode = MGMT_OP_ADD_ADVERTISING,
5037 .send_param = add_advertising_param_uuid,
5038 .send_len = sizeof(add_advertising_param_uuid),
5039 .expect_param = advertising_instance1_param,
5040 .expect_len = sizeof(advertising_instance1_param),
5041 .expect_status = MGMT_STATUS_SUCCESS,
5042 .expect_alt_ev = MGMT_EV_ADVERTISING_ADDED,
5043 .expect_alt_ev_param = advertising_instance1_param,
5044 .expect_alt_ev_len = sizeof(advertising_instance1_param),
5045 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
5046 .expect_hci_param = set_adv_data_uuid,
5047 .expect_hci_len = sizeof(set_adv_data_uuid),
5050 static const char set_powered_adv_instance_settings_param[] = {
5051 0x81, 0x02, 0x00, 0x00,
5054 static const struct generic_data add_advertising_success_pwron_data = {
5055 .send_opcode = MGMT_OP_SET_POWERED,
5056 .send_param = set_powered_on_param,
5057 .send_len = sizeof(set_powered_on_param),
5058 .expect_status = MGMT_STATUS_SUCCESS,
5059 .expect_param = set_powered_adv_instance_settings_param,
5060 .expect_len = sizeof(set_powered_adv_instance_settings_param),
5061 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
5062 .expect_hci_param = set_adv_data_test1,
5063 .expect_hci_len = sizeof(set_adv_data_test1),
5066 static const struct generic_data add_advertising_success_pwron_enabled = {
5067 .send_opcode = MGMT_OP_SET_POWERED,
5068 .send_param = set_powered_on_param,
5069 .send_len = sizeof(set_powered_on_param),
5070 .expect_status = MGMT_STATUS_SUCCESS,
5071 .expect_param = set_powered_adv_instance_settings_param,
5072 .expect_len = sizeof(set_powered_adv_instance_settings_param),
5073 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_ENABLE,
5074 .expect_hci_param = set_adv_on_set_adv_enable_param,
5075 .expect_hci_len = sizeof(set_adv_on_set_adv_enable_param),
5078 static const struct generic_data add_advertising_success_4 = {
5079 .send_opcode = MGMT_OP_SET_ADVERTISING,
5080 .send_param = set_adv_on_param,
5081 .send_len = sizeof(set_adv_on_param),
5082 .expect_status = MGMT_STATUS_SUCCESS,
5083 .expect_param = set_adv_settings_param_2,
5084 .expect_len = sizeof(set_adv_settings_param_2),
5085 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
5086 .expect_hci_param = set_adv_data_txpwr,
5087 .expect_hci_len = sizeof(set_adv_data_txpwr),
5090 static const struct generic_data add_advertising_success_5 = {
5091 .send_opcode = MGMT_OP_SET_ADVERTISING,
5092 .send_param = set_adv_off_param,
5093 .send_len = sizeof(set_adv_off_param),
5094 .expect_status = MGMT_STATUS_SUCCESS,
5095 .expect_param = set_powered_adv_instance_settings_param,
5096 .expect_len = sizeof(set_powered_adv_instance_settings_param),
5097 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
5098 .expect_hci_param = set_adv_data_test1,
5099 .expect_hci_len = sizeof(set_adv_data_test1),
5102 static const struct generic_data add_advertising_success_6 = {
5103 .setup_settings = settings_powered_le,
5104 .send_opcode = MGMT_OP_ADD_ADVERTISING,
5105 .send_param = add_advertising_param_scanrsp,
5106 .send_len = sizeof(add_advertising_param_scanrsp),
5107 .expect_param = advertising_instance1_param,
5108 .expect_len = sizeof(advertising_instance1_param),
5109 .expect_status = MGMT_STATUS_SUCCESS,
5110 .expect_alt_ev = MGMT_EV_ADVERTISING_ADDED,
5111 .expect_alt_ev_param = advertising_instance1_param,
5112 .expect_alt_ev_len = sizeof(advertising_instance1_param),
5113 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
5114 .expect_hci_param = set_adv_data_uuid,
5115 .expect_hci_len = sizeof(set_adv_data_uuid),
5118 static const struct generic_data add_advertising_success_7 = {
5119 .setup_settings = settings_powered_le,
5120 .send_opcode = MGMT_OP_ADD_ADVERTISING,
5121 .send_param = add_advertising_param_scanrsp,
5122 .send_len = sizeof(add_advertising_param_scanrsp),
5123 .expect_param = advertising_instance1_param,
5124 .expect_len = sizeof(advertising_instance1_param),
5125 .expect_status = MGMT_STATUS_SUCCESS,
5126 .expect_alt_ev = MGMT_EV_ADVERTISING_ADDED,
5127 .expect_alt_ev_param = advertising_instance1_param,
5128 .expect_alt_ev_len = sizeof(advertising_instance1_param),
5129 .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_RSP_DATA,
5130 .expect_hci_param = set_scan_rsp_uuid,
5131 .expect_hci_len = sizeof(set_scan_rsp_uuid),
5134 static const struct generic_data add_advertising_success_8 = {
5135 .setup_settings = settings_powered_le,
5136 .send_opcode = MGMT_OP_ADD_ADVERTISING,
5137 .send_param = add_advertising_param_connectable,
5138 .send_len = sizeof(add_advertising_param_connectable),
5139 .expect_param = advertising_instance1_param,
5140 .expect_len = sizeof(advertising_instance1_param),
5141 .expect_status = MGMT_STATUS_SUCCESS,
5142 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
5143 .expect_hci_param = set_connectable_on_adv_param,
5144 .expect_hci_len = sizeof(set_connectable_on_adv_param),
5147 static const struct generic_data add_advertising_success_9 = {
5148 .setup_settings = settings_powered_le,
5149 .send_opcode = MGMT_OP_ADD_ADVERTISING,
5150 .send_param = add_advertising_param_general_discov,
5151 .send_len = sizeof(add_advertising_param_general_discov),
5152 .expect_param = advertising_instance1_param,
5153 .expect_len = sizeof(advertising_instance1_param),
5154 .expect_status = MGMT_STATUS_SUCCESS,
5155 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
5156 .expect_hci_param = set_adv_data_general_discov,
5157 .expect_hci_len = sizeof(set_adv_data_general_discov),
5160 static const struct generic_data add_advertising_success_10 = {
5161 .setup_settings = settings_powered_le,
5162 .send_opcode = MGMT_OP_ADD_ADVERTISING,
5163 .send_param = add_advertising_param_limited_discov,
5164 .send_len = sizeof(add_advertising_param_limited_discov),
5165 .expect_param = advertising_instance1_param,
5166 .expect_len = sizeof(advertising_instance1_param),
5167 .expect_status = MGMT_STATUS_SUCCESS,
5168 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
5169 .expect_hci_param = set_adv_data_limited_discov,
5170 .expect_hci_len = sizeof(set_adv_data_limited_discov),
5173 static const struct generic_data add_advertising_success_11 = {
5174 .setup_settings = settings_powered_le_discoverable,
5175 .send_opcode = MGMT_OP_ADD_ADVERTISING,
5176 .send_param = add_advertising_param_managed,
5177 .send_len = sizeof(add_advertising_param_managed),
5178 .expect_param = advertising_instance1_param,
5179 .expect_len = sizeof(advertising_instance1_param),
5180 .expect_status = MGMT_STATUS_SUCCESS,
5181 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
5182 .expect_hci_param = set_adv_data_general_discov,
5183 .expect_hci_len = sizeof(set_adv_data_general_discov),
5186 static const struct generic_data add_advertising_success_12 = {
5187 .setup_settings = settings_powered_le_discoverable,
5188 .send_opcode = MGMT_OP_ADD_ADVERTISING,
5189 .send_param = add_advertising_param_txpwr,
5190 .send_len = sizeof(add_advertising_param_txpwr),
5191 .expect_param = advertising_instance1_param,
5192 .expect_len = sizeof(advertising_instance1_param),
5193 .expect_status = MGMT_STATUS_SUCCESS,
5194 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
5195 .expect_hci_param = set_adv_data_uuid_txpwr,
5196 .expect_hci_len = sizeof(set_adv_data_uuid_txpwr),
5199 static uint16_t settings_powered_le_connectable[] = {
5200 MGMT_OP_SET_POWERED,
5202 MGMT_OP_SET_CONNECTABLE, 0 };
5204 static const struct generic_data add_advertising_success_13 = {
5205 .setup_settings = settings_powered_le,
5206 .send_opcode = MGMT_OP_ADD_ADVERTISING,
5207 .send_param = add_advertising_param_scanrsp,
5208 .send_len = sizeof(add_advertising_param_scanrsp),
5209 .expect_param = advertising_instance1_param,
5210 .expect_len = sizeof(advertising_instance1_param),
5211 .expect_status = MGMT_STATUS_SUCCESS,
5212 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
5213 .expect_hci_param = set_connectable_off_scan_adv_param,
5214 .expect_hci_len = sizeof(set_connectable_off_scan_adv_param),
5215 .expect_hci_param_check_func = set_connectable_off_scan_adv_check_func
5218 static uint8_t set_connectable_off_adv_param[] = {
5219 0x64, 0x00, /* min_interval */
5220 0x96, 0x00, /* max_interval */
5222 0x01, /* own_addr_type */
5223 0x00, /* direct_addr_type */
5224 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* direct_addr */
5225 0x07, /* channel_map */
5226 0x00, /* filter_policy */
5229 static int set_connectable_off_adv_check_func(const void *param,
5232 const uint8_t *received = param;
5233 uint8_t *expected = set_connectable_off_adv_param;
5235 /* Compare the received param with expected param, but ignore the
5236 * min_internal and max_interval since these values are turned often
5237 * in the kernel and we don't want to update the expected value every
5240 return memcmp(&received[4], &expected[4], length - 4);
5243 static const struct generic_data add_advertising_success_14 = {
5244 .setup_settings = settings_powered_le,
5245 .send_opcode = MGMT_OP_ADD_ADVERTISING,
5246 .send_param = add_advertising_param_uuid,
5247 .send_len = sizeof(add_advertising_param_uuid),
5248 .expect_param = advertising_instance1_param,
5249 .expect_len = sizeof(advertising_instance1_param),
5250 .expect_status = MGMT_STATUS_SUCCESS,
5251 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
5252 .expect_hci_param = set_connectable_off_adv_param,
5253 .expect_hci_len = sizeof(set_connectable_off_adv_param),
5254 .expect_hci_param_check_func = set_connectable_off_adv_check_func
5257 static const struct generic_data add_advertising_success_15 = {
5258 .setup_settings = settings_powered_le_connectable,
5259 .send_opcode = MGMT_OP_ADD_ADVERTISING,
5260 .send_param = add_advertising_param_uuid,
5261 .send_len = sizeof(add_advertising_param_uuid),
5262 .expect_param = advertising_instance1_param,
5263 .expect_len = sizeof(advertising_instance1_param),
5264 .expect_status = MGMT_STATUS_SUCCESS,
5265 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
5266 .expect_hci_param = set_connectable_on_adv_param,
5267 .expect_hci_len = sizeof(set_connectable_on_adv_param),
5270 static const char set_connectable_settings_param_3[] = {
5271 0x83, 0x02, 0x00, 0x00 };
5273 static const struct generic_data add_advertising_success_16 = {
5274 .send_opcode = MGMT_OP_SET_CONNECTABLE,
5275 .send_param = set_connectable_on_param,
5276 .send_len = sizeof(set_connectable_on_param),
5277 .expect_status = MGMT_STATUS_SUCCESS,
5278 .expect_param = set_connectable_settings_param_3,
5279 .expect_len = sizeof(set_connectable_settings_param_3),
5280 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
5281 .expect_hci_param = set_connectable_on_adv_param,
5282 .expect_hci_len = sizeof(set_connectable_on_adv_param),
5285 static const struct generic_data add_advertising_success_17 = {
5286 .send_opcode = MGMT_OP_SET_CONNECTABLE,
5287 .send_param = set_connectable_off_param,
5288 .send_len = sizeof(set_connectable_off_param),
5289 .expect_status = MGMT_STATUS_SUCCESS,
5290 .expect_param = set_le_settings_param_2,
5291 .expect_len = sizeof(set_le_settings_param_2),
5292 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
5293 .expect_hci_param = set_connectable_off_adv_param,
5294 .expect_hci_len = sizeof(set_connectable_off_adv_param),
5295 .expect_hci_param_check_func = set_connectable_off_adv_check_func
5298 static const char set_powered_off_le_settings_param[] = {
5299 0x80, 0x02, 0x00, 0x00
5302 static const struct generic_data add_advertising_power_off = {
5303 .send_opcode = MGMT_OP_SET_POWERED,
5304 .send_param = set_powered_off_param,
5305 .send_len = sizeof(set_powered_off_param),
5306 .expect_status = MGMT_STATUS_SUCCESS,
5307 .expect_param = set_powered_off_le_settings_param,
5308 .expect_len = sizeof(set_powered_off_le_settings_param),
5309 .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
5310 .expect_alt_ev_param = advertising_instance1_param,
5311 .expect_alt_ev_len = sizeof(advertising_instance1_param),
5314 static const char set_le_settings_param_off[] = { 0x81, 0x00, 0x00, 0x00 };
5316 static const struct generic_data add_advertising_le_off = {
5317 .send_opcode = MGMT_OP_SET_LE,
5318 .send_param = set_le_off_param,
5319 .send_len = sizeof(set_le_off_param),
5320 .expect_status = MGMT_STATUS_SUCCESS,
5321 .expect_param = set_le_settings_param_off,
5322 .expect_len = sizeof(set_le_settings_param_off),
5323 .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
5324 .expect_alt_ev_param = advertising_instance1_param,
5325 .expect_alt_ev_len = sizeof(advertising_instance1_param),
5328 static const struct generic_data add_advertising_success_18 = {
5329 .send_opcode = MGMT_OP_ADD_ADVERTISING,
5330 .send_param = add_advertising_param_uuid,
5331 .send_len = sizeof(add_advertising_param_uuid),
5332 .expect_param = advertising_instance1_param,
5333 .expect_len = sizeof(advertising_instance1_param),
5334 .expect_status = MGMT_STATUS_SUCCESS,
5335 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
5336 .expect_hci_param = set_adv_data_uuid,
5337 .expect_hci_len = sizeof(set_adv_data_uuid),
5340 static const struct generic_data add_advertising_timeout_expired = {
5341 .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
5342 .expect_alt_ev_param = advertising_instance1_param,
5343 .expect_alt_ev_len = sizeof(advertising_instance1_param),
5344 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_ENABLE,
5345 .expect_hci_param = set_adv_on_set_adv_disable_param,
5346 .expect_hci_len = sizeof(set_adv_on_set_adv_disable_param),
5349 static const uint8_t remove_advertising_param_1[] = {
5353 static const uint8_t remove_advertising_param_2[] = {
5357 static const struct generic_data remove_advertising_fail_1 = {
5358 .send_opcode = MGMT_OP_REMOVE_ADVERTISING,
5359 .send_param = remove_advertising_param_1,
5360 .send_len = sizeof(remove_advertising_param_1),
5361 .expect_status = MGMT_STATUS_INVALID_PARAMS,
5364 static const struct generic_data remove_advertising_success_1 = {
5365 .send_opcode = MGMT_OP_REMOVE_ADVERTISING,
5366 .send_param = remove_advertising_param_1,
5367 .send_len = sizeof(remove_advertising_param_1),
5368 .expect_status = MGMT_STATUS_SUCCESS,
5369 .expect_param = remove_advertising_param_1,
5370 .expect_len = sizeof(remove_advertising_param_1),
5371 .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
5372 .expect_alt_ev_param = advertising_instance1_param,
5373 .expect_alt_ev_len = sizeof(advertising_instance1_param),
5374 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_ENABLE,
5375 .expect_hci_param = set_adv_off_param,
5376 .expect_hci_len = sizeof(set_adv_off_param),
5379 static const struct generic_data remove_advertising_success_2 = {
5380 .send_opcode = MGMT_OP_REMOVE_ADVERTISING,
5381 .send_param = remove_advertising_param_2,
5382 .send_len = sizeof(remove_advertising_param_2),
5383 .expect_status = MGMT_STATUS_SUCCESS,
5384 .expect_param = remove_advertising_param_2,
5385 .expect_len = sizeof(remove_advertising_param_2),
5386 .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
5387 .expect_alt_ev_param = advertising_instance1_param,
5388 .expect_alt_ev_len = sizeof(advertising_instance1_param),
5389 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_ENABLE,
5390 .expect_hci_param = set_adv_off_param,
5391 .expect_hci_len = sizeof(set_adv_off_param),
5394 static const struct generic_data multi_advertising_switch = {
5395 .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
5396 .expect_alt_ev_param = advertising_instance1_param,
5397 .expect_alt_ev_len = sizeof(advertising_instance1_param),
5398 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
5399 .expect_hci_param = set_adv_data_test2,
5400 .expect_hci_len = sizeof(set_adv_data_test2),
5403 static const struct generic_data multi_advertising_add_second = {
5404 .send_opcode = MGMT_OP_ADD_ADVERTISING,
5405 .send_param = add_advertising_param_test2,
5406 .send_len = sizeof(add_advertising_param_test2),
5407 .expect_param = advertising_instance2_param,
5408 .expect_len = sizeof(advertising_instance2_param),
5409 .expect_status = MGMT_STATUS_SUCCESS,
5410 .expect_alt_ev = MGMT_EV_ADVERTISING_ADDED,
5411 .expect_alt_ev_param = advertising_instance2_param,
5412 .expect_alt_ev_len = sizeof(advertising_instance2_param),
5413 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
5414 .expect_hci_param = set_adv_data_test2,
5415 .expect_hci_len = sizeof(set_adv_data_test2),
5418 /* based on G-Tag ADV_DATA */
5419 static const uint8_t adv_data_invalid_significant_len[] = { 0x02, 0x01, 0x06,
5420 0x0d, 0xff, 0x80, 0x01, 0x02, 0x15, 0x12, 0x34, 0x80, 0x91,
5421 0xd0, 0xf2, 0xbb, 0xc5, 0x03, 0x02, 0x0f, 0x18, 0x00, 0x00,
5422 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
5424 static const char device_found_valid[] = { 0x00, 0x00, 0x01, 0x01, 0xaa, 0x00,
5425 0x01, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x02, 0x01,
5426 0x06, 0x0d, 0xff, 0x80, 0x01, 0x02, 0x15, 0x12, 0x34, 0x80,
5427 0x91, 0xd0, 0xf2, 0xbb, 0xc5, 0x03, 0x02, 0x0f, 0x18 };
5429 static const struct generic_data device_found_gtag = {
5430 .setup_settings = settings_powered_le,
5431 .send_opcode = MGMT_OP_START_DISCOVERY,
5432 .send_param = start_discovery_le_param,
5433 .send_len = sizeof(start_discovery_le_param),
5434 .expect_status = MGMT_STATUS_SUCCESS,
5435 .expect_param = start_discovery_le_param,
5436 .expect_len = sizeof(start_discovery_le_param),
5437 .expect_alt_ev = MGMT_EV_DEVICE_FOUND,
5438 .expect_alt_ev_param = device_found_valid,
5439 .expect_alt_ev_len = sizeof(device_found_valid),
5441 .adv_data_len = sizeof(adv_data_invalid_significant_len),
5442 .adv_data = adv_data_invalid_significant_len,
5445 static const uint8_t adv_data_invalid_field_len[] = { 0x02, 0x01, 0x01,
5446 0x05, 0x09, 0x74, 0x65, 0x73, 0x74,
5447 0xa0, 0xff, 0x01, 0x02, 0x03, 0x04, 0x05};
5449 static const char device_found_valid2[] = { 0x00, 0x00, 0x01, 0x01, 0xaa, 0x00,
5450 0x01, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x02, 0x01,
5451 0x01, 0x05, 0x09, 0x74, 0x65, 0x73, 0x74};
5453 static const struct generic_data device_found_invalid_field = {
5454 .setup_settings = settings_powered_le,
5455 .send_opcode = MGMT_OP_START_DISCOVERY,
5456 .send_param = start_discovery_le_param,
5457 .send_len = sizeof(start_discovery_le_param),
5458 .expect_status = MGMT_STATUS_SUCCESS,
5459 .expect_param = start_discovery_le_param,
5460 .expect_len = sizeof(start_discovery_le_param),
5461 .expect_alt_ev = MGMT_EV_DEVICE_FOUND,
5462 .expect_alt_ev_param = device_found_valid2,
5463 .expect_alt_ev_len = sizeof(device_found_valid2),
5465 .adv_data_len = sizeof(adv_data_invalid_field_len),
5466 .adv_data = adv_data_invalid_field_len,
5469 static const struct generic_data read_local_oob_not_powered_test = {
5470 .send_opcode = MGMT_OP_READ_LOCAL_OOB_DATA,
5471 .expect_status = MGMT_STATUS_NOT_POWERED,
5474 static const struct generic_data read_local_oob_invalid_param_test = {
5475 .send_opcode = MGMT_OP_READ_LOCAL_OOB_DATA,
5476 .send_param = dummy_data,
5477 .send_len = sizeof(dummy_data),
5478 .expect_status = MGMT_STATUS_INVALID_PARAMS,
5481 static const struct generic_data read_local_oob_invalid_index_test = {
5482 .send_index_none = true,
5483 .send_opcode = MGMT_OP_READ_LOCAL_OOB_DATA,
5484 .expect_status = MGMT_STATUS_INVALID_INDEX,
5487 static const struct generic_data read_local_oob_legacy_pairing_test = {
5488 .setup_settings = settings_powered,
5489 .send_opcode = MGMT_OP_READ_LOCAL_OOB_DATA,
5490 .expect_status = MGMT_STATUS_NOT_SUPPORTED,
5493 static const struct generic_data read_local_oob_success_ssp_test = {
5494 .setup_settings = settings_powered_ssp,
5495 .send_opcode = MGMT_OP_READ_LOCAL_OOB_DATA,
5496 .expect_status = MGMT_STATUS_SUCCESS,
5497 .expect_ignore_param = true,
5498 .expect_hci_command = BT_HCI_CMD_READ_LOCAL_OOB_DATA,
5501 static const struct generic_data read_local_oob_success_sc_test = {
5502 .setup_settings = settings_powered_sc,
5503 .send_opcode = MGMT_OP_READ_LOCAL_OOB_DATA,
5504 .expect_status = MGMT_STATUS_SUCCESS,
5505 .expect_ignore_param = true,
5506 .expect_hci_command = BT_HCI_CMD_READ_LOCAL_OOB_EXT_DATA,
5509 static const uint8_t oob_type_bredr[] = { 0x01 };
5510 static const struct generic_data read_local_oob_ext_invalid_index_test = {
5511 .send_index_none = true,
5512 .send_opcode = MGMT_OP_READ_LOCAL_OOB_EXT_DATA,
5513 .send_param = oob_type_bredr,
5514 .send_len = sizeof(oob_type_bredr),
5515 .expect_status = MGMT_STATUS_INVALID_INDEX,
5518 static const struct generic_data read_local_oob_ext_legacy_pairing_test = {
5519 .setup_settings = settings_powered,
5520 .send_opcode = MGMT_OP_READ_LOCAL_OOB_EXT_DATA,
5521 .send_param = oob_type_bredr,
5522 .send_len = sizeof(oob_type_bredr),
5523 .expect_ignore_param = true,
5524 .expect_status = MGMT_STATUS_NOT_SUPPORTED,
5527 static const struct generic_data read_local_oob_ext_success_ssp_test = {
5528 .setup_settings = settings_powered_ssp,
5529 .send_opcode = MGMT_OP_READ_LOCAL_OOB_EXT_DATA,
5530 .send_param = oob_type_bredr,
5531 .send_len = sizeof(oob_type_bredr),
5532 .expect_status = MGMT_STATUS_SUCCESS,
5533 .expect_ignore_param = true,
5534 .expect_hci_command = BT_HCI_CMD_READ_LOCAL_OOB_DATA,
5537 static const struct generic_data read_local_oob_ext_success_sc_test = {
5538 .setup_settings = settings_powered_sc,
5539 .send_opcode = MGMT_OP_READ_LOCAL_OOB_EXT_DATA,
5540 .send_param = oob_type_bredr,
5541 .send_len = sizeof(oob_type_bredr),
5542 .expect_status = MGMT_STATUS_SUCCESS,
5543 .expect_ignore_param = true,
5544 .expect_hci_command = BT_HCI_CMD_READ_LOCAL_OOB_EXT_DATA,
5547 static const uint8_t le_states_conn_peripheral_adv_connectable[] = {
5548 0x00, 0x00, 0x20, 0x00, 0x40, 0x00, 0x00, 0x00};
5549 static const uint8_t le_states_conn_peripheral_adv_non_connectable[] = {
5550 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00};
5551 static const uint8_t le_states_conn_central_adv_connectable[] = {
5552 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00};
5553 static const uint8_t le_states_conn_central_adv_non_connectable[] = {
5554 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00};
5556 static const struct generic_data conn_peripheral_adv_connectable_test = {
5557 .setup_le_states = true,
5558 .le_states = le_states_conn_peripheral_adv_connectable,
5559 .setup_settings = settings_powered_le,
5560 .client_enable_le = true
5563 static const struct generic_data conn_peripheral_adv_non_connectable_test = {
5564 .setup_le_states = true,
5565 .le_states = le_states_conn_peripheral_adv_non_connectable,
5566 .setup_settings = settings_powered_le,
5567 .client_enable_le = true
5570 static const struct generic_data conn_central_adv_connectable_test = {
5571 .setup_le_states = true,
5572 .le_states = le_states_conn_central_adv_connectable,
5573 .setup_settings = settings_powered_le,
5574 .client_enable_le = true,
5575 .client_enable_adv = 1
5578 static const struct generic_data conn_central_adv_non_connectable_test = {
5579 .setup_le_states = true,
5580 .le_states = le_states_conn_central_adv_non_connectable,
5581 .setup_settings = settings_powered_le,
5582 .client_enable_le = true,
5583 .client_enable_adv = 1
5586 static const char ext_ctrl_info1[] = {
5587 0x00, 0x00, 0x00, 0x01, 0xaa, 0x00, /* btaddr */
5589 0xf1, 0x05, /* manufacturer */
5590 0xff, 0xbf, 0x01, 0x00, /* supported settings */
5591 0x80, 0x00, 0x00, 0x00, /* current settings */
5592 0x09, 0x00, /* eir length */
5593 0x04, /* dev class length */
5594 0x0d, /* dev class info */
5597 0x00, /* service classes */
5598 0x01, /* complete name data length */
5599 0x09, /* complete name flag */
5600 0x01, /* short name data length */
5601 0x08, /* short name flag */
5604 static const struct generic_data read_ext_ctrl_info1 = {
5605 .send_opcode = MGMT_OP_READ_EXT_INFO,
5606 .expect_status = MGMT_STATUS_SUCCESS,
5607 .expect_param = ext_ctrl_info1,
5608 .expect_len = sizeof(ext_ctrl_info1),
5611 static const char set_dev_class1[] = { 0x03, 0xe0 };
5613 static const struct setup_mgmt_cmd set_dev_class_cmd_arr1[] = {
5615 .send_opcode = MGMT_OP_SET_DEV_CLASS,
5616 .send_param = set_dev_class1,
5617 .send_len = sizeof(set_dev_class1),
5620 .send_opcode = MGMT_OP_ADD_UUID,
5621 .send_param = add_spp_uuid_param,
5622 .send_len = sizeof(add_spp_uuid_param),
5624 { /* last element should always have opcode 0x00 */
5625 .send_opcode = 0x00,
5631 static const char ext_ctrl_info2[] = {
5632 0x00, 0x00, 0x00, 0x01, 0xaa, 0x00, /* btaddr */
5634 0xf1, 0x05, /* manufacturer */
5635 0xff, 0xbf, 0x01, 0x00, /* supported settings */
5636 0x81, 0x02, 0x00, 0x00, /* current settings */
5637 0x0D, 0x00, /* eir length */
5638 0x04, /* dev class length */
5639 0x0d, /* dev class info */
5642 0x00, /* service classes */
5643 0x03, /* appearance length */
5644 0x19, /* EIR_APPEARANCE */
5645 0x00, /* Appearance value */
5647 0x01, /* complete name data length */
5648 0x09, /* complete name flag */
5649 0x01, /* short name data length */
5650 0x08, /* short name flag */
5653 static const struct generic_data read_ext_ctrl_info2 = {
5654 .setup_settings = settings_powered_le,
5655 .setup_mgmt_cmd_arr = set_dev_class_cmd_arr1,
5656 .send_opcode = MGMT_OP_READ_EXT_INFO,
5657 .expect_status = MGMT_STATUS_SUCCESS,
5658 .expect_param = ext_ctrl_info2,
5659 .expect_len = sizeof(ext_ctrl_info2),
5662 static const char ext_ctrl_info3[] = {
5663 0x00, 0x00, 0x00, 0x01, 0xaa, 0x00, /* btaddr */
5665 0xf1, 0x05, /* manufacturer */
5666 0xff, 0xbf, 0x01, 0x00, /* supported settings */
5667 0x80, 0x02, 0x00, 0x00, /* current settings */
5668 0x16, 0x00, /* eir length */
5669 0x04, /* dev class length */
5670 0x0d, /* dev class info */
5673 0x00, /* service classes */
5674 0x03, /* appearance length */
5675 0x19, /* EIR_APPEARANCE */
5676 0x00, /* Appearance value */
5678 0x0A, /* Local name length */
5679 0x09, /* Complete name */
5680 0x54, 0x65, 0x73, 0x74,
5681 0x20, 0x6E, 0x61, 0x6D, 0x65, /* "Test name" */
5682 0x01, /* short name data length */
5683 0x08, /* short name flag */
5686 static const struct generic_data read_ext_ctrl_info3 = {
5687 .setup_settings = settings_le,
5688 .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
5689 .setup_send_param = set_local_name_param,
5690 .setup_send_len = sizeof(set_local_name_param),
5691 .send_opcode = MGMT_OP_READ_EXT_INFO,
5692 .expect_status = MGMT_STATUS_SUCCESS,
5693 .expect_param = ext_ctrl_info3,
5694 .expect_len = sizeof(ext_ctrl_info3),
5697 static const char ext_ctrl_info4[] = {
5698 0x00, 0x00, 0x00, 0x01, 0xaa, 0x00, /* btaddr */
5700 0xf1, 0x05, /* manufacturer */
5701 0xff, 0xbf, 0x01, 0x00, /* supported settings */
5702 0x80, 0x02, 0x00, 0x00, /* current settings */
5703 0x1a, 0x00, /* eir length */
5704 0x04, /* dev class length */
5705 0x0d, /* dev class info */
5708 0x00, /* service classes */
5709 0x03, /* appearance length */
5710 0x19, /* EIR_APPEARANCE */
5711 0x00, /* Appearance value */
5713 0x0A, /* Complete Local name len */
5714 0x09, /* Complete name */
5715 0x54, 0x65, 0x73, 0x74,
5716 0x20, 0x6E, 0x61, 0x6D, 0x65, /* "Test name" */
5717 0x05, /* Short Local name len */
5718 0x08, /* Short name */
5719 0x54, 0x65, 0x73, 0x74, /* "Test" */
5722 static const struct generic_data read_ext_ctrl_info4 = {
5723 .setup_settings = settings_le,
5724 .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
5725 .setup_send_param = &set_local_name_cp,
5726 .setup_send_len = sizeof(set_local_name_cp),
5727 .send_opcode = MGMT_OP_READ_EXT_INFO,
5728 .expect_status = MGMT_STATUS_SUCCESS,
5729 .expect_param = ext_ctrl_info4,
5730 .expect_len = sizeof(ext_ctrl_info4),
5733 static const struct setup_mgmt_cmd set_dev_class_cmd_arr2[] = {
5735 .send_opcode = MGMT_OP_SET_DEV_CLASS,
5736 .send_param = set_dev_class1,
5737 .send_len = sizeof(set_dev_class1),
5740 .send_opcode = MGMT_OP_ADD_UUID,
5741 .send_param = add_spp_uuid_param,
5742 .send_len = sizeof(add_spp_uuid_param),
5745 .send_opcode = MGMT_OP_SET_LOCAL_NAME,
5746 .send_param = &set_local_name_cp,
5747 .send_len = sizeof(set_local_name_cp),
5749 { /* last element should always have opcode 0x00 */
5750 .send_opcode = 0x00,
5756 static const char ext_ctrl_info5[] = {
5757 0x00, 0x00, 0x00, 0x01, 0xaa, 0x00, /* btaddr */
5759 0xf1, 0x05, /* manufacturer */
5760 0xff, 0xbf, 0x01, 0x00, /* supported settings */
5761 0x81, 0x02, 0x00, 0x00, /* current settings */
5762 0x1a, 0x00, /* eir len */
5763 0x04, /* dev class len */
5764 0x0d, /* dev class info */
5767 0x00, /* service classes */
5768 0x03, /* appearance length */
5769 0x19, /* EIR_APPEARANCE */
5770 0x00, /* Appearance value */
5772 0x0A, /* Complete Local name len */
5773 0x09, /* Complete name */
5774 0x54, 0x65, 0x73, 0x74,
5775 0x20, 0x6E, 0x61, 0x6D, 0x65, /* "Test name" */
5776 0x05, /* Short Local name len */
5777 0x08, /* Short name */
5778 0x54, 0x65, 0x73, 0x74, /* "Test" */
5781 static const struct generic_data read_ext_ctrl_info5 = {
5782 .setup_settings = settings_powered_le,
5783 .setup_mgmt_cmd_arr = set_dev_class_cmd_arr2,
5784 .send_opcode = MGMT_OP_READ_EXT_INFO,
5785 .expect_status = MGMT_STATUS_SUCCESS,
5786 .expect_param = ext_ctrl_info5,
5787 .expect_len = sizeof(ext_ctrl_info5),
5790 static const struct generic_data read_controller_cap_invalid_param_test = {
5791 .send_opcode = MGMT_OP_READ_CONTROLLER_CAP,
5792 .send_param = dummy_data,
5793 .send_len = sizeof(dummy_data),
5794 .expect_status = MGMT_STATUS_INVALID_PARAMS,
5797 static const struct generic_data read_controller_cap_success = {
5798 .send_opcode = MGMT_OP_READ_CONTROLLER_CAP,
5799 .expect_ignore_param = true,
5800 .expect_status = MGMT_STATUS_SUCCESS,
5803 static const char ext_adv_params_valid[] = {
5804 0x01, /* instance */
5805 0x00, 0xC0, 0x00, 0x00, /* flags, use tx power and intervals */
5806 0x00, 0x00, /* duration */
5807 0x00, 0x00, /* timeout */
5808 0xA0, 0x00, 0x00, 0x00, /* min_interval */
5809 0xA0, 0x00, 0x00, 0x00, /* max_interval */
5810 0x7f, /* tx_power */
5813 static const char ext_adv_hci_params_valid[] = {
5815 0x10, 0x00, /* evt_properties */
5816 0xA0, 0x00, 0x00, /* min_interval */
5817 0xA0, 0x00, 0x00, /* max_interval */
5818 0x07, /* channel_map */
5819 0x01, /* own_addr_type */
5820 0x00, /* peer_addr_type */
5821 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
5822 0x00, /* filter_policy */
5823 0x7f, /* tx_power */
5824 0x01, /* primary_phy */
5825 0x00, /* secondary_max_skip */
5826 0x01, /* secondary_phy */
5828 0x00, /* notif_enable */
5831 static const char ext_adv_params_mgmt_rsp_valid_50[] = {
5832 0x01, /* instance */
5833 0x00, /* tx_power defaults to 0 on BT5 platform*/
5834 0x1f, /* max_adv_data_len */
5835 0x1f, /* max_scan_rsp_len */
5838 static const char ext_adv_params_mgmt_rsp_valid[] = {
5839 0x01, /* instance */
5840 0x7f, /* tx_power */
5841 0x1f, /* max_adv_data_len */
5842 0x1f, /* max_scan_rsp_len */
5845 static const char ext_adv_data_mgmt_rsp_valid[] = {
5846 0x01, /* instance */
5849 static const uint8_t ext_adv_data_valid[] = {
5850 0x01, /* instance */
5851 0x04, /* Ad data len */
5852 0x06, /* Scan response data len */
5853 0x03, /* Section length */
5854 0x19, /* GAP Appearance */
5857 0x05, /* Section length */
5858 0x08, /* ad type Short Name */
5865 static const char ext_adv_hci_ad_data_valid[] = {
5867 0x03, /* operation */
5868 0x01, /* minimize fragmentation */
5869 0x04, /* data length */
5870 0x03, /* Section length */
5871 0x19, /* GAP Appearance */
5876 static const char ext_adv_hci_scan_rsp_data_valid[] = {
5878 0x03, /* operation */
5879 0x01, /* minimize fragmentation */
5881 0x05, /* Section length */
5882 0x08, /* ad type Short Name */
5889 static const uint8_t ext_adv_data_invalid[] = {
5890 0x01, /* instance */
5891 0x04, /* Ad data len */
5892 0x06, /* Scan response data len */
5893 0x03, /* Section length */
5894 0x19, /* GAP Appearance */
5897 0x07, /* Section length purposefully two octets too long */
5898 0x08, /* ad type Short Name */
5905 static const struct generic_data adv_params_fail_unpowered = {
5906 .setup_settings = settings_le, /* Unpowered */
5907 .send_opcode = MGMT_OP_ADD_EXT_ADV_PARAMS,
5908 .send_param = ext_adv_params_valid,
5909 .send_len = sizeof(ext_adv_params_valid),
5910 .expect_status = MGMT_STATUS_REJECTED,
5913 static const struct generic_data adv_params_fail_invalid_params = {
5914 .setup_settings = settings_powered_le,
5915 .send_opcode = MGMT_OP_ADD_EXT_ADV_PARAMS,
5916 .send_param = dummy_data,
5917 .send_len = sizeof(dummy_data),
5918 .expect_status = MGMT_STATUS_INVALID_PARAMS,
5921 static const struct generic_data adv_params_success = {
5922 .setup_settings = settings_powered_le,
5923 .send_opcode = MGMT_OP_ADD_EXT_ADV_PARAMS,
5924 .send_param = ext_adv_params_valid,
5925 .send_len = sizeof(ext_adv_params_valid),
5926 .expect_param = ext_adv_params_mgmt_rsp_valid,
5927 .expect_len = sizeof(ext_adv_params_mgmt_rsp_valid),
5928 .expect_status = MGMT_STATUS_SUCCESS,
5931 static const struct generic_data adv_params_success_50 = {
5932 .setup_settings = settings_powered_le,
5933 .send_opcode = MGMT_OP_ADD_EXT_ADV_PARAMS,
5934 .send_param = ext_adv_params_valid,
5935 .send_len = sizeof(ext_adv_params_valid),
5936 .expect_status = MGMT_STATUS_SUCCESS,
5937 .expect_param = ext_adv_params_mgmt_rsp_valid_50,
5938 .expect_len = sizeof(ext_adv_params_mgmt_rsp_valid_50),
5939 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
5940 .expect_hci_param = ext_adv_hci_params_valid,
5941 .expect_hci_len = sizeof(ext_adv_hci_params_valid),
5944 static const struct generic_data adv_data_fail_no_params = {
5945 .setup_settings = settings_powered_le,
5946 .send_opcode = MGMT_OP_ADD_EXT_ADV_DATA,
5947 .send_param = ext_adv_data_valid,
5948 .send_len = sizeof(ext_adv_data_valid),
5949 .expect_status = MGMT_STATUS_INVALID_PARAMS,
5952 static const struct generic_data adv_data_success = {
5953 .setup_settings = settings_powered_le,
5954 .send_opcode = MGMT_OP_ADD_EXT_ADV_DATA,
5955 .send_param = ext_adv_data_valid,
5956 .send_len = sizeof(ext_adv_data_valid),
5957 .expect_status = MGMT_STATUS_SUCCESS,
5958 .expect_param = ext_adv_data_mgmt_rsp_valid,
5959 .expect_len = sizeof(ext_adv_data_mgmt_rsp_valid),
5960 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
5961 .expect_hci_param = ext_adv_hci_ad_data_valid,
5962 .expect_hci_len = sizeof(ext_adv_hci_ad_data_valid),
5965 static const struct generic_data adv_scan_rsp_success = {
5966 .setup_settings = settings_powered_le,
5967 .send_opcode = MGMT_OP_ADD_EXT_ADV_DATA,
5968 .send_param = ext_adv_data_valid,
5969 .send_len = sizeof(ext_adv_data_valid),
5970 .expect_status = MGMT_STATUS_SUCCESS,
5971 .expect_param = ext_adv_data_mgmt_rsp_valid,
5972 .expect_len = sizeof(ext_adv_data_mgmt_rsp_valid),
5973 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_RSP_DATA,
5974 .expect_hci_param = ext_adv_hci_scan_rsp_data_valid,
5975 .expect_hci_len = sizeof(ext_adv_hci_scan_rsp_data_valid),
5978 static const struct generic_data adv_data_invalid_params = {
5979 .setup_settings = settings_powered_le,
5980 .send_opcode = MGMT_OP_ADD_EXT_ADV_DATA,
5981 .send_param = ext_adv_data_invalid,
5982 .send_len = sizeof(ext_adv_data_invalid),
5983 .expect_status = MGMT_STATUS_INVALID_PARAMS,
5986 static const uint8_t set_dev_id_param_success_1[] = {
5987 0x01, /* Source - 0x0001 (Bluetooth SIG) */
5997 static const char write_eir_set_dev_id_success_1[241] = {
5998 0x00, 0x02, 0x0a, 0x00, 0x09, 0x10, 0x01, 0x00,
5999 0x02, 0x00, 0xcd, 0xab, 0x34, 0x12 };
6001 static const struct generic_data set_dev_id_success_1 = {
6002 .setup_settings = settings_powered_ssp,
6003 .send_opcode = MGMT_OP_SET_DEVICE_ID,
6004 .send_param = set_dev_id_param_success_1,
6005 .send_len = sizeof(set_dev_id_param_success_1),
6006 .expect_status = MGMT_STATUS_SUCCESS,
6007 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
6008 .expect_hci_param = write_eir_set_dev_id_success_1,
6009 .expect_hci_len = sizeof(write_eir_set_dev_id_success_1),
6012 static const uint8_t set_dev_id_param_success_2[] = {
6013 0x02, /* Source - 0x0001 (Bluetooth SIG) */
6022 static const char write_eir_set_dev_id_success_2[241] = {
6023 0x00, 0x02, 0x0a, 0x00, 0x09, 0x10, 0x02, 0x00,
6024 0x02, 0x00, 0xcd, 0xab, 0x34, 0x12 };
6026 static const struct generic_data set_dev_id_success_2 = {
6027 .setup_settings = settings_powered_ssp,
6028 .send_opcode = MGMT_OP_SET_DEVICE_ID,
6029 .send_param = set_dev_id_param_success_2,
6030 .send_len = sizeof(set_dev_id_param_success_2),
6031 .expect_status = MGMT_STATUS_SUCCESS,
6032 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
6033 .expect_hci_param = write_eir_set_dev_id_success_2,
6034 .expect_hci_len = sizeof(write_eir_set_dev_id_success_2),
6037 static const uint8_t set_dev_id_param_disable[8] = { 0x00 };
6039 static const struct generic_data set_dev_id_disable = {
6040 .setup_settings = settings_powered_ssp,
6041 .send_opcode = MGMT_OP_SET_DEVICE_ID,
6042 .send_param = set_dev_id_param_disable,
6043 .send_len = sizeof(set_dev_id_param_disable),
6044 .expect_status = MGMT_STATUS_SUCCESS,
6047 static const struct generic_data set_dev_id_power_off_on = {
6048 .setup_settings = settings_ssp,
6049 .setup_send_opcode = MGMT_OP_SET_DEVICE_ID,
6050 .setup_send_param = set_dev_id_param_success_1,
6051 .setup_send_len = sizeof(set_dev_id_param_success_1),
6052 .send_opcode = MGMT_OP_SET_POWERED,
6053 .send_param = set_powered_on_param,
6054 .send_len = sizeof(set_powered_on_param),
6055 .expect_status = MGMT_STATUS_SUCCESS,
6056 .expect_param = set_ssp_settings_param_2,
6057 .expect_len = sizeof(set_ssp_settings_param_2),
6058 .expect_settings_set = MGMT_SETTING_POWERED,
6059 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
6060 .expect_hci_param = write_eir_set_dev_id_success_1,
6061 .expect_hci_len = sizeof(write_eir_set_dev_id_success_1),
6064 static const struct generic_data set_dev_id_ssp_off_on = {
6065 .setup_settings = settings_powered,
6066 .setup_send_opcode = MGMT_OP_SET_DEVICE_ID,
6067 .setup_send_param = set_dev_id_param_success_1,
6068 .setup_send_len = sizeof(set_dev_id_param_success_1),
6069 .send_opcode = MGMT_OP_SET_SSP,
6070 .send_param = set_ssp_on_param,
6071 .send_len = sizeof(set_ssp_on_param),
6072 .expect_status = MGMT_STATUS_SUCCESS,
6073 .expect_param = set_ssp_settings_param_2,
6074 .expect_len = sizeof(set_ssp_settings_param_2),
6075 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
6076 .expect_hci_param = write_eir_set_dev_id_success_1,
6077 .expect_hci_len = sizeof(write_eir_set_dev_id_success_1),
6080 static const uint8_t set_dev_id_invalid_1[] = {
6091 static const struct generic_data set_dev_id_invalid_param = {
6092 .setup_settings = settings_powered_ssp,
6093 .send_opcode = MGMT_OP_SET_DEVICE_ID,
6094 .send_param = set_dev_id_invalid_1,
6095 .send_len = sizeof(set_dev_id_invalid_1),
6096 .expect_status = MGMT_STATUS_INVALID_PARAMS,
6099 static void client_cmd_complete(uint16_t opcode, uint8_t status,
6100 const void *param, uint8_t len,
6103 struct test_data *data = tester_get_data();
6104 const struct generic_data *test = data->test_data;
6105 struct bthost *bthost;
6107 bthost = hciemu_client_get_host(data->hciemu);
6110 case BT_HCI_CMD_WRITE_SCAN_ENABLE:
6111 case BT_HCI_CMD_LE_SET_ADV_ENABLE:
6112 case BT_HCI_CMD_LE_SET_EXT_ADV_ENABLE:
6113 tester_print("Client set connectable: %s (0x%02x)",
6114 mgmt_errstr(status), status);
6115 if (!status && test->client_enable_ssp) {
6116 bthost_write_ssp_mode(bthost, 0x01);
6120 case BT_HCI_CMD_WRITE_SIMPLE_PAIRING_MODE:
6121 tester_print("Client enable SSP: %s (0x%02x)",
6122 mgmt_errstr(status), status);
6129 tester_setup_failed();
6131 test_setup_condition_complete(data);
6134 static void setup_bthost(void)
6136 struct test_data *data = tester_get_data();
6137 const struct generic_data *test = data->test_data;
6138 struct bthost *bthost;
6140 bthost = hciemu_client_get_host(data->hciemu);
6141 bthost_set_cmd_complete_cb(bthost, client_cmd_complete, data);
6142 test_add_setup_condition(data);
6144 if (data->hciemu_type == HCIEMU_TYPE_LE ||
6145 test->client_enable_adv) {
6146 if (data->hciemu_type >= HCIEMU_TYPE_BREDRLE50) {
6147 bthost_set_ext_adv_params(bthost);
6148 bthost_set_ext_adv_enable(bthost, 0x01);
6150 bthost_set_adv_enable(bthost, 0x01);
6152 bthost_write_scan_enable(bthost, 0x03);
6155 static void setup_pairing_acceptor(const void *test_data)
6157 struct test_data *data = tester_get_data();
6158 const struct generic_data *test = data->test_data;
6163 mgmt_send(data->mgmt, MGMT_OP_SET_IO_CAPABILITY, data->mgmt_index,
6164 sizeof(test->io_cap), &test->io_cap,
6170 static void setup_powered_callback(uint8_t status, uint16_t length,
6171 const void *param, void *user_data)
6173 if (status != MGMT_STATUS_SUCCESS) {
6174 tester_setup_failed();
6178 tester_print("Controller powered on");
6183 static void setup_class(const void *test_data)
6185 struct test_data *data = tester_get_data();
6186 unsigned char param[] = { 0x01 };
6187 unsigned char class_param[] = { 0x01, 0x0c };
6189 tester_print("Setting device class and powering on");
6191 mgmt_send(data->mgmt, MGMT_OP_SET_DEV_CLASS, data->mgmt_index,
6192 sizeof(class_param), class_param,
6195 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
6196 sizeof(param), param,
6197 setup_powered_callback, NULL, NULL);
6200 static void discovering_event(uint16_t index, uint16_t length,
6201 const void *param, void *user_data)
6203 struct test_data *data = tester_get_data();
6204 const struct mgmt_ev_discovering *ev = param;
6206 mgmt_unregister(data->mgmt, data->mgmt_discov_ev_id);
6208 if (length != sizeof(*ev)) {
6209 tester_warn("Incorrect discovering event length");
6210 tester_setup_failed();
6214 if (!ev->discovering) {
6215 tester_warn("Unexpected discovery stopped event");
6216 tester_setup_failed();
6220 tester_setup_complete();
6223 static void setup_discovery_callback(uint8_t status, uint16_t length,
6224 const void *param, void *user_data)
6226 if (status != MGMT_STATUS_SUCCESS) {
6227 tester_setup_failed();
6231 tester_print("Discovery started");
6234 static void setup_start_discovery(const void *test_data)
6236 struct test_data *data = tester_get_data();
6237 const struct generic_data *test = data->test_data;
6238 const void *send_param = test->setup_send_param;
6239 uint16_t send_len = test->setup_send_len;
6242 id = mgmt_register(data->mgmt, MGMT_EV_DISCOVERING, data->mgmt_index,
6243 discovering_event, NULL, NULL);
6244 data->mgmt_discov_ev_id = id;
6246 mgmt_send(data->mgmt, test->setup_send_opcode, data->mgmt_index,
6247 send_len, send_param, setup_discovery_callback,
6251 static void setup_multi_uuid32(const void *test_data)
6253 struct test_data *data = tester_get_data();
6254 unsigned char param[] = { 0x01 };
6256 tester_print("Powering on controller (with 32-bit UUID)");
6258 mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
6259 sizeof(param), param, NULL, NULL, NULL);
6261 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
6262 sizeof(add_uuid32_param_1), add_uuid32_param_1,
6264 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
6265 sizeof(add_uuid32_param_2), add_uuid32_param_2,
6267 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
6268 sizeof(add_uuid32_param_3), add_uuid32_param_3,
6271 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
6272 sizeof(param), param,
6273 setup_powered_callback, NULL, NULL);
6276 static void setup_multi_uuid32_2(const void *test_data)
6278 struct test_data *data = tester_get_data();
6279 unsigned char param[] = { 0x01 };
6280 unsigned char uuid_param[] = {
6281 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
6282 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6286 tester_print("Powering on controller (with many 32-bit UUIDs)");
6288 mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
6289 sizeof(param), param, NULL, NULL, NULL);
6291 for (i = 0; i < 58; i++) {
6292 uint32_t val = htobl(0xffffffff - i);
6293 memcpy(&uuid_param[12], &val, sizeof(val));
6294 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
6295 sizeof(uuid_param), uuid_param,
6299 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
6300 sizeof(param), param,
6301 setup_powered_callback, NULL, NULL);
6304 static void setup_multi_uuid128(const void *test_data)
6306 struct test_data *data = tester_get_data();
6307 unsigned char param[] = { 0x01 };
6309 tester_print("Powering on controller (with 128-bit UUID)");
6311 mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
6312 sizeof(param), param, NULL, NULL, NULL);
6314 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
6315 sizeof(add_uuid128_param_1), add_uuid128_param_1,
6318 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
6319 sizeof(param), param,
6320 setup_powered_callback, NULL, NULL);
6323 static void setup_multi_uuid128_2(const void *test_data)
6325 struct test_data *data = tester_get_data();
6326 unsigned char param[] = { 0x01 };
6327 unsigned char uuid_param[] = {
6328 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
6329 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00,
6333 tester_print("Powering on controller (with many 128-bit UUIDs)");
6335 mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
6336 sizeof(param), param, NULL, NULL, NULL);
6338 for (i = 0; i < 13; i++) {
6340 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
6341 sizeof(uuid_param), uuid_param,
6345 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
6346 sizeof(param), param,
6347 setup_powered_callback, NULL, NULL);
6350 static void setup_multi_uuid16(const void *test_data)
6352 struct test_data *data = tester_get_data();
6353 unsigned char param[] = { 0x01 };
6355 tester_print("Powering on controller (with SPP UUID)");
6357 mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
6358 sizeof(param), param, NULL, NULL, NULL);
6360 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
6361 sizeof(add_spp_uuid_param), add_spp_uuid_param,
6363 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
6364 sizeof(add_dun_uuid_param), add_dun_uuid_param,
6366 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
6367 sizeof(add_sync_uuid_param), add_sync_uuid_param,
6370 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
6371 sizeof(param), param,
6372 setup_powered_callback, NULL, NULL);
6375 static void setup_multi_uuid16_power_off(const void *test_data)
6377 struct test_data *data = tester_get_data();
6378 unsigned char param[] = { 0x01 };
6380 tester_print("Adding UUIDs without powering on");
6382 mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
6383 sizeof(param), param, NULL, NULL, NULL);
6385 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
6386 sizeof(add_spp_uuid_param), add_spp_uuid_param,
6388 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
6389 sizeof(add_dun_uuid_param), add_dun_uuid_param,
6391 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
6392 sizeof(add_sync_uuid_param), add_sync_uuid_param,
6398 static void setup_multi_uuid16_power_off_remove(const void *test_data)
6400 struct test_data *data = tester_get_data();
6401 unsigned char param[] = { 0x01 };
6403 tester_print("Adding UUIDs without powering on and remove UUID");
6405 mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
6406 sizeof(param), param, NULL, NULL, NULL);
6408 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
6409 sizeof(add_spp_uuid_param), add_spp_uuid_param,
6411 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
6412 sizeof(add_dun_uuid_param), add_dun_uuid_param,
6414 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
6415 sizeof(add_sync_uuid_param), add_sync_uuid_param,
6418 mgmt_send(data->mgmt, MGMT_OP_REMOVE_UUID, data->mgmt_index,
6419 sizeof(remove_dun_uuid_param), remove_dun_uuid_param,
6425 static void setup_multi_uuid16_2(const void *test_data)
6427 struct test_data *data = tester_get_data();
6428 unsigned char param[] = { 0x01 };
6429 unsigned char uuid_param[] = {
6430 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
6431 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6435 tester_print("Powering on controller (with many 16-bit UUIDs)");
6437 mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
6438 sizeof(param), param, NULL, NULL, NULL);
6440 for (i = 0; i < 117; i++) {
6441 uint16_t val = htobs(i + 0x2000);
6442 memcpy(&uuid_param[12], &val, sizeof(val));
6443 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
6444 sizeof(uuid_param), uuid_param,
6448 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
6449 sizeof(param), param,
6450 setup_powered_callback, NULL, NULL);
6453 static void setup_uuid_mix(const void *test_data)
6455 struct test_data *data = tester_get_data();
6456 unsigned char param[] = { 0x01 };
6458 tester_print("Powering on controller (with mixed UUIDs)");
6460 mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
6461 sizeof(param), param, NULL, NULL, NULL);
6463 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
6464 sizeof(add_spp_uuid_param), add_spp_uuid_param,
6466 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
6467 sizeof(add_uuid32_param_1), add_uuid32_param_1,
6469 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
6470 sizeof(add_uuid128_param_1), add_uuid128_param_1,
6473 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
6474 sizeof(add_dun_uuid_param), add_dun_uuid_param,
6476 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
6477 sizeof(add_uuid32_param_2), add_uuid32_param_2,
6480 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
6481 sizeof(param), param,
6482 setup_powered_callback, NULL, NULL);
6485 static void setup_load_ltks_callback(uint8_t status, uint16_t length,
6486 const void *param, void *user_data)
6488 if (status != MGMT_STATUS_SUCCESS) {
6489 tester_setup_failed();
6493 tester_print("Loaded Long Term Key");
6496 static void setup_load_ltks_20_by_1(const void *test_data)
6498 struct test_data *data = tester_get_data();
6499 struct mgmt_cp_load_long_term_keys *cp;
6500 struct mgmt_ltk_info *info;
6501 unsigned char param[sizeof(*cp) + sizeof(*info)] = { 0x00 };
6502 unsigned char param_on[] = { 0x01 };
6505 cp = (struct mgmt_cp_load_long_term_keys *)param;
6508 info = (struct mgmt_ltk_info *)cp->keys;
6509 info->addr.type = 0x01; /* LE Public */
6511 for (i = 0; i < 20; i++) {
6513 info->addr.bdaddr.b[0] = i + 1;
6515 mgmt_send(data->mgmt, MGMT_OP_LOAD_LONG_TERM_KEYS,
6516 data->mgmt_index, sizeof(param), param,
6517 setup_load_ltks_callback, NULL, NULL);
6520 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
6521 sizeof(param_on), param_on,
6522 setup_powered_callback, NULL, NULL);
6525 static void setup_add_device(const void *test_data)
6527 struct test_data *data = tester_get_data();
6528 unsigned char param[] = { 0x01 };
6529 const unsigned char *add_param;
6530 size_t add_param_len;
6532 tester_print("Powering on controller (with added device)");
6534 if (data->hciemu_type == HCIEMU_TYPE_LE) {
6535 add_param = add_device_success_param_2;
6536 add_param_len = sizeof(add_device_success_param_2);
6538 add_param = add_device_success_param_1;
6539 add_param_len = sizeof(add_device_success_param_1);
6542 mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
6543 add_param_len, add_param, NULL, NULL, NULL);
6545 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
6546 sizeof(param), param,
6547 setup_powered_callback, NULL, NULL);
6550 static void setup_add_advertising_callback(uint8_t status, uint16_t length,
6551 const void *param, void *user_data)
6553 struct mgmt_rp_add_advertising *rp =
6554 (struct mgmt_rp_add_advertising *) param;
6556 if (status != MGMT_STATUS_SUCCESS) {
6557 tester_setup_failed();
6561 tester_print("Add Advertising setup complete (instance %d)",
6567 #define TESTER_ADD_ADV_DATA_LEN 7
6569 static void setup_add_adv_param(struct mgmt_cp_add_advertising *cp,
6572 memset(cp, 0, sizeof(*cp));
6573 cp->instance = instance;
6574 cp->adv_data_len = TESTER_ADD_ADV_DATA_LEN;
6575 cp->data[0] = TESTER_ADD_ADV_DATA_LEN - 1; /* AD len */
6576 cp->data[1] = 0x08; /* AD type: shortened local name */
6577 cp->data[2] = 't'; /* adv data ... */
6581 cp->data[6] = '0' + instance;
6584 static void setup_add_advertising_not_powered(const void *test_data)
6586 struct test_data *data = tester_get_data();
6587 struct mgmt_cp_add_advertising *cp;
6588 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
6589 unsigned char param[] = { 0x01 };
6591 tester_print("Adding advertising instance while unpowered");
6593 cp = (struct mgmt_cp_add_advertising *) adv_param;
6594 setup_add_adv_param(cp, 1);
6596 mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
6597 sizeof(param), ¶m,
6600 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
6601 sizeof(adv_param), adv_param,
6602 setup_add_advertising_callback,
6606 static void setup_add_advertising(const void *test_data)
6608 struct test_data *data = tester_get_data();
6609 struct mgmt_cp_add_advertising *cp;
6610 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
6611 unsigned char param[] = { 0x01 };
6613 tester_print("Adding advertising instance while powered");
6615 cp = (struct mgmt_cp_add_advertising *) adv_param;
6616 setup_add_adv_param(cp, 1);
6618 mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
6619 sizeof(param), ¶m,
6622 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
6623 sizeof(param), ¶m,
6626 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
6627 sizeof(adv_param), adv_param,
6628 setup_add_advertising_callback,
6632 static void setup_add_advertising_connectable(const void *test_data)
6634 struct test_data *data = tester_get_data();
6635 struct mgmt_cp_add_advertising *cp;
6636 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
6637 unsigned char param[] = { 0x01 };
6639 tester_print("Adding advertising instance while connectable");
6641 cp = (struct mgmt_cp_add_advertising *) adv_param;
6642 setup_add_adv_param(cp, 1);
6644 mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
6645 sizeof(param), ¶m,
6648 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
6649 sizeof(param), ¶m,
6652 mgmt_send(data->mgmt, MGMT_OP_SET_CONNECTABLE, data->mgmt_index,
6653 sizeof(param), ¶m,
6656 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
6657 sizeof(adv_param), adv_param,
6658 setup_add_advertising_callback,
6662 static int create_le_att_sock(struct test_data *data)
6664 struct sockaddr_l2 addr;
6667 sk = socket(PF_BLUETOOTH, SOCK_SEQPACKET | SOCK_NONBLOCK,
6671 tester_warn("Can't create socket: %s (%d)", strerror(errno),
6676 memset(&addr, 0, sizeof(addr));
6677 addr.l2_family = AF_BLUETOOTH;
6679 addr.l2_cid = htobs(0x0004);
6680 addr.l2_bdaddr_type = BDADDR_LE_PUBLIC;
6682 if (bind(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
6684 tester_warn("Can't bind socket: %s (%d)", strerror(errno),
6690 if (listen(sk, 1) < 0) {
6692 tester_warn("Can't bind socket: %s (%d)", strerror(errno),
6703 static void setup_advertise_while_connected(const void *test_data)
6705 struct test_data *data = tester_get_data();
6706 struct mgmt_cp_add_advertising *cp;
6707 uint8_t adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
6709 tester_print("Adding advertising instances");
6711 cp = (struct mgmt_cp_add_advertising *) adv_param;
6712 setup_add_adv_param(cp, 1);
6714 cp->flags |= MGMT_ADV_FLAG_CONNECTABLE;
6715 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
6716 sizeof(adv_param), adv_param,
6719 cp->flags &= ~MGMT_ADV_FLAG_CONNECTABLE;
6722 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
6723 sizeof(adv_param), adv_param,
6724 setup_add_advertising_callback,
6727 /* Listen on the socket so Kernel does not drop connection just after
6728 * connect. Socket is closed in test_post_teardown
6730 if (create_le_att_sock(data) < 0)
6731 tester_test_failed();
6734 static void setup_add_advertising_timeout(const void *test_data)
6736 struct test_data *data = tester_get_data();
6737 struct mgmt_cp_add_advertising *cp;
6738 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
6739 unsigned char param[] = { 0x01 };
6741 tester_print("Adding advertising instance with timeout");
6743 cp = (struct mgmt_cp_add_advertising *) adv_param;
6744 setup_add_adv_param(cp, 1);
6747 mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
6748 sizeof(param), ¶m,
6751 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
6752 sizeof(param), ¶m,
6755 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
6756 sizeof(adv_param), adv_param,
6757 setup_add_advertising_callback,
6761 static void setup_add_advertising_duration(const void *test_data)
6763 struct test_data *data = tester_get_data();
6764 struct mgmt_cp_add_advertising *cp;
6765 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
6766 unsigned char param[] = { 0x01 };
6768 tester_print("Adding instance with long timeout/short duration");
6770 cp = (struct mgmt_cp_add_advertising *) adv_param;
6771 setup_add_adv_param(cp, 1);
6775 mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
6776 sizeof(param), ¶m,
6779 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
6780 sizeof(param), ¶m,
6783 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
6784 sizeof(adv_param), adv_param,
6785 setup_add_advertising_callback,
6789 static void setup_power_cycle_callback(uint8_t status, uint16_t length,
6790 const void *param, void *user_data)
6792 struct test_data *data = tester_get_data();
6793 unsigned char param_off[] = { 0x00 };
6795 if (status != MGMT_STATUS_SUCCESS) {
6796 tester_setup_failed();
6800 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
6801 sizeof(param_off), ¶m_off,
6807 static void setup_add_advertising_power_cycle(const void *test_data)
6809 struct test_data *data = tester_get_data();
6810 struct mgmt_cp_add_advertising *cp;
6811 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
6812 unsigned char param_on[] = { 0x01 };
6814 tester_print("Adding instance without timeout and power cycle");
6816 cp = (struct mgmt_cp_add_advertising *) adv_param;
6817 setup_add_adv_param(cp, 1);
6819 mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
6820 sizeof(param_on), ¶m_on,
6823 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
6824 sizeof(param_on), ¶m_on,
6827 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
6828 sizeof(adv_param), adv_param,
6829 setup_power_cycle_callback,
6833 static void setup_set_and_add_advertising(const void *test_data)
6835 struct test_data *data = tester_get_data();
6836 struct mgmt_cp_add_advertising *cp;
6837 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
6838 unsigned char param[] = { 0x01 };
6840 tester_print("Set and add advertising instance");
6842 cp = (struct mgmt_cp_add_advertising *) adv_param;
6843 setup_add_adv_param(cp, 1);
6845 mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
6846 sizeof(param), ¶m,
6849 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
6850 sizeof(param), ¶m,
6853 mgmt_send(data->mgmt, MGMT_OP_SET_ADVERTISING, data->mgmt_index,
6854 sizeof(param), ¶m,
6857 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
6858 sizeof(adv_param), adv_param,
6859 setup_add_advertising_callback,
6863 static void setup_multi_adv_second_instance(uint8_t status, uint16_t length,
6864 const void *param, void *user_data) {
6865 struct mgmt_rp_add_advertising *rp =
6866 (struct mgmt_rp_add_advertising *) param;
6867 struct test_data *data = tester_get_data();
6868 struct mgmt_cp_add_advertising *cp;
6869 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
6871 if (status != MGMT_STATUS_SUCCESS) {
6872 tester_setup_failed();
6876 tester_print("Add Advertising setup complete (instance %d)",
6879 cp = (struct mgmt_cp_add_advertising *) adv_param;
6880 setup_add_adv_param(cp, 2);
6884 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
6885 sizeof(adv_param), adv_param,
6886 setup_add_advertising_callback,
6890 static void setup_multi_adv(const void *test_data)
6892 struct test_data *data = tester_get_data();
6893 struct mgmt_cp_add_advertising *cp;
6894 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
6895 unsigned char param[] = { 0x01 };
6897 tester_print("Adding two instances with timeout 1 and duration 1");
6899 cp = (struct mgmt_cp_add_advertising *) adv_param;
6900 setup_add_adv_param(cp, 1);
6904 mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
6905 sizeof(param), ¶m,
6908 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
6909 sizeof(param), ¶m,
6912 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
6913 sizeof(adv_param), adv_param,
6914 setup_multi_adv_second_instance,
6918 static void setup_complete(uint8_t status, uint16_t length,
6919 const void *param, void *user_data)
6921 struct test_data *data = tester_get_data();
6923 if (status != MGMT_STATUS_SUCCESS) {
6924 tester_setup_failed();
6928 tester_print("Initial settings completed");
6930 if (data->test_setup)
6931 data->test_setup(data);
6936 static void setup_set_unpowered_callback(uint8_t status, uint16_t length,
6937 const void *param, void *user_data)
6939 if (status != MGMT_STATUS_SUCCESS) {
6940 tester_setup_failed();
6947 static void setup_set_le_callback(uint8_t status, uint16_t length,
6948 const void *param, void *user_data)
6950 struct test_data *data = tester_get_data();
6951 unsigned char power_param[] = { 0x00 };
6953 if (status != MGMT_STATUS_SUCCESS) {
6954 tester_setup_failed();
6958 tester_print("Disabling power");
6960 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
6961 sizeof(power_param),
6963 setup_set_unpowered_callback,
6967 static void setup_ext_adv_not_powered(const void *test_data)
6969 struct test_data *data = tester_get_data();
6970 unsigned char param[] = { 0x01 };
6972 tester_print("Enabling LE");
6974 mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
6975 sizeof(param), ¶m,
6976 setup_set_le_callback,
6980 static void setup_set_ext_adv_params_callback(uint8_t status, uint16_t length,
6981 const void *param, void *user_data)
6983 if (status != MGMT_STATUS_SUCCESS) {
6984 tester_setup_failed();
6991 static void setup_ext_adv_params(const void *test_data)
6993 struct test_data *data = tester_get_data();
6995 tester_print("Setting Extended Adv Params");
6997 mgmt_send(data->mgmt, MGMT_OP_ADD_EXT_ADV_PARAMS, data->mgmt_index,
6998 sizeof(ext_adv_params_valid),
6999 &ext_adv_params_valid,
7000 setup_set_ext_adv_params_callback,
7004 static void pin_code_request_callback(uint16_t index, uint16_t length,
7005 const void *param, void *user_data)
7007 const struct mgmt_ev_pin_code_request *ev = param;
7008 struct test_data *data = user_data;
7009 const struct generic_data *test = data->test_data;
7010 struct mgmt_cp_pin_code_reply cp;
7012 test_condition_complete(data);
7014 memset(&cp, 0, sizeof(cp));
7015 memcpy(&cp.addr, &ev->addr, sizeof(cp.addr));
7018 mgmt_reply(data->mgmt, MGMT_OP_PIN_CODE_NEG_REPLY,
7019 data->mgmt_index, sizeof(cp.addr), &cp.addr,
7024 cp.pin_len = test->pin_len;
7025 memcpy(cp.pin_code, test->pin, test->pin_len);
7027 mgmt_reply(data->mgmt, MGMT_OP_PIN_CODE_REPLY, data->mgmt_index,
7028 sizeof(cp), &cp, NULL, NULL, NULL);
7031 static void user_confirm_request_callback(uint16_t index, uint16_t length,
7035 const struct mgmt_ev_user_confirm_request *ev = param;
7036 struct test_data *data = user_data;
7037 const struct generic_data *test = data->test_data;
7038 struct mgmt_cp_user_confirm_reply cp;
7041 memset(&cp, 0, sizeof(cp));
7042 memcpy(&cp.addr, &ev->addr, sizeof(cp.addr));
7044 if (test->reject_confirm)
7045 opcode = MGMT_OP_USER_CONFIRM_NEG_REPLY;
7047 opcode = MGMT_OP_USER_CONFIRM_REPLY;
7049 mgmt_reply(data->mgmt, opcode, data->mgmt_index, sizeof(cp), &cp,
7053 static void user_passkey_request_callback(uint16_t index, uint16_t length,
7057 const struct mgmt_ev_user_passkey_request *ev = param;
7058 struct test_data *data = user_data;
7059 const struct generic_data *test = data->test_data;
7060 struct mgmt_cp_user_passkey_reply cp;
7062 if (test->just_works) {
7063 tester_warn("User Passkey Request for just-works case");
7064 tester_test_failed();
7068 memset(&cp, 0, sizeof(cp));
7069 memcpy(&cp.addr, &ev->addr, sizeof(cp.addr));
7071 if (test->reject_confirm) {
7072 mgmt_reply(data->mgmt, MGMT_OP_USER_PASSKEY_NEG_REPLY,
7073 data->mgmt_index, sizeof(cp.addr), &cp.addr,
7078 mgmt_reply(data->mgmt, MGMT_OP_USER_PASSKEY_REPLY, data->mgmt_index,
7079 sizeof(cp), &cp, NULL, NULL, NULL);
7082 static void test_setup(const void *test_data)
7084 struct test_data *data = tester_get_data();
7085 const struct generic_data *test = data->test_data;
7086 struct bthost *bthost = hciemu_client_get_host(data->hciemu);
7087 const uint16_t *cmd;
7092 if (test->pin || test->expect_pin) {
7093 mgmt_register(data->mgmt, MGMT_EV_PIN_CODE_REQUEST,
7094 data->mgmt_index, pin_code_request_callback,
7096 test_add_condition(data);
7099 mgmt_register(data->mgmt, MGMT_EV_USER_CONFIRM_REQUEST,
7100 data->mgmt_index, user_confirm_request_callback,
7103 mgmt_register(data->mgmt, MGMT_EV_USER_PASSKEY_REQUEST,
7104 data->mgmt_index, user_passkey_request_callback,
7107 if (test->client_pin)
7108 bthost_set_pin_code(bthost, test->client_pin,
7109 test->client_pin_len);
7111 if (test->client_io_cap)
7112 bthost_set_io_capability(bthost, test->client_io_cap);
7114 if (test->client_auth_req)
7115 bthost_set_auth_req(bthost, test->client_auth_req);
7116 else if (!test->just_works)
7117 bthost_set_auth_req(bthost, 0x01);
7119 if (test->client_reject_confirm)
7120 bthost_set_reject_user_confirm(bthost, true);
7122 if (test->client_enable_le)
7123 bthost_write_le_host_supported(bthost, 0x01);
7125 if (test->client_enable_sc)
7126 bthost_set_sc_support(bthost, 0x01);
7129 if (!test || !test->setup_settings) {
7130 if (data->test_setup)
7131 data->test_setup(data);
7133 tester_setup_complete();
7137 for (cmd = test->setup_settings; *cmd; cmd++) {
7138 unsigned char simple_param[] = { 0x01 };
7139 unsigned char discov_param[] = { 0x01, 0x00, 0x00 };
7140 unsigned char privacy_param[] = { 0x01,
7141 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
7142 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
7143 unsigned char set_exp_feat_param[17] = { 0x00 };
7144 unsigned char *param = simple_param;
7145 size_t param_size = sizeof(simple_param);
7146 mgmt_request_func_t func = NULL;
7148 /* If this is the last command (next one is 0) request
7149 * for a callback. */
7151 func = setup_complete;
7153 if (*cmd == MGMT_OP_SET_DISCOVERABLE) {
7154 if (test->setup_limited_discov) {
7155 discov_param[0] = 0x02;
7156 discov_param[1] = 0x01;
7158 param_size = sizeof(discov_param);
7159 param = discov_param;
7162 if (*cmd == MGMT_OP_SET_PRIVACY) {
7163 param_size = sizeof(privacy_param);
7164 param = privacy_param;
7167 if (*cmd == MGMT_OP_START_DISCOVERY) {
7168 if (test->setup_discovery_param)
7169 memcpy(param, test->setup_discovery_param, 1);
7172 if (*cmd == MGMT_OP_SET_EXP_FEATURE) {
7173 if (test->setup_exp_feat_param) {
7174 memcpy(set_exp_feat_param,
7175 test->setup_exp_feat_param, 17);
7176 param_size = sizeof(set_exp_feat_param);
7177 param = set_exp_feat_param;
7181 if (*cmd == MGMT_OP_SET_LE && test->setup_nobredr) {
7182 unsigned char off[] = { 0x00 };
7183 tester_print("Setup sending %s (0x%04x)",
7184 mgmt_opstr(*cmd), *cmd);
7185 mgmt_send(data->mgmt, *cmd, data->mgmt_index,
7186 param_size, param, NULL, NULL, NULL);
7187 tester_print("Setup sending %s (0x%04x)",
7188 mgmt_opstr(MGMT_OP_SET_BREDR),
7190 mgmt_send(data->mgmt, MGMT_OP_SET_BREDR,
7191 data->mgmt_index, sizeof(off), off,
7194 tester_print("Setup sending %s (0x%04x)",
7195 mgmt_opstr(*cmd), *cmd);
7196 mgmt_send(data->mgmt, *cmd, data->mgmt_index,
7197 param_size, param, func, data, NULL);
7202 static void command_generic_new_settings(uint16_t index, uint16_t length,
7203 const void *param, void *user_data)
7205 struct test_data *data = tester_get_data();
7207 tester_print("New settings event received");
7209 mgmt_unregister(data->mgmt, data->mgmt_settings_id);
7211 tester_test_failed();
7214 static void command_generic_new_settings_alt(uint16_t index, uint16_t length,
7215 const void *param, void *user_data)
7217 struct test_data *data = tester_get_data();
7218 const struct generic_data *test = data->test_data;
7222 tester_warn("Invalid parameter size for new settings event");
7223 tester_test_failed();
7227 settings = get_le32(param);
7229 tester_print("New settings 0x%08x received", settings);
7231 if (test->expect_settings_unset) {
7232 if ((settings & test->expect_settings_unset) != 0)
7237 if (!test->expect_settings_set)
7240 if ((settings & test->expect_settings_set) != test->expect_settings_set)
7244 tester_print("Unregistering new settings notification");
7246 mgmt_unregister(data->mgmt_alt, data->mgmt_alt_settings_id);
7248 test_condition_complete(data);
7251 static bool verify_alt_ev(const void *param, uint16_t length)
7253 struct test_data *data = tester_get_data();
7254 const struct generic_data *test = data->test_data;
7256 if (length != test->expect_alt_ev_len) {
7257 tester_warn("Invalid length %u != %u", length,
7258 test->expect_alt_ev_len);
7262 if (test->expect_alt_ev_param &&
7263 memcmp(test->expect_alt_ev_param, param, length)) {
7264 tester_warn("Event parameters do not match");
7265 util_hexdump('>', param, length, print_debug, "");
7266 util_hexdump('!', test->expect_alt_ev_param, length,
7274 static void command_generic_event_alt(uint16_t index, uint16_t length,
7278 struct test_data *data = tester_get_data();
7279 const struct generic_data *test = data->test_data;
7280 bool (*verify)(const void *param, uint16_t length);
7282 tester_print("New %s event received", mgmt_evstr(test->expect_alt_ev));
7284 mgmt_unregister(data->mgmt_alt, data->mgmt_alt_ev_id);
7286 if (test->verify_alt_ev_func)
7287 verify = test->verify_alt_ev_func;
7289 verify = verify_alt_ev;
7291 if (!verify(param, length)) {
7292 tester_warn("Incorrect %s event parameters",
7293 mgmt_evstr(test->expect_alt_ev));
7294 tester_test_failed();
7298 test_condition_complete(data);
7301 static void command_generic_callback(uint8_t status, uint16_t length,
7302 const void *param, void *user_data)
7304 struct test_data *data = tester_get_data();
7305 const struct generic_data *test = data->test_data;
7306 const void *expect_param = test->expect_param;
7307 uint16_t expect_len = test->expect_len;
7309 tester_print("%s (0x%04x): %s (0x%02x)", mgmt_opstr(test->send_opcode),
7310 test->send_opcode, mgmt_errstr(status), status);
7312 if (status != test->expect_status) {
7313 if (!test->fail_tolerant || !!status != !!test->expect_status) {
7314 tester_test_abort();
7318 tester_warn("Unexpected status got %d expected %d",
7319 status, test->expect_status);
7322 if (!test->expect_ignore_param) {
7323 if (test->expect_func)
7324 expect_param = test->expect_func(&expect_len);
7326 if (length != expect_len) {
7327 tester_warn("Invalid cmd response parameter size");
7328 tester_test_failed();
7332 if (expect_param && expect_len > 0 &&
7333 memcmp(param, expect_param, length)) {
7334 tester_warn("Unexpected cmd response parameter value");
7335 util_hexdump('>', param, length, print_debug, "");
7336 util_hexdump('!', expect_param, length, print_debug,
7338 tester_test_failed();
7343 test_condition_complete(data);
7346 static void command_setup_hci_callback(uint16_t opcode, const void *param,
7347 uint8_t length, void *user_data)
7349 struct test_data *data = user_data;
7350 const struct generic_data *test = data->test_data;
7351 const void *setup_expect_hci_param = test->setup_expect_hci_param;
7352 uint8_t setup_expect_hci_len = test->setup_expect_hci_len;
7354 tester_print("HCI Command 0x%04x length %u", opcode, length);
7356 if (opcode != test->setup_expect_hci_command)
7359 if (length != setup_expect_hci_len) {
7360 tester_warn("Invalid parameter size for HCI command");
7361 tester_test_failed();
7365 if (memcmp(param, setup_expect_hci_param, length) != 0) {
7366 tester_warn("Unexpected HCI command parameter value");
7367 tester_test_failed();
7371 hciemu_clear_central_post_command_hooks(data->hciemu);
7372 test_setup_condition_complete(data);
7375 static void command_hci_callback(uint16_t opcode, const void *param,
7376 uint8_t length, void *user_data)
7378 struct test_data *data = user_data;
7379 const struct generic_data *test = data->test_data;
7380 const void *expect_hci_param = test->expect_hci_param;
7381 uint8_t expect_hci_len = test->expect_hci_len;
7384 tester_print("HCI Command 0x%04x length %u", opcode, length);
7386 if (opcode != test->expect_hci_command || data->expect_hci_command_done)
7389 data->expect_hci_command_done = true;
7391 if (test->expect_hci_func)
7392 expect_hci_param = test->expect_hci_func(&expect_hci_len);
7394 if (length != expect_hci_len) {
7395 tester_warn("Invalid parameter size for HCI command");
7396 tester_test_failed();
7400 if (test->expect_hci_param_check_func)
7401 ret = test->expect_hci_param_check_func(param, length);
7403 ret = memcmp(param, expect_hci_param, length);
7405 tester_warn("Unexpected HCI command parameter value:");
7406 util_hexdump('>', param, length, print_debug, "");
7407 util_hexdump('!', expect_hci_param, length, print_debug, "");
7408 tester_test_failed();
7412 test_condition_complete(data);
7415 static bool match_hci_cmd_opcode(const void *data, const void *match_data)
7417 const struct hci_entry *entry = data;
7418 uint16_t opcode = PTR_TO_UINT(match_data);
7420 return entry->cmd_data->opcode == opcode;
7423 static void command_hci_list_callback(uint16_t opcode, const void *param,
7424 uint8_t length, void *user_data)
7426 struct test_data *data = user_data;
7427 const struct hci_cmd_data *hci_cmd_data;
7428 struct hci_entry *entry;
7431 tester_print("HCI Command 0x%04x length %u", opcode, length);
7433 entry = queue_find(data->expect_hci_q, match_hci_cmd_opcode,
7434 UINT_TO_PTR(opcode));
7438 /* Save the hci cmd data before removing the queue entry */
7439 hci_cmd_data = entry->cmd_data;
7441 /* Remove the entry from the queue and free the entry */
7442 queue_remove(data->expect_hci_q, entry);
7445 if (length != hci_cmd_data->len) {
7446 tester_warn("Invalid parameter size for HCI command");
7447 tester_test_failed();
7451 ret = memcmp(param, hci_cmd_data->param, length);
7453 tester_warn("Unexpected HCI command parameter value:");
7454 util_hexdump('>', param, length, print_debug, "");
7455 util_hexdump('!', hci_cmd_data->param, length, print_debug, "");
7456 tester_test_failed();
7460 test_condition_complete(data);
7463 static void setup_mgmt_cmd_callback(uint8_t status, uint16_t length,
7464 const void *param, void *user_data)
7466 if (status != MGMT_STATUS_SUCCESS) {
7467 tester_setup_failed();
7470 test_setup_condition_complete(user_data);
7473 static void setup_command_generic(const void *test_data)
7475 struct test_data *data = tester_get_data();
7476 const struct generic_data *test = data->test_data;
7477 const void *send_param = test->setup_send_param;
7478 uint16_t send_len = test->setup_send_len;
7481 if (test->setup_expect_hci_command) {
7482 tester_print("Registering setup expected HCI command callback");
7483 tester_print("Setup expected HCI command 0x%04x",
7484 test->setup_expect_hci_command);
7485 hciemu_add_central_post_command_hook(data->hciemu,
7486 command_setup_hci_callback, data);
7487 test_add_setup_condition(data);
7490 if (test->setup_send_opcode) {
7491 tester_print("Setup sending %s (0x%04x)",
7492 mgmt_opstr(test->setup_send_opcode),
7493 test->setup_send_opcode);
7494 mgmt_send(data->mgmt, test->setup_send_opcode, data->mgmt_index,
7495 send_len, send_param,
7496 setup_mgmt_cmd_callback,
7498 test_add_setup_condition(data);
7502 tester_print("Sending setup opcode array");
7503 for (; test->setup_mgmt_cmd_arr + i; ++i) {
7504 const struct setup_mgmt_cmd *cmd = test->setup_mgmt_cmd_arr + i;
7506 if (cmd->send_opcode == 0x00)
7509 tester_print("Setup sending %s (0x%04x)",
7510 mgmt_opstr(cmd->send_opcode),
7513 mgmt_send(data->mgmt, cmd->send_opcode, data->mgmt_index,
7514 cmd->send_len, cmd->send_param,
7515 setup_mgmt_cmd_callback,
7517 test_add_setup_condition(data);
7521 static const uint8_t add_advertising_param_empty[] = {
7522 0x01, /* adv instance */
7523 0x00, 0x00, 0x00, 0x00, /* flags: none */
7524 0x00, 0x00, /* duration: default */
7525 0x00, 0x00, /* timeout: none */
7526 0x00, /* adv data len */
7527 0x00, /* scan rsp len */
7530 static const struct generic_data add_advertising_empty_scrsp = {
7531 .setup_settings = settings_powered_le,
7532 .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
7533 .setup_send_param = set_local_name_param,
7534 .setup_send_len = sizeof(set_local_name_param),
7535 .send_opcode = MGMT_OP_ADD_ADVERTISING,
7536 .send_param = add_advertising_param_empty,
7537 .send_len = sizeof(add_advertising_param_empty),
7538 .expect_status = MGMT_STATUS_SUCCESS,
7539 .expect_param = advertising_instance1_param,
7540 .expect_len = sizeof(advertising_instance1_param),
7543 static const uint8_t add_advertising_param_scrsp_data_only_ok[] = {
7544 0x01, /* adv instance */
7545 0x00, 0x00, 0x00, 0x00, /* flags: none */
7546 0x00, 0x00, /* duration: default */
7547 0x00, 0x00, /* timeout: none */
7548 0x00, /* adv data len */
7549 0x1f, /* scan rsp len */
7551 /* scan rsp data: */
7552 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7553 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7554 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7558 static const struct generic_data add_advertising_scrsp_data_only_ok = {
7559 .setup_settings = settings_powered_le,
7560 .send_opcode = MGMT_OP_ADD_ADVERTISING,
7561 .send_param = add_advertising_param_scrsp_data_only_ok,
7562 .send_len = sizeof(add_advertising_param_scrsp_data_only_ok),
7563 .expect_status = MGMT_STATUS_SUCCESS,
7564 .expect_param = advertising_instance1_param,
7565 .expect_len = sizeof(advertising_instance1_param),
7568 static const uint8_t add_advertising_param_scrsp_data_only_too_long[] = {
7569 0x01, /* adv instance */
7570 0x00, 0x00, 0x00, 0x00, /* flags: none */
7571 0x00, 0x00, /* duration: default */
7572 0x00, 0x00, /* timeout: none */
7573 0x00, /* adv data len */
7574 0x20, /* scan rsp len */
7576 /* scan rsp data: */
7577 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7578 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7579 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7583 static const struct generic_data add_advertising_scrsp_data_only_too_long = {
7584 .setup_settings = settings_powered_le,
7585 .send_opcode = MGMT_OP_ADD_ADVERTISING,
7586 .send_param = add_advertising_param_scrsp_data_only_too_long,
7587 .send_len = sizeof(add_advertising_param_scrsp_data_only_too_long),
7588 .expect_status = MGMT_STATUS_INVALID_PARAMS,
7589 .expect_param = NULL,
7593 static const uint8_t set_appearance_param[2] = { 0x54, 0x65 };
7595 static const uint8_t add_advertising_param_scrsp_appear_data_ok[] = {
7596 0x01, /* adv instance */
7597 0x20, 0x00, 0x00, 0x00, /* flags: appearance */
7598 0x00, 0x00, /* duration: default */
7599 0x00, 0x00, /* timeout: none */
7600 0x00, /* adv data len */
7601 0x1b, /* scan rsp len */
7603 /* scan rsp data: */
7604 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7605 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7606 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7609 static const struct generic_data add_advertising_scrsp_appear_data_ok = {
7610 .setup_settings = settings_powered_le,
7611 .setup_send_opcode = MGMT_OP_SET_APPEARANCE,
7612 .setup_send_param = set_appearance_param,
7613 .setup_send_len = sizeof(set_appearance_param),
7614 .send_opcode = MGMT_OP_ADD_ADVERTISING,
7615 .send_param = add_advertising_param_scrsp_appear_data_ok,
7616 .send_len = sizeof(add_advertising_param_scrsp_appear_data_ok),
7617 .expect_status = MGMT_STATUS_SUCCESS,
7618 .expect_param = advertising_instance1_param,
7619 .expect_len = sizeof(advertising_instance1_param),
7622 static const uint8_t add_advertising_param_scrsp_appear_data_too_long[] = {
7623 0x01, /* adv instance */
7624 0x20, 0x00, 0x00, 0x00, /* flags: appearance */
7625 0x00, 0x00, /* duration: default */
7626 0x00, 0x00, /* timeout: none */
7627 0x00, /* adv data len */
7628 0x1c, /* scan rsp len */
7630 /* scan rsp data: */
7631 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7632 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7633 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7636 static const struct generic_data add_advertising_scrsp_appear_data_too_long = {
7637 .setup_settings = settings_powered_le,
7638 .setup_send_opcode = MGMT_OP_SET_APPEARANCE,
7639 .setup_send_param = set_appearance_param,
7640 .setup_send_len = sizeof(set_appearance_param),
7641 .send_opcode = MGMT_OP_ADD_ADVERTISING,
7642 .send_param = add_advertising_param_scrsp_appear_data_too_long,
7643 .send_len = sizeof(add_advertising_param_scrsp_appear_data_too_long),
7644 .expect_status = MGMT_STATUS_INVALID_PARAMS,
7645 .expect_param = NULL,
7649 static const uint8_t add_advertising_param_scrsp_appear_null[] = {
7650 0x01, /* adv instance */
7651 0x20, 0x00, 0x00, 0x00, /* flags: appearance */
7652 0x00, 0x00, /* duration: default */
7653 0x00, 0x00, /* timeout: none */
7654 0x00, /* adv data len */
7655 0x01, /* scan rsp len */
7657 /* scan rsp data: */
7661 static const struct generic_data add_advertising_scrsp_appear_null = {
7662 .setup_settings = settings_powered_le,
7663 .send_opcode = MGMT_OP_ADD_ADVERTISING,
7664 .send_param = add_advertising_param_scrsp_appear_null,
7665 .send_len = sizeof(add_advertising_param_scrsp_appear_null),
7666 .expect_status = MGMT_STATUS_SUCCESS,
7667 .expect_param = advertising_instance1_param,
7668 .expect_len = sizeof(advertising_instance1_param),
7671 static const uint8_t add_advertising_empty_param[] = {
7672 0x01, /* adv instance */
7673 0x40, 0x00, 0x00, 0x00, /* flags: local name*/
7674 0x00, 0x00, /* duration: default */
7675 0x00, 0x00, /* timeout: none */
7676 0x00, /* adv data len */
7677 0x01, /* scan rsp len */
7678 /* scan rsp data: */
7682 static const uint8_t scan_rsp_data_empty[] = {
7683 0x01, /* scan rsp data len */
7684 0x00, /* scan rsp data */
7685 /* placeholder data */
7686 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7687 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7688 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7691 static const struct generic_data add_advertising_no_name_set = {
7692 .setup_settings = settings_powered_le,
7693 .send_opcode = MGMT_OP_ADD_ADVERTISING,
7694 .send_param = add_advertising_empty_param,
7695 .send_len = sizeof(add_advertising_empty_param),
7696 .expect_status = MGMT_STATUS_SUCCESS,
7697 .expect_param = advertising_instance1_param,
7698 .expect_len = sizeof(advertising_instance1_param),
7699 .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_RSP_DATA,
7700 .expect_hci_param = scan_rsp_data_empty,
7701 .expect_hci_len = sizeof(scan_rsp_data_empty),
7704 static const uint8_t add_advertising_param_name[] = {
7705 0x01, /* adv instance */
7706 0x40, 0x00, 0x00, 0x00, /* flags: Add local name to scan_rsp */
7707 0x00, 0x00, /* duration: default */
7708 0x00, 0x00, /* timeout: none */
7709 0x00, /* adv data len */
7710 0x00, /* scan rsp len */
7713 static const uint8_t set_scan_rsp_data_name_fits_in_scrsp[] = {
7714 0x0c, /* Scan rsp data len */
7715 0x0b, /* Local name data len */
7716 0x09, /* Complete name */
7717 0x54, 0x65, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, /* "Test name" */
7719 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7720 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7723 static const struct generic_data add_advertising_name_fits_in_scrsp = {
7724 .setup_settings = settings_powered_le,
7725 .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
7726 .setup_send_param = &set_local_name_cp,
7727 .setup_send_len = sizeof(set_local_name_cp),
7728 .send_opcode = MGMT_OP_ADD_ADVERTISING,
7729 .send_param = add_advertising_param_name,
7730 .send_len = sizeof(add_advertising_param_name),
7731 .expect_status = MGMT_STATUS_SUCCESS,
7732 .expect_param = advertising_instance1_param,
7733 .expect_len = sizeof(advertising_instance1_param),
7734 .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_RSP_DATA,
7735 .expect_hci_param = set_scan_rsp_data_name_fits_in_scrsp,
7736 .expect_hci_len = sizeof(set_scan_rsp_data_name_fits_in_scrsp),
7739 static const uint8_t set_scan_rsp_data_shortened_name_fits[] = {
7740 0x0d, /* Scan rsp data len */
7741 0x0c, /* Local name data len */
7742 0x08, /* Short name */
7743 0x54, 0x65, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x31,
7746 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7747 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7750 static const struct generic_data add_advertising_shortened_name_in_scrsp = {
7751 .setup_settings = settings_powered_le,
7752 .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
7753 .setup_send_param = &set_local_name_longer_cp,
7754 .setup_send_len = sizeof(set_local_name_longer_cp),
7755 .send_opcode = MGMT_OP_ADD_ADVERTISING,
7756 .send_param = add_advertising_param_name,
7757 .send_len = sizeof(add_advertising_param_name),
7758 .expect_status = MGMT_STATUS_SUCCESS,
7759 .expect_param = advertising_instance1_param,
7760 .expect_len = sizeof(advertising_instance1_param),
7761 .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_RSP_DATA,
7762 .expect_hci_param = set_scan_rsp_data_shortened_name_fits,
7763 .expect_hci_len = sizeof(set_scan_rsp_data_shortened_name_fits),
7766 static const uint8_t set_scan_rsp_data_short_name_fits[] = {
7767 0x07, /* Scan rsp data len */
7768 0x06, /* Local name data len */
7769 0x08, /* Short name */
7770 0x54, 0x65, 0x73, 0x74,
7773 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7774 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7775 0x00, 0x00, 0x00, 0x00, 0x00,
7778 static const struct generic_data add_advertising_short_name_in_scrsp = {
7779 .setup_settings = settings_powered_le,
7780 .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
7781 .setup_send_param = &set_local_name_long_short_cp,
7782 .setup_send_len = sizeof(set_local_name_long_short_cp),
7783 .send_opcode = MGMT_OP_ADD_ADVERTISING,
7784 .send_param = add_advertising_param_name,
7785 .send_len = sizeof(add_advertising_param_name),
7786 .expect_status = MGMT_STATUS_SUCCESS,
7787 .expect_param = advertising_instance1_param,
7788 .expect_len = sizeof(advertising_instance1_param),
7789 .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_RSP_DATA,
7790 .expect_hci_param = set_scan_rsp_data_short_name_fits,
7791 .expect_hci_len = sizeof(set_scan_rsp_data_short_name_fits),
7794 static const uint8_t add_advertising_param_name_data_ok[] = {
7795 0x01, /* adv instance */
7796 0x40, 0x00, 0x00, 0x00, /* flags: local name */
7797 0x00, 0x00, /* duration: default */
7798 0x00, 0x00, /* timeout: none */
7799 0x00, /* adv data len */
7800 0x12, /* scan rsp len */
7802 /* scan rsp data: */
7803 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7804 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7807 static const uint8_t set_scan_rsp_data_param_name_data_ok[] = {
7808 0x1e, /* Scan rsp data len */
7810 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7811 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7812 0x0b, /* Local name data len */
7813 0x09, /* Complete name */
7814 0x54, 0x65, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x00,
7820 static const struct generic_data add_advertising_name_data_ok = {
7821 .setup_settings = settings_powered_le,
7822 .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
7823 .setup_send_param = &set_local_name_cp,
7824 .setup_send_len = sizeof(set_local_name_cp),
7825 .send_opcode = MGMT_OP_ADD_ADVERTISING,
7826 .send_param = add_advertising_param_name_data_ok,
7827 .send_len = sizeof(add_advertising_param_name_data_ok),
7828 .expect_status = MGMT_STATUS_SUCCESS,
7829 .expect_param = advertising_instance1_param,
7830 .expect_len = sizeof(advertising_instance1_param),
7831 .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_RSP_DATA,
7832 .expect_hci_param = set_scan_rsp_data_param_name_data_ok,
7833 .expect_hci_len = sizeof(set_scan_rsp_data_param_name_data_ok),
7836 static const uint8_t add_advertising_param_name_data_inv[] = {
7837 0x01, /* adv instance */
7838 0x40, 0x00, 0x00, 0x00, /* flags: local name */
7839 0x00, 0x00, /* duration: default */
7840 0x00, 0x00, /* timeout: none */
7841 0x00, /* adv data len */
7842 0x14, /* scan rsp len */
7844 /* scan rsp data: */
7845 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7846 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
7849 static const struct generic_data add_advertising_name_data_inv = {
7850 .setup_settings = settings_powered_le,
7851 .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
7852 .setup_send_param = &set_local_name_cp,
7853 .setup_send_len = sizeof(set_local_name_cp),
7854 .send_opcode = MGMT_OP_ADD_ADVERTISING,
7855 .send_param = add_advertising_param_name_data_inv,
7856 .send_len = sizeof(add_advertising_param_name_data_inv),
7857 .expect_status = MGMT_STATUS_INVALID_PARAMS,
7858 .expect_param = NULL,
7862 static const uint8_t add_advertising_param_name_data_appear[] = {
7863 0x01, /* adv instance */
7864 0x60, 0x00, 0x00, 0x00, /* flags: local name + appearance */
7865 0x00, 0x00, /* duration: default */
7866 0x00, 0x00, /* timeout: none */
7867 0x00, /* adv data len */
7868 0x0e, /* scan rsp len */
7870 /* scan rsp data: */
7871 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7872 0x00, 0x00, 0x00, 0x00,
7875 static const struct setup_mgmt_cmd add_advertising_mgmt_cmd_arr[] = {
7877 .send_opcode = MGMT_OP_SET_APPEARANCE,
7878 .send_param = set_appearance_param,
7879 .send_len = sizeof(set_appearance_param),
7882 .send_opcode = MGMT_OP_SET_LOCAL_NAME,
7883 .send_param = &set_local_name_cp,
7884 .send_len = sizeof(set_local_name_cp),
7886 { /* last element should always have opcode 0x00 */
7887 .send_opcode = 0x00,
7893 static const uint8_t set_scan_rsp_data_name_data_appear[] = {
7894 0x1e, /* Scan rsp data len */
7895 0x03, /* appearance len */
7896 0x19, /* EIR_APPEARANCE */
7897 0x54, 0x65, /* appearance value */
7899 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7900 0x00, 0x00, 0x00, 0x00,
7901 0x0b, /* Local name data len */
7902 0x09, /* Complete name */
7903 0x54, 0x65, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x00,
7909 static const struct generic_data add_advertising_name_data_appear = {
7910 .setup_settings = settings_powered_le,
7911 .setup_mgmt_cmd_arr = add_advertising_mgmt_cmd_arr,
7912 .send_opcode = MGMT_OP_ADD_ADVERTISING,
7913 .send_param = add_advertising_param_name_data_appear,
7914 .send_len = sizeof(add_advertising_param_name_data_appear),
7915 .expect_status = MGMT_STATUS_SUCCESS,
7916 .expect_param = advertising_instance1_param,
7917 .expect_len = sizeof(advertising_instance1_param),
7918 .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_RSP_DATA,
7919 .expect_hci_param = set_scan_rsp_data_name_data_appear,
7920 .expect_hci_len = sizeof(set_scan_rsp_data_name_data_appear),
7923 static const struct generic_data set_appearance_not_supported = {
7924 .send_opcode = MGMT_OP_SET_APPEARANCE,
7925 .send_param = set_appearance_param,
7926 .send_len = sizeof(set_appearance_param),
7927 .expect_status = MGMT_STATUS_NOT_SUPPORTED,
7928 .expect_param = NULL,
7932 static const struct generic_data set_appearance_success = {
7933 .send_opcode = MGMT_OP_SET_APPEARANCE,
7934 .send_param = set_appearance_param,
7935 .send_len = sizeof(set_appearance_param),
7936 .expect_status = MGMT_STATUS_SUCCESS,
7937 .expect_param = NULL,
7941 static const uint8_t read_adv_features_rsp_3[] = {
7942 0xff, 0xff, 0x01, 0x00, /* supported flags */
7943 0x1f, /* max_adv_data_len */
7944 0x1f, /* max_scan_rsp_len */
7945 0x03, /* max_instances */
7946 0x00, /* num_instances */
7949 static const struct generic_data read_adv_features_success_3 = {
7950 .send_opcode = MGMT_OP_READ_ADV_FEATURES,
7951 .expect_param = read_adv_features_rsp_3,
7952 .expect_len = sizeof(read_adv_features_rsp_3),
7953 .expect_status = MGMT_STATUS_SUCCESS,
7956 /* add advertising with multiple phy flags */
7957 static const uint8_t add_ext_advertising_invalid_param_1[] = {
7958 0x01, /* adv instance */
7959 0x80, 0x01, 0x00, 0x00, /* flags: 1m and 2m*/
7960 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
7961 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
7964 static const struct generic_data add_ext_advertising_fail_1 = {
7965 .setup_settings = settings_powered_le,
7966 .send_opcode = MGMT_OP_ADD_ADVERTISING,
7967 .send_param = add_ext_advertising_invalid_param_1,
7968 .send_len = sizeof(add_ext_advertising_invalid_param_1),
7969 .expect_status = MGMT_STATUS_INVALID_PARAMS,
7972 /* add advertising with multiple phy flags */
7973 static const uint8_t add_ext_advertising_invalid_param_2[] = {
7974 0x01, /* adv instance */
7975 0x00, 0x03, 0x00, 0x00, /* flags: 2m and coded*/
7976 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
7977 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
7980 static const struct generic_data add_ext_advertising_fail_2 = {
7981 .setup_settings = settings_powered_le,
7982 .send_opcode = MGMT_OP_ADD_ADVERTISING,
7983 .send_param = add_ext_advertising_invalid_param_2,
7984 .send_len = sizeof(add_ext_advertising_invalid_param_2),
7985 .expect_status = MGMT_STATUS_INVALID_PARAMS,
7988 /* add advertising with multiple phy flags */
7989 static const uint8_t add_ext_advertising_invalid_param_3[] = {
7990 0x01, /* adv instance */
7991 0x80, 0x02, 0x00, 0x00, /* flags: 1m and coded*/
7992 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
7993 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
7996 static const struct generic_data add_ext_advertising_fail_3 = {
7997 .setup_settings = settings_powered_le,
7998 .send_opcode = MGMT_OP_ADD_ADVERTISING,
7999 .send_param = add_ext_advertising_invalid_param_3,
8000 .send_len = sizeof(add_ext_advertising_invalid_param_3),
8001 .expect_status = MGMT_STATUS_INVALID_PARAMS,
8004 /* add advertising with multiple phy flags */
8005 static const uint8_t add_ext_advertising_invalid_param_4[] = {
8006 0x01, /* adv instance */
8007 0x80, 0x03, 0x00, 0x00, /* flags: 1m, 2m and coded*/
8008 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
8009 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
8012 static const struct generic_data add_ext_advertising_fail_4 = {
8013 .setup_settings = settings_powered_le,
8014 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8015 .send_param = add_ext_advertising_invalid_param_4,
8016 .send_len = sizeof(add_ext_advertising_invalid_param_4),
8017 .expect_status = MGMT_STATUS_INVALID_PARAMS,
8020 static const uint8_t set_ext_adv_data_uuid[] = {
8025 /* controller should not fragment */
8029 /* advertise heart rate monitor and manufacturer specific data */
8030 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
8033 static const struct generic_data add_ext_advertising_success_1 = {
8034 .setup_settings = settings_powered_le,
8035 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8036 .send_param = add_advertising_param_uuid,
8037 .send_len = sizeof(add_advertising_param_uuid),
8038 .expect_param = advertising_instance1_param,
8039 .expect_len = sizeof(advertising_instance1_param),
8040 .expect_status = MGMT_STATUS_SUCCESS,
8041 .expect_alt_ev = MGMT_EV_ADVERTISING_ADDED,
8042 .expect_alt_ev_param = advertising_instance1_param,
8043 .expect_alt_ev_len = sizeof(advertising_instance1_param),
8044 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
8045 .expect_hci_param = set_ext_adv_data_uuid,
8046 .expect_hci_len = sizeof(set_ext_adv_data_uuid),
8049 static const uint8_t set_ext_adv_data_test1[] = {
8051 0x03, /* complete data */
8052 0x01, /* controller should not fragment */
8053 0x07, /* adv data len */
8055 0x08, /* AD type: shortened local name */
8056 0x74, 0x65, 0x73, 0x74, 0x31, /* "test1" */
8059 static const struct generic_data add_ext_advertising_success_pwron_data = {
8060 .send_opcode = MGMT_OP_SET_POWERED,
8061 .send_param = set_powered_on_param,
8062 .send_len = sizeof(set_powered_on_param),
8063 .expect_status = MGMT_STATUS_SUCCESS,
8064 .expect_param = set_powered_adv_instance_settings_param,
8065 .expect_len = sizeof(set_powered_adv_instance_settings_param),
8066 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
8067 .expect_hci_param = set_ext_adv_data_test1,
8068 .expect_hci_len = sizeof(set_ext_adv_data_test1),
8071 static const char set_ext_adv_on_set_adv_enable_param[] = {
8073 0x01, /* No of sets */
8075 0x00, 0x00, /* Duration */
8076 0x00, /* Max events */
8079 static const struct generic_data add_ext_advertising_success_pwron_enabled = {
8080 .send_opcode = MGMT_OP_SET_POWERED,
8081 .send_param = set_powered_on_param,
8082 .send_len = sizeof(set_powered_on_param),
8083 .expect_status = MGMT_STATUS_SUCCESS,
8084 .expect_param = set_powered_adv_instance_settings_param,
8085 .expect_len = sizeof(set_powered_adv_instance_settings_param),
8086 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_ENABLE,
8087 .expect_hci_param = set_ext_adv_on_set_adv_enable_param,
8088 .expect_hci_len = sizeof(set_ext_adv_on_set_adv_enable_param),
8091 static const uint8_t set_ext_adv_data_txpwr[] = {
8093 0x03, /* complete data */
8094 0x01, /* controller should not fragment */
8095 0x03, /* adv data len */
8097 0x0a, /* AD type: tx power */
8098 0x00, /* tx power */
8101 static const struct generic_data add_ext_advertising_success_4 = {
8102 .send_opcode = MGMT_OP_SET_ADVERTISING,
8103 .send_param = set_adv_on_param,
8104 .send_len = sizeof(set_adv_on_param),
8105 .expect_status = MGMT_STATUS_SUCCESS,
8106 .expect_param = set_adv_settings_param_2,
8107 .expect_len = sizeof(set_adv_settings_param_2),
8108 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
8109 .expect_hci_param = set_ext_adv_data_txpwr,
8110 .expect_hci_len = sizeof(set_ext_adv_data_txpwr),
8113 static const struct generic_data add_ext_advertising_success_5 = {
8114 .send_opcode = MGMT_OP_SET_ADVERTISING,
8115 .send_param = set_adv_off_param,
8116 .send_len = sizeof(set_adv_off_param),
8117 .expect_status = MGMT_STATUS_SUCCESS,
8118 .expect_param = set_powered_adv_instance_settings_param,
8119 .expect_len = sizeof(set_powered_adv_instance_settings_param),
8120 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
8121 .expect_hci_param = set_ext_adv_data_test1,
8122 .expect_hci_len = sizeof(set_ext_adv_data_test1),
8125 static const struct generic_data add_ext_advertising_success_6 = {
8126 .setup_settings = settings_powered_le,
8127 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8128 .send_param = add_advertising_param_scanrsp,
8129 .send_len = sizeof(add_advertising_param_scanrsp),
8130 .expect_param = advertising_instance1_param,
8131 .expect_len = sizeof(advertising_instance1_param),
8132 .expect_status = MGMT_STATUS_SUCCESS,
8133 .expect_alt_ev = MGMT_EV_ADVERTISING_ADDED,
8134 .expect_alt_ev_param = advertising_instance1_param,
8135 .expect_alt_ev_len = sizeof(advertising_instance1_param),
8136 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
8137 .expect_hci_param = set_ext_adv_data_uuid,
8138 .expect_hci_len = sizeof(set_ext_adv_data_uuid),
8141 static const uint8_t set_ext_scan_rsp_uuid[] = {
8143 0x03, /* complete data */
8144 0x01, /* controller should not fragment */
8145 0x0a, /* scan rsp data len */
8147 0x19, /* AD type: external appearance */
8148 0x40, 0x03, /* some custom appearance */
8150 0x03, /* AD type: all 16 bit service class UUIDs */
8151 0x0d, 0x18, 0x0f, 0x18, /* heart rate monitor, battery service */
8154 static const struct generic_data add_ext_advertising_success_7 = {
8155 .setup_settings = settings_powered_le,
8156 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8157 .send_param = add_advertising_param_scanrsp,
8158 .send_len = sizeof(add_advertising_param_scanrsp),
8159 .expect_param = advertising_instance1_param,
8160 .expect_len = sizeof(advertising_instance1_param),
8161 .expect_status = MGMT_STATUS_SUCCESS,
8162 .expect_alt_ev = MGMT_EV_ADVERTISING_ADDED,
8163 .expect_alt_ev_param = advertising_instance1_param,
8164 .expect_alt_ev_len = sizeof(advertising_instance1_param),
8165 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_RSP_DATA,
8166 .expect_hci_param = set_ext_scan_rsp_uuid,
8167 .expect_hci_len = sizeof(set_ext_scan_rsp_uuid),
8170 static uint8_t set_connectable_on_ext_adv_param[] = {
8172 0x13, 0x00, /* Event type */
8173 0x00, 0x08, 0x00, /* min_interval */
8174 0x00, 0x08, 0x00, /* max_interval */
8175 0x07, /* channel_map */
8176 0x00, /* own_addr_type */
8177 0x00, /* peer_addr_type */
8178 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
8179 0x00, /* filter_policy */
8181 0x01, /* Primary PHY */
8182 0x00, /* primary adv max skip */
8183 0x01, /* Secondary PHY */
8185 0x00, /* Scan req notification */
8188 static const struct generic_data add_ext_advertising_success_8 = {
8189 .setup_settings = settings_powered_le,
8190 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8191 .send_param = add_advertising_param_connectable,
8192 .send_len = sizeof(add_advertising_param_connectable),
8193 .expect_param = advertising_instance1_param,
8194 .expect_len = sizeof(advertising_instance1_param),
8195 .expect_status = MGMT_STATUS_SUCCESS,
8196 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
8197 .expect_hci_param = set_connectable_on_ext_adv_param,
8198 .expect_hci_len = sizeof(set_connectable_on_ext_adv_param),
8201 static const uint8_t set_ext_adv_data_general_discov[] = {
8203 0x03, /* complete data */
8204 0x01, /* controller should not fragment */
8205 0x0c, /* adv data len */
8207 0x01, /* AD type: flags */
8208 0x02, /* general discoverable */
8210 0x02, /* AD type: some 16bit service class UUIDs */
8211 0x0d, 0x18, /* heart rate monitor */
8213 0xff, /* AD type: manufacturer specific data */
8214 0x01, 0x02, 0x03, /* custom advertising data */
8217 static const uint8_t set_ext_adv_data_limited_discov[] = {
8219 0x03, /* complete data */
8220 0x01, /* controller should not fragment */
8221 0x0c, /* adv data len */
8223 0x01, /* AD type: flags */
8224 0x01, /* limited discoverable */
8225 /* rest: same as before */
8226 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
8229 static const uint8_t set_ext_adv_data_uuid_txpwr[] = {
8231 0x03, /* complete data */
8232 0x01, /* controller should not fragment */
8233 0x0c, /* adv data len */
8235 0x02, /* AD type: some 16bit service class UUIDs */
8236 0x0d, 0x18, /* heart rate monitor */
8238 0xff, /* AD type: manufacturer specific data */
8239 0x01, 0x02, 0x03, /* custom advertising data */
8241 0x0a, /* AD type: tx power */
8242 0x00, /* tx power */
8245 static const struct generic_data add_ext_advertising_success_9 = {
8246 .setup_settings = settings_powered_le,
8247 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8248 .send_param = add_advertising_param_general_discov,
8249 .send_len = sizeof(add_advertising_param_general_discov),
8250 .expect_param = advertising_instance1_param,
8251 .expect_len = sizeof(advertising_instance1_param),
8252 .expect_status = MGMT_STATUS_SUCCESS,
8253 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
8254 .expect_hci_param = set_ext_adv_data_general_discov,
8255 .expect_hci_len = sizeof(set_ext_adv_data_general_discov),
8258 static const struct generic_data add_ext_advertising_success_10 = {
8259 .setup_settings = settings_powered_le,
8260 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8261 .send_param = add_advertising_param_limited_discov,
8262 .send_len = sizeof(add_advertising_param_limited_discov),
8263 .expect_param = advertising_instance1_param,
8264 .expect_len = sizeof(advertising_instance1_param),
8265 .expect_status = MGMT_STATUS_SUCCESS,
8266 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
8267 .expect_hci_param = set_ext_adv_data_limited_discov,
8268 .expect_hci_len = sizeof(set_ext_adv_data_limited_discov),
8271 static const struct generic_data add_ext_advertising_success_11 = {
8272 .setup_settings = settings_powered_le_discoverable,
8273 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8274 .send_param = add_advertising_param_managed,
8275 .send_len = sizeof(add_advertising_param_managed),
8276 .expect_param = advertising_instance1_param,
8277 .expect_len = sizeof(advertising_instance1_param),
8278 .expect_status = MGMT_STATUS_SUCCESS,
8279 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
8280 .expect_hci_param = set_ext_adv_data_general_discov,
8281 .expect_hci_len = sizeof(set_ext_adv_data_general_discov),
8284 static const struct generic_data add_ext_advertising_success_12 = {
8285 .setup_settings = settings_powered_le_discoverable,
8286 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8287 .send_param = add_advertising_param_txpwr,
8288 .send_len = sizeof(add_advertising_param_txpwr),
8289 .expect_param = advertising_instance1_param,
8290 .expect_len = sizeof(advertising_instance1_param),
8291 .expect_status = MGMT_STATUS_SUCCESS,
8292 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
8293 .expect_hci_param = set_ext_adv_data_uuid_txpwr,
8294 .expect_hci_len = sizeof(set_ext_adv_data_uuid_txpwr),
8297 static uint8_t set_connectable_off_scan_ext_adv_param[] = {
8299 0x12, 0x00, /* Event type */
8300 0x00, 0x08, 0x00, /* min_interval */
8301 0x00, 0x08, 0x00, /* max_interval */
8302 0x07, /* channel_map */
8303 0x01, /* own_addr_type */
8304 0x00, /* peer_addr_type */
8305 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
8306 0x00, /* filter_policy */
8308 0x01, /* Primary PHY */
8309 0x00, /* primary adv max skip */
8310 0x01, /* Secondary PHY */
8312 0x00, /* Scan req notification */
8315 static const struct generic_data add_ext_advertising_success_13 = {
8316 .setup_settings = settings_powered_le,
8317 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8318 .send_param = add_advertising_param_scanrsp,
8319 .send_len = sizeof(add_advertising_param_scanrsp),
8320 .expect_param = advertising_instance1_param,
8321 .expect_len = sizeof(advertising_instance1_param),
8322 .expect_status = MGMT_STATUS_SUCCESS,
8323 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
8324 .expect_hci_param = set_connectable_off_scan_ext_adv_param,
8325 .expect_hci_len = sizeof(set_connectable_off_scan_ext_adv_param),
8328 static uint8_t set_connectable_off_ext_adv_param[] = {
8330 0x10, 0x00, /* Event type */
8331 0x00, 0x08, 0x00, /* min_interval */
8332 0x00, 0x08, 0x00, /* max_interval */
8333 0x07, /* channel_map */
8334 0x01, /* own_addr_type */
8335 0x00, /* peer_addr_type */
8336 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
8337 0x00, /* filter_policy */
8339 0x01, /* Primary PHY */
8340 0x00, /* primary adv max skip */
8341 0x01, /* Secondary PHY */
8343 0x00, /* Scan req notification */
8346 static const struct generic_data add_ext_advertising_success_14 = {
8347 .setup_settings = settings_powered_le,
8348 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8349 .send_param = add_advertising_param_uuid,
8350 .send_len = sizeof(add_advertising_param_uuid),
8351 .expect_param = advertising_instance1_param,
8352 .expect_len = sizeof(advertising_instance1_param),
8353 .expect_status = MGMT_STATUS_SUCCESS,
8354 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
8355 .expect_hci_param = set_connectable_off_ext_adv_param,
8356 .expect_hci_len = sizeof(set_connectable_off_ext_adv_param),
8359 static const struct generic_data add_ext_advertising_success_15 = {
8360 .setup_settings = settings_powered_le_connectable,
8361 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8362 .send_param = add_advertising_param_uuid,
8363 .send_len = sizeof(add_advertising_param_uuid),
8364 .expect_param = advertising_instance1_param,
8365 .expect_len = sizeof(advertising_instance1_param),
8366 .expect_status = MGMT_STATUS_SUCCESS,
8367 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
8368 .expect_hci_param = set_connectable_on_ext_adv_param,
8369 .expect_hci_len = sizeof(set_connectable_on_ext_adv_param),
8372 static uint8_t preset_connectable_on_ext_adv_param[] = {
8374 0x13, 0x00, /* Event type */
8375 0x00, 0x08, 0x00, /* min_interval */
8376 0x00, 0x08, 0x00, /* max_interval */
8377 0x07, /* channel_map */
8378 0x00, /* own_addr_type */
8379 0x00, /* peer_addr_type */
8380 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
8381 0x00, /* filter_policy */
8382 0x00, /* Tx power */
8383 0x01, /* Primary PHY */
8384 0x00, /* primary adv max skip */
8385 0x01, /* Secondary PHY */
8387 0x00, /* Scan req notification */
8390 static const struct generic_data add_ext_advertising_success_16 = {
8391 .send_opcode = MGMT_OP_SET_CONNECTABLE,
8392 .send_param = set_connectable_on_param,
8393 .send_len = sizeof(set_connectable_on_param),
8394 .expect_status = MGMT_STATUS_SUCCESS,
8395 .expect_param = set_connectable_settings_param_3,
8396 .expect_len = sizeof(set_connectable_settings_param_3),
8397 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
8398 .expect_hci_param = preset_connectable_on_ext_adv_param,
8399 .expect_hci_len = sizeof(preset_connectable_on_ext_adv_param),
8402 static uint8_t preset_connectable_off_ext_adv_param[] = {
8404 0x10, 0x00, /* Event type */
8405 0x00, 0x08, 0x00, /* min_interval */
8406 0x00, 0x08, 0x00, /* max_interval */
8407 0x07, /* channel_map */
8408 0x01, /* own_addr_type */
8409 0x00, /* peer_addr_type */
8410 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
8411 0x00, /* filter_policy */
8412 0x00, /* Tx power */
8413 0x01, /* Primary PHY */
8414 0x00, /* primary adv max skip */
8415 0x01, /* Secondary PHY */
8417 0x00, /* Scan req notification */
8420 static const struct generic_data add_ext_advertising_success_17 = {
8421 .send_opcode = MGMT_OP_SET_CONNECTABLE,
8422 .send_param = set_connectable_off_param,
8423 .send_len = sizeof(set_connectable_off_param),
8424 .expect_status = MGMT_STATUS_SUCCESS,
8425 .expect_param = set_le_settings_param_2,
8426 .expect_len = sizeof(set_le_settings_param_2),
8427 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
8428 .expect_hci_param = preset_connectable_off_ext_adv_param,
8429 .expect_hci_len = sizeof(preset_connectable_off_ext_adv_param),
8432 static const struct generic_data add_ext_advertising_le_off = {
8433 .send_opcode = MGMT_OP_SET_LE,
8434 .send_param = set_le_off_param,
8435 .send_len = sizeof(set_le_off_param),
8436 .expect_status = MGMT_STATUS_SUCCESS,
8437 .expect_param = set_le_settings_param_off,
8438 .expect_len = sizeof(set_le_settings_param_off),
8439 .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
8440 .expect_alt_ev_param = advertising_instance1_param,
8441 .expect_alt_ev_len = sizeof(advertising_instance1_param),
8444 static const struct generic_data add_ext_advertising_success_18 = {
8445 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8446 .send_param = add_advertising_param_uuid,
8447 .send_len = sizeof(add_advertising_param_uuid),
8448 .expect_param = advertising_instance1_param,
8449 .expect_len = sizeof(advertising_instance1_param),
8450 .expect_status = MGMT_STATUS_SUCCESS,
8451 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
8452 .expect_hci_param = set_ext_adv_data_uuid,
8453 .expect_hci_len = sizeof(set_ext_adv_data_uuid),
8456 static const char set_ext_adv_disable_param[] = {
8460 static const char set_ext_adv_disable_param_1[] = {
8461 0x00, 0x01, 0x01, 0x00, 0x00, 0x00
8464 static const struct generic_data add_ext_advertising_timeout_expired = {
8465 .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
8466 .expect_alt_ev_param = advertising_instance1_param,
8467 .expect_alt_ev_len = sizeof(advertising_instance1_param),
8470 static const struct generic_data remove_ext_advertising_fail_1 = {
8471 .send_opcode = MGMT_OP_REMOVE_ADVERTISING,
8472 .send_param = remove_advertising_param_1,
8473 .send_len = sizeof(remove_advertising_param_1),
8474 .expect_status = MGMT_STATUS_INVALID_PARAMS,
8477 static const struct generic_data remove_ext_advertising_success_1 = {
8478 .send_opcode = MGMT_OP_REMOVE_ADVERTISING,
8479 .send_param = remove_advertising_param_1,
8480 .send_len = sizeof(remove_advertising_param_1),
8481 .expect_status = MGMT_STATUS_SUCCESS,
8482 .expect_param = remove_advertising_param_1,
8483 .expect_len = sizeof(remove_advertising_param_1),
8484 .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
8485 .expect_alt_ev_param = advertising_instance1_param,
8486 .expect_alt_ev_len = sizeof(advertising_instance1_param),
8487 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_ENABLE,
8488 .expect_hci_param = set_ext_adv_disable_param_1,
8489 .expect_hci_len = sizeof(set_ext_adv_disable_param_1),
8492 static const struct generic_data remove_ext_advertising_success_2 = {
8493 .send_opcode = MGMT_OP_REMOVE_ADVERTISING,
8494 .send_param = remove_advertising_param_2,
8495 .send_len = sizeof(remove_advertising_param_2),
8496 .expect_status = MGMT_STATUS_SUCCESS,
8497 .expect_param = remove_advertising_param_2,
8498 .expect_len = sizeof(remove_advertising_param_2),
8499 .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
8500 .expect_alt_ev_param = advertising_instance1_param,
8501 .expect_alt_ev_len = sizeof(advertising_instance1_param),
8502 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_ENABLE,
8503 .expect_hci_param = set_ext_adv_disable_param,
8504 .expect_hci_len = sizeof(set_ext_adv_disable_param),
8507 static const uint8_t set_ext_adv_data_test2[] = {
8509 0x03, /* complete data */
8510 0x01, /* controller should not fragment */
8511 0x07, /* adv data len */
8513 0x08, /* AD type: shortened local name */
8514 0x74, 0x65, 0x73, 0x74, 0x32, /* "test2" */
8517 static const struct generic_data multi_ext_advertising = {
8518 .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
8519 .expect_alt_ev_param = advertising_instance1_param,
8520 .expect_alt_ev_len = sizeof(advertising_instance1_param),
8523 static const struct generic_data multi_ext_advertising_add_second = {
8524 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8525 .send_param = add_advertising_param_test2,
8526 .send_len = sizeof(add_advertising_param_test2),
8527 .expect_param = advertising_instance2_param,
8528 .expect_len = sizeof(advertising_instance2_param),
8529 .expect_status = MGMT_STATUS_SUCCESS,
8530 .expect_alt_ev = MGMT_EV_ADVERTISING_ADDED,
8531 .expect_alt_ev_param = advertising_instance2_param,
8532 .expect_alt_ev_len = sizeof(advertising_instance2_param),
8533 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
8534 .expect_hci_param = set_ext_adv_data_test2,
8535 .expect_hci_len = sizeof(set_ext_adv_data_test2),
8538 static const char multi_ext_adv_hci_params_1[] = {
8540 0x10, 0x00, /* evt_properties */
8541 0x00, 0x08, 0x00, /* min_interval */
8542 0x00, 0x08, 0x00, /* max_interval */
8543 0x07, /* channel_map */
8544 0x01, /* own_addr_type */
8545 0x00, /* peer_addr_type */
8546 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
8547 0x00, /* filter_policy */
8548 0x7f, /* tx_power */
8549 0x01, /* primary_phy */
8550 0x00, /* secondary_max_skip */
8551 0x01, /* secondary_phy */
8553 0x00, /* notif_enable */
8556 static const char multi_ext_adv_hci_params_2[] = {
8558 0x10, 0x00, /* evt_properties */
8559 0x00, 0x08, 0x00, /* min_interval */
8560 0x00, 0x08, 0x00, /* max_interval */
8561 0x07, /* channel_map */
8562 0x01, /* own_addr_type */
8563 0x00, /* peer_addr_type */
8564 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
8565 0x00, /* filter_policy */
8566 0x7f, /* tx_power */
8567 0x01, /* primary_phy */
8568 0x00, /* secondary_max_skip */
8569 0x01, /* secondary_phy */
8571 0x00, /* notif_enable */
8574 static const uint8_t le_set_ext_adv_enable_inst_2[] = {
8575 0x01, 0x01, 0x02, 0x64, 0x00, 0x00,
8578 static const struct hci_cmd_data multi_ext_adv_add_second_hci_cmds[] = {
8580 .opcode = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
8581 .len = sizeof(multi_ext_adv_hci_params_2),
8582 .param = multi_ext_adv_hci_params_2,
8585 .opcode = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
8586 .len = sizeof(set_ext_adv_data_test2),
8587 .param = set_ext_adv_data_test2,
8590 .opcode = BT_HCI_CMD_LE_SET_EXT_ADV_ENABLE,
8591 .len = sizeof(le_set_ext_adv_enable_inst_2),
8592 .param = le_set_ext_adv_enable_inst_2,
8596 static const struct generic_data multi_ext_advertising_add_second_2 = {
8597 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8598 .send_param = add_advertising_param_test2,
8599 .send_len = sizeof(add_advertising_param_test2),
8600 .expect_param = advertising_instance2_param,
8601 .expect_len = sizeof(advertising_instance2_param),
8602 .expect_status = MGMT_STATUS_SUCCESS,
8603 .expect_alt_ev = MGMT_EV_ADVERTISING_ADDED,
8604 .expect_alt_ev_param = advertising_instance2_param,
8605 .expect_alt_ev_len = sizeof(advertising_instance2_param),
8606 .expect_hci_list = multi_ext_adv_add_second_hci_cmds,
8609 /* add advertising command for a second instance */
8610 static const uint8_t add_advertising_param_test4[] = {
8611 0x04, /* adv instance */
8612 0x00, 0x00, 0x00, 0x00, /* flags: none */
8613 0x00, 0x00, /* duration: default */
8614 0x01, 0x00, /* timeout: 1 second */
8615 0x07, /* adv data len */
8616 0x00, /* scan rsp len */
8619 0x08, /* AD type: shortened local name */
8620 0x74, 0x65, 0x73, 0x74, 0x32, /* "test2" */
8623 static const struct generic_data multi_ext_advertising_add_adv_4 = {
8624 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8625 .send_param = add_advertising_param_test4,
8626 .send_len = sizeof(add_advertising_param_test4),
8627 .expect_status = MGMT_STATUS_INVALID_PARAMS,
8630 static const struct hci_cmd_data multi_ext_adv_remove_adv_hci_cmds[] = {
8632 .opcode = BT_HCI_CMD_LE_SET_EXT_ADV_ENABLE,
8633 .len = sizeof(set_ext_adv_disable_param_1),
8634 .param = set_ext_adv_disable_param_1,
8637 .opcode = BT_HCI_CMD_LE_REMOVE_ADV_SET,
8638 .len = sizeof(advertising_instance1_param),
8639 .param = advertising_instance1_param,
8643 static const struct generic_data multi_ext_advertising_remove = {
8644 .send_opcode = MGMT_OP_REMOVE_ADVERTISING,
8645 .send_param = advertising_instance1_param,
8646 .send_len = sizeof(advertising_instance1_param),
8647 .expect_param = advertising_instance1_param,
8648 .expect_len = sizeof(advertising_instance1_param),
8649 .expect_status = MGMT_STATUS_SUCCESS,
8650 .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
8651 .expect_alt_ev_param = advertising_instance1_param,
8652 .expect_alt_ev_len = sizeof(advertising_instance1_param),
8653 .expect_hci_list = multi_ext_adv_remove_adv_hci_cmds,
8656 static const uint8_t advertising_instance0_param[] = {
8660 static const uint8_t set_ext_adv_remove_all_param[] = {
8664 static const struct hci_cmd_data multi_ext_adv_remove_all_adv_hci_cmds[] = {
8666 .opcode = BT_HCI_CMD_LE_SET_EXT_ADV_ENABLE,
8667 .len = sizeof(set_ext_adv_remove_all_param),
8668 .param = set_ext_adv_remove_all_param,
8671 .opcode = BT_HCI_CMD_LE_CLEAR_ADV_SETS,
8675 static const struct generic_data multi_ext_advertising_remove_all = {
8676 .send_opcode = MGMT_OP_REMOVE_ADVERTISING,
8677 .send_param = advertising_instance0_param,
8678 .send_len = sizeof(advertising_instance0_param),
8679 .expect_param = advertising_instance0_param,
8680 .expect_len = sizeof(advertising_instance0_param),
8681 .expect_status = MGMT_STATUS_SUCCESS,
8682 .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
8683 .expect_alt_ev_param = advertising_instance2_param,
8684 .expect_alt_ev_len = sizeof(advertising_instance2_param),
8685 .expect_hci_list = multi_ext_adv_remove_all_adv_hci_cmds,
8688 static const struct hci_cmd_data multi_ext_adv_add_2_advs_hci_cmds[] = {
8690 .opcode = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
8691 .len = sizeof(multi_ext_adv_hci_params_2),
8692 .param = multi_ext_adv_hci_params_2,
8695 .opcode = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
8696 .len = sizeof(set_ext_adv_data_test2),
8697 .param = set_ext_adv_data_test2,
8700 .opcode = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
8701 .len = sizeof(multi_ext_adv_hci_params_1),
8702 .param = multi_ext_adv_hci_params_1,
8705 .opcode = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
8706 .len = sizeof(set_ext_adv_data_test1),
8707 .param = set_ext_adv_data_test1,
8711 static const struct generic_data multi_ext_advertising_add_no_power = {
8712 .send_opcode = MGMT_OP_SET_POWERED,
8713 .send_param = set_powered_on_param,
8714 .send_len = sizeof(set_powered_on_param),
8715 .expect_status = MGMT_STATUS_SUCCESS,
8716 .expect_param = set_powered_adv_instance_settings_param,
8717 .expect_len = sizeof(set_powered_adv_instance_settings_param),
8718 .expect_hci_list = multi_ext_adv_add_2_advs_hci_cmds,
8721 static const struct generic_data add_ext_advertising_empty_scrsp = {
8722 .setup_settings = settings_powered_le,
8723 .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
8724 .setup_send_param = set_local_name_param,
8725 .setup_send_len = sizeof(set_local_name_param),
8726 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8727 .send_param = add_advertising_param_empty,
8728 .send_len = sizeof(add_advertising_param_empty),
8729 .expect_status = MGMT_STATUS_SUCCESS,
8730 .expect_param = advertising_instance1_param,
8731 .expect_len = sizeof(advertising_instance1_param),
8734 static const struct generic_data add_ext_advertising_scrsp_data_only_ok = {
8735 .setup_settings = settings_powered_le,
8736 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8737 .send_param = add_advertising_param_scrsp_data_only_ok,
8738 .send_len = sizeof(add_advertising_param_scrsp_data_only_ok),
8739 .expect_status = MGMT_STATUS_SUCCESS,
8740 .expect_param = advertising_instance1_param,
8741 .expect_len = sizeof(advertising_instance1_param),
8744 static const struct generic_data add_ext_advertising_scrsp_data_only_too_long = {
8745 .setup_settings = settings_powered_le,
8746 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8747 .send_param = add_advertising_param_scrsp_data_only_too_long,
8748 .send_len = sizeof(add_advertising_param_scrsp_data_only_too_long),
8749 .expect_status = MGMT_STATUS_INVALID_PARAMS,
8750 .expect_param = NULL,
8754 static const struct generic_data add_ext_advertising_scrsp_appear_data_ok = {
8755 .setup_settings = settings_powered_le,
8756 .setup_send_opcode = MGMT_OP_SET_APPEARANCE,
8757 .setup_send_param = set_appearance_param,
8758 .setup_send_len = sizeof(set_appearance_param),
8759 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8760 .send_param = add_advertising_param_scrsp_appear_data_ok,
8761 .send_len = sizeof(add_advertising_param_scrsp_appear_data_ok),
8762 .expect_status = MGMT_STATUS_SUCCESS,
8763 .expect_param = advertising_instance1_param,
8764 .expect_len = sizeof(advertising_instance1_param),
8767 static const struct generic_data add_ext_advertising_scrsp_appear_data_too_long = {
8768 .setup_settings = settings_powered_le,
8769 .setup_send_opcode = MGMT_OP_SET_APPEARANCE,
8770 .setup_send_param = set_appearance_param,
8771 .setup_send_len = sizeof(set_appearance_param),
8772 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8773 .send_param = add_advertising_param_scrsp_appear_data_too_long,
8774 .send_len = sizeof(add_advertising_param_scrsp_appear_data_too_long),
8775 .expect_status = MGMT_STATUS_INVALID_PARAMS,
8776 .expect_param = NULL,
8780 static const struct generic_data add_ext_advertising_scrsp_appear_null = {
8781 .setup_settings = settings_powered_le,
8782 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8783 .send_param = add_advertising_param_scrsp_appear_null,
8784 .send_len = sizeof(add_advertising_param_scrsp_appear_null),
8785 .expect_status = MGMT_STATUS_SUCCESS,
8786 .expect_param = advertising_instance1_param,
8787 .expect_len = sizeof(advertising_instance1_param),
8790 static const uint8_t ext_scan_rsp_data_empty[] = {
8792 0x03, /* complete data */
8793 0x01, /* controller should not fragment */
8794 0x01, /* scan rsp data len */
8795 0x00, /* scan rsp data */
8798 static const struct generic_data add_ext_advertising_no_name_set = {
8799 .setup_settings = settings_powered_le,
8800 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8801 .send_param = add_advertising_empty_param,
8802 .send_len = sizeof(add_advertising_empty_param),
8803 .expect_status = MGMT_STATUS_SUCCESS,
8804 .expect_param = advertising_instance1_param,
8805 .expect_len = sizeof(advertising_instance1_param),
8806 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_RSP_DATA,
8807 .expect_hci_param = ext_scan_rsp_data_empty,
8808 .expect_hci_len = sizeof(ext_scan_rsp_data_empty),
8811 static const uint8_t set_ext_scan_rsp_data_name_fits_in_scrsp[] = {
8813 0x03, /* complete data */
8814 0x01, /* controller should not fragment */
8815 0x0c, /* Scan rsp data len */
8816 0x0b, /* Local name data len */
8817 0x09, /* Complete name */
8819 0x54, 0x65, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x00,
8822 static const struct generic_data add_ext_advertising_name_fits_in_scrsp = {
8823 .setup_settings = settings_powered_le,
8824 .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
8825 .setup_send_param = &set_local_name_cp,
8826 .setup_send_len = sizeof(set_local_name_cp),
8827 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8828 .send_param = add_advertising_param_name,
8829 .send_len = sizeof(add_advertising_param_name),
8830 .expect_status = MGMT_STATUS_SUCCESS,
8831 .expect_param = advertising_instance1_param,
8832 .expect_len = sizeof(advertising_instance1_param),
8833 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_RSP_DATA,
8834 .expect_hci_param = set_ext_scan_rsp_data_name_fits_in_scrsp,
8835 .expect_hci_len = sizeof(set_ext_scan_rsp_data_name_fits_in_scrsp),
8838 static const uint8_t set_ext_scan_rsp_data_shortened_name_fits[] = {
8840 0x03, /* complete data */
8841 0x01, /* controller should not fragment */
8842 0x0d, /* Scan rsp data len */
8843 0x0c, /* Local name data len */
8844 0x08, /* Short name */
8846 0x54, 0x65, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x31, 0x00,
8849 static const struct generic_data add_ext_advertising_shortened_name_in_scrsp = {
8850 .setup_settings = settings_powered_le,
8851 .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
8852 .setup_send_param = &set_local_name_longer_cp,
8853 .setup_send_len = sizeof(set_local_name_longer_cp),
8854 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8855 .send_param = add_advertising_param_name,
8856 .send_len = sizeof(add_advertising_param_name),
8857 .expect_status = MGMT_STATUS_SUCCESS,
8858 .expect_param = advertising_instance1_param,
8859 .expect_len = sizeof(advertising_instance1_param),
8860 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_RSP_DATA,
8861 .expect_hci_param = set_ext_scan_rsp_data_shortened_name_fits,
8862 .expect_hci_len = sizeof(set_ext_scan_rsp_data_shortened_name_fits),
8865 static const uint8_t set_ext_scan_rsp_data_param_name_data_ok[] = {
8867 0x03, /* complete data */
8868 0x01, /* controller should not fragment */
8869 0x1e, /* Scan rsp data len */
8871 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
8872 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
8873 0x0b, /* Local name data len */
8874 0x09, /* Complete name */
8875 0x54, 0x65, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x00,
8879 static const struct generic_data add_ext_advertising_name_data_ok = {
8880 .setup_settings = settings_powered_le,
8881 .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
8882 .setup_send_param = &set_local_name_cp,
8883 .setup_send_len = sizeof(set_local_name_cp),
8884 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8885 .send_param = add_advertising_param_name_data_ok,
8886 .send_len = sizeof(add_advertising_param_name_data_ok),
8887 .expect_status = MGMT_STATUS_SUCCESS,
8888 .expect_param = advertising_instance1_param,
8889 .expect_len = sizeof(advertising_instance1_param),
8890 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_RSP_DATA,
8891 .expect_hci_param = set_ext_scan_rsp_data_param_name_data_ok,
8892 .expect_hci_len = sizeof(set_ext_scan_rsp_data_param_name_data_ok),
8895 static const struct generic_data add_ext_advertising_name_data_inv = {
8896 .setup_settings = settings_powered_le,
8897 .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
8898 .setup_send_param = &set_local_name_cp,
8899 .setup_send_len = sizeof(set_local_name_cp),
8900 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8901 .send_param = add_advertising_param_name_data_inv,
8902 .send_len = sizeof(add_advertising_param_name_data_inv),
8903 .expect_status = MGMT_STATUS_INVALID_PARAMS,
8904 .expect_param = NULL,
8908 static const uint8_t set_ext_scan_rsp_data_name_data_appear[] = {
8910 0x03, /* complete data */
8911 0x01, /* controller should not fragment */
8912 0x1e, /* Scan rsp data len */
8913 0x03, /* appearance len */
8914 0x19, /* EIR_APPEARANCE */
8915 0x54, 0x65, /* appearance value */
8917 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
8918 0x00, 0x00, 0x00, 0x00,
8919 0x0b, /* Local name data len */
8920 0x09, /* Complete name */
8921 0x54, 0x65, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x00,
8925 static const struct generic_data add_ext_advertising_name_data_appear = {
8926 .setup_settings = settings_powered_le,
8927 .setup_mgmt_cmd_arr = add_advertising_mgmt_cmd_arr,
8928 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8929 .send_param = add_advertising_param_name_data_appear,
8930 .send_len = sizeof(add_advertising_param_name_data_appear),
8931 .expect_status = MGMT_STATUS_SUCCESS,
8932 .expect_param = advertising_instance1_param,
8933 .expect_len = sizeof(advertising_instance1_param),
8934 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_RSP_DATA,
8935 .expect_hci_param = set_ext_scan_rsp_data_name_data_appear,
8936 .expect_hci_len = sizeof(set_ext_scan_rsp_data_name_data_appear),
8939 /* simple add advertising command */
8940 static const uint8_t add_advertising_1m_param_uuid[] = {
8941 0x01, /* adv instance */
8942 0x80, 0x00, 0x00, 0x00, /* flags: 1m */
8943 0x00, 0x00, /* duration: default */
8944 0x00, 0x00, /* timeout: none */
8945 0x09, /* adv data len */
8946 0x00, /* scan rsp len */
8949 0x02, /* AD type: some 16 bit service class UUIDs */
8950 0x0d, 0x18, /* heart rate monitor */
8952 0xff, /* AD type: manufacturer specific data */
8953 0x01, 0x02, 0x03, /* custom advertising data */
8956 static uint8_t set_connectable_off_ext_1m_adv_param[] = {
8958 0x00, 0x00, /* Event type */
8959 0x00, 0x08, 0x00, /* min_interval */
8960 0x00, 0x08, 0x00, /* max_interval */
8961 0x07, /* channel_map */
8962 0x01, /* own_addr_type */
8963 0x00, /* peer_addr_type */
8964 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
8965 0x00, /* filter_policy */
8967 0x01, /* Primary PHY */
8968 0x00, /* primary adv max skip */
8969 0x01, /* Secondary PHY */
8971 0x00, /* Scan req notification */
8974 static const struct generic_data add_ext_advertising_success_1m = {
8975 .setup_settings = settings_powered_le,
8976 .send_opcode = MGMT_OP_ADD_ADVERTISING,
8977 .send_param = add_advertising_1m_param_uuid,
8978 .send_len = sizeof(add_advertising_1m_param_uuid),
8979 .expect_param = advertising_instance1_param,
8980 .expect_len = sizeof(advertising_instance1_param),
8981 .expect_status = MGMT_STATUS_SUCCESS,
8982 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
8983 .expect_hci_param = set_connectable_off_ext_1m_adv_param,
8984 .expect_hci_len = sizeof(set_connectable_off_ext_1m_adv_param),
8987 /* simple add advertising command */
8988 static const uint8_t add_advertising_2m_param_uuid[] = {
8989 0x01, /* adv instance */
8990 0x00, 0x01, 0x00, 0x00, /* flags: 2m */
8991 0x00, 0x00, /* duration: default */
8992 0x00, 0x00, /* timeout: none */
8993 0x09, /* adv data len */
8994 0x00, /* scan rsp len */
8997 0x02, /* AD type: some 16 bit service class UUIDs */
8998 0x0d, 0x18, /* heart rate monitor */
9000 0xff, /* AD type: manufacturer specific data */
9001 0x01, 0x02, 0x03, /* custom advertising data */
9004 static uint8_t set_connectable_off_ext_2m_adv_param[] = {
9006 0x00, 0x00, /* Event type */
9007 0x00, 0x08, 0x00, /* min_interval */
9008 0x00, 0x08, 0x00, /* max_interval */
9009 0x07, /* channel_map */
9010 0x01, /* own_addr_type */
9011 0x00, /* peer_addr_type */
9012 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
9013 0x00, /* filter_policy */
9015 0x01, /* Primary PHY */
9016 0x00, /* primary adv max skip */
9017 0x02, /* Secondary PHY */
9019 0x00, /* Scan req notification */
9022 static const struct generic_data add_ext_advertising_success_2m = {
9023 .setup_settings = settings_powered_le,
9024 .send_opcode = MGMT_OP_ADD_ADVERTISING,
9025 .send_param = add_advertising_2m_param_uuid,
9026 .send_len = sizeof(add_advertising_2m_param_uuid),
9027 .expect_param = advertising_instance1_param,
9028 .expect_len = sizeof(advertising_instance1_param),
9029 .expect_status = MGMT_STATUS_SUCCESS,
9030 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
9031 .expect_hci_param = set_connectable_off_ext_2m_adv_param,
9032 .expect_hci_len = sizeof(set_connectable_off_ext_2m_adv_param),
9035 /* simple add advertising command */
9036 static const uint8_t add_advertising_coded_param_uuid[] = {
9037 0x01, /* adv instance */
9038 0x00, 0x02, 0x00, 0x00, /* flags: coded */
9039 0x00, 0x00, /* duration: default */
9040 0x00, 0x00, /* timeout: none */
9041 0x09, /* adv data len */
9042 0x00, /* scan rsp len */
9045 0x02, /* AD type: some 16 bit service class UUIDs */
9046 0x0d, 0x18, /* heart rate monitor */
9048 0xff, /* AD type: manufacturer specific data */
9049 0x01, 0x02, 0x03, /* custom advertising data */
9052 static uint8_t set_connectable_off_ext_coded_adv_param[] = {
9054 0x00, 0x00, /* Event type */
9055 0x00, 0x08, 0x00, /* min_interval */
9056 0x00, 0x08, 0x00, /* max_interval */
9057 0x07, /* channel_map */
9058 0x01, /* own_addr_type */
9059 0x00, /* peer_addr_type */
9060 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
9061 0x00, /* filter_policy */
9063 0x03, /* Primary PHY */
9064 0x00, /* primary adv max skip */
9065 0x03, /* Secondary PHY */
9067 0x00, /* Scan req notification */
9070 static const struct generic_data add_ext_advertising_success_coded = {
9071 .setup_settings = settings_powered_le,
9072 .send_opcode = MGMT_OP_ADD_ADVERTISING,
9073 .send_param = add_advertising_coded_param_uuid,
9074 .send_len = sizeof(add_advertising_coded_param_uuid),
9075 .expect_param = advertising_instance1_param,
9076 .expect_len = sizeof(advertising_instance1_param),
9077 .expect_status = MGMT_STATUS_SUCCESS,
9078 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
9079 .expect_hci_param = set_connectable_off_ext_coded_adv_param,
9080 .expect_hci_len = sizeof(set_connectable_off_ext_coded_adv_param),
9083 /* add advertising with scan response data */
9084 static const uint8_t add_advertising_param_scanrsp_1m[] = {
9085 0x01, /* Instance */
9086 0x80, 0x00, 0x00, 0x00, /* Flags: 1m*/
9087 0x00, 0x00, /* Duration */
9088 0x00, 0x00, /* Timeout */
9089 0x09, /* Adv data len */
9090 0x0a, /* scan rsp len */
9091 /* adv data: same as before */
9092 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
9093 /* scan rsp data: */
9095 0x19, /* AD type: external appearance */
9096 0x40, 0x03, /* some custom appearance */
9098 0x03, /* AD type: all 16 bit service class UUIDs */
9099 0x0d, 0x18, /* heart rate monitor */
9100 0x0f, 0x18, /* battery service */
9103 static uint8_t set_connectable_off_scan_ext_pdu_adv_param[] = {
9105 0x02, 0x00, /* Event type */
9106 0x00, 0x08, 0x00, /* min_interval */
9107 0x00, 0x08, 0x00, /* max_interval */
9108 0x07, /* channel_map */
9109 0x01, /* own_addr_type */
9110 0x00, /* peer_addr_type */
9111 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
9112 0x00, /* filter_policy */
9114 0x01, /* Primary PHY */
9115 0x00, /* primary adv max skip */
9116 0x01, /* Secondary PHY */
9118 0x00, /* Scan req notification */
9121 static const struct generic_data add_ext_advertising_success_scannable = {
9122 .setup_settings = settings_powered_le,
9123 .send_opcode = MGMT_OP_ADD_ADVERTISING,
9124 .send_param = add_advertising_param_scanrsp_1m,
9125 .send_len = sizeof(add_advertising_param_scanrsp_1m),
9126 .expect_param = advertising_instance1_param,
9127 .expect_len = sizeof(advertising_instance1_param),
9128 .expect_status = MGMT_STATUS_SUCCESS,
9129 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
9130 .expect_hci_param = set_connectable_off_scan_ext_pdu_adv_param,
9131 .expect_hci_len = sizeof(set_connectable_off_scan_ext_pdu_adv_param),
9134 static uint8_t set_connectable_on_ext_pdu_adv_param[] = {
9136 0x01, 0x00, /* Event type */
9137 0x00, 0x08, 0x00, /* min_interval */
9138 0x00, 0x08, 0x00, /* max_interval */
9139 0x07, /* channel_map */
9140 0x00, /* own_addr_type */
9141 0x00, /* peer_addr_type */
9142 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
9143 0x00, /* filter_policy */
9145 0x01, /* Primary PHY */
9146 0x00, /* primary adv max skip */
9147 0x01, /* Secondary PHY */
9149 0x00, /* Scan req notification */
9152 static const struct generic_data add_ext_advertising_success_connectable = {
9153 .setup_settings = settings_powered_le_connectable,
9154 .send_opcode = MGMT_OP_ADD_ADVERTISING,
9155 .send_param = add_advertising_1m_param_uuid,
9156 .send_len = sizeof(add_advertising_1m_param_uuid),
9157 .expect_param = advertising_instance1_param,
9158 .expect_len = sizeof(advertising_instance1_param),
9159 .expect_status = MGMT_STATUS_SUCCESS,
9160 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
9161 .expect_hci_param = set_connectable_on_ext_pdu_adv_param,
9162 .expect_hci_len = sizeof(set_connectable_on_ext_pdu_adv_param),
9165 static const struct generic_data add_ext_advertising_success_conn_scan = {
9166 .setup_settings = settings_powered_le_connectable,
9167 .send_opcode = MGMT_OP_ADD_ADVERTISING,
9168 .send_param = add_advertising_param_scanrsp_1m,
9169 .send_len = sizeof(add_advertising_param_scanrsp_1m),
9170 .expect_param = advertising_instance1_param,
9171 .expect_len = sizeof(advertising_instance1_param),
9172 .expect_status = MGMT_STATUS_SUCCESS,
9173 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
9174 .expect_hci_param = set_connectable_on_ext_pdu_adv_param,
9175 .expect_hci_len = sizeof(set_connectable_on_ext_pdu_adv_param),
9178 static void setup_add_adv_param_1m(struct mgmt_cp_add_advertising *cp,
9181 memset(cp, 0, sizeof(*cp));
9182 cp->instance = instance;
9183 cp->flags = cpu_to_le32(MGMT_ADV_FLAG_SEC_1M);
9184 cp->adv_data_len = TESTER_ADD_ADV_DATA_LEN;
9185 cp->data[0] = TESTER_ADD_ADV_DATA_LEN - 1; /* AD len */
9186 cp->data[1] = 0x08; /* AD type: shortened local name */
9187 cp->data[2] = 't'; /* adv data ... */
9191 cp->data[6] = '0' + instance;
9194 static void setup_add_advertising_1m(const void *test_data)
9196 struct test_data *data = tester_get_data();
9197 struct mgmt_cp_add_advertising *cp;
9198 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
9199 unsigned char param[] = { 0x01 };
9201 tester_print("Adding advertising instance while powered");
9203 cp = (struct mgmt_cp_add_advertising *) adv_param;
9204 setup_add_adv_param_1m(cp, 1);
9206 mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
9207 sizeof(param), ¶m,
9210 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
9211 sizeof(param), ¶m,
9214 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
9215 sizeof(adv_param), adv_param,
9216 setup_add_advertising_callback,
9220 static uint8_t preset_connectable_on_ext_pdu_adv_param[] = {
9222 0x01, 0x00, /* Event type */
9223 0x00, 0x08, 0x00, /* min_interval */
9224 0x00, 0x08, 0x00, /* max_interval */
9225 0x07, /* channel_map */
9226 0x00, /* own_addr_type */
9227 0x00, /* peer_addr_type */
9228 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
9229 0x00, /* filter_policy */
9230 0x00, /* Tx power */
9231 0x01, /* Primary PHY */
9232 0x00, /* primary adv max skip */
9233 0x01, /* Secondary PHY */
9235 0x00, /* Scan req notification */
9238 static const struct generic_data add_ext_advertising_conn_on_1m = {
9239 .send_opcode = MGMT_OP_SET_CONNECTABLE,
9240 .send_param = set_connectable_on_param,
9241 .send_len = sizeof(set_connectable_on_param),
9242 .expect_status = MGMT_STATUS_SUCCESS,
9243 .expect_param = set_connectable_settings_param_3,
9244 .expect_len = sizeof(set_connectable_settings_param_3),
9245 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
9246 .expect_hci_param = preset_connectable_on_ext_pdu_adv_param,
9247 .expect_hci_len = sizeof(preset_connectable_on_ext_pdu_adv_param),
9250 static void setup_add_advertising_connectable_1m(const void *test_data)
9252 struct test_data *data = tester_get_data();
9253 struct mgmt_cp_add_advertising *cp;
9254 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
9255 unsigned char param[] = { 0x01 };
9257 tester_print("Adding advertising instance while connectable");
9259 cp = (struct mgmt_cp_add_advertising *) adv_param;
9260 setup_add_adv_param_1m(cp, 1);
9262 mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
9263 sizeof(param), ¶m,
9266 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
9267 sizeof(param), ¶m,
9270 mgmt_send(data->mgmt, MGMT_OP_SET_CONNECTABLE, data->mgmt_index,
9271 sizeof(param), ¶m,
9274 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
9275 sizeof(adv_param), adv_param,
9276 setup_add_advertising_callback,
9280 static uint8_t preset_connectable_off_ext_1m_adv_param[] = {
9282 0x00, 0x00, /* Event type */
9283 0x00, 0x08, 0x00, /* min_interval */
9284 0x00, 0x08, 0x00, /* max_interval */
9285 0x07, /* channel_map */
9286 0x01, /* own_addr_type */
9287 0x00, /* peer_addr_type */
9288 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
9289 0x00, /* filter_policy */
9290 0x00, /* Tx power */
9291 0x01, /* Primary PHY */
9292 0x00, /* primary adv max skip */
9293 0x01, /* Secondary PHY */
9295 0x00, /* Scan req notification */
9298 static const struct generic_data add_ext_advertising_conn_off_1m = {
9299 .send_opcode = MGMT_OP_SET_CONNECTABLE,
9300 .send_param = set_connectable_off_param,
9301 .send_len = sizeof(set_connectable_off_param),
9302 .expect_status = MGMT_STATUS_SUCCESS,
9303 .expect_param = set_le_settings_param_2,
9304 .expect_len = sizeof(set_le_settings_param_2),
9305 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
9306 .expect_hci_param = preset_connectable_off_ext_1m_adv_param,
9307 .expect_hci_len = sizeof(preset_connectable_off_ext_1m_adv_param),
9310 static const uint8_t get_phy_param[] = {
9311 0xff, 0x7f, 0x00, 0x00, /* All PHYs */
9312 0xfe, 0x79, 0x00, 0x00, /* All PHYs except BR 1M 1SLOT, LE 1M TX & LE 1M RX */
9313 0xff, 0x07, 0x00, 0x00, /* All BREDR PHYs and LE 1M TX & LE 1M RX */
9316 static const struct generic_data get_phy_success = {
9317 .setup_settings = settings_powered_le,
9318 .send_opcode = MGMT_OP_GET_PHY_CONFIGURATION,
9319 .expect_status = MGMT_STATUS_SUCCESS,
9320 .expect_param = get_phy_param,
9321 .expect_len = sizeof(get_phy_param),
9324 static const uint8_t set_phy_2m_param[] = {
9325 0xff, 0x1f, 0x00, 0x00 /* 1mtxrx 2mtxrx */
9328 static const uint8_t set_default_phy_2m_param[] = {
9329 0x00, /* preference is there for tx and rx */
9330 0x03, /* 1mtx, 2mtx */
9331 0x03, /* 1mrx, 2mrx */
9334 static const struct generic_data set_phy_2m_success = {
9335 .setup_settings = settings_powered_le,
9336 .send_opcode = MGMT_OP_SET_PHY_CONFIGURATION,
9337 .send_param = set_phy_2m_param,
9338 .send_len = sizeof(set_phy_2m_param),
9339 .expect_status = MGMT_STATUS_SUCCESS,
9340 .expect_hci_command = BT_HCI_CMD_LE_SET_DEFAULT_PHY,
9341 .expect_hci_param = set_default_phy_2m_param,
9342 .expect_hci_len = sizeof(set_default_phy_2m_param),
9343 .expect_alt_ev = MGMT_EV_PHY_CONFIGURATION_CHANGED,
9344 .expect_alt_ev_param = set_phy_2m_param,
9345 .expect_alt_ev_len = sizeof(set_phy_2m_param),
9348 static const uint8_t set_phy_coded_param[] = {
9349 0xff, 0x67, 0x00, 0x00 /* 1mtx, 1m rx, codedtx codedrx */
9352 static const uint8_t set_default_phy_coded_param[] = {
9353 0x00, /* preference is there for tx and rx */
9354 0x05, /* 1mtx, codedtx */
9355 0x05, /* 1mrx, codedrx */
9358 static const struct generic_data set_phy_coded_success = {
9359 .setup_settings = settings_powered_le,
9360 .send_opcode = MGMT_OP_SET_PHY_CONFIGURATION,
9361 .send_param = set_phy_coded_param,
9362 .send_len = sizeof(set_phy_coded_param),
9363 .expect_status = MGMT_STATUS_SUCCESS,
9364 .expect_hci_command = BT_HCI_CMD_LE_SET_DEFAULT_PHY,
9365 .expect_hci_param = set_default_phy_coded_param,
9366 .expect_hci_len = sizeof(set_default_phy_coded_param),
9367 .expect_alt_ev = MGMT_EV_PHY_CONFIGURATION_CHANGED,
9368 .expect_alt_ev_param = set_phy_coded_param,
9369 .expect_alt_ev_len = sizeof(set_phy_coded_param),
9372 static const uint8_t set_phy_all_param[] = {
9373 0xff, 0x7f, 0x00, 0x00 /* All PHYs */
9376 static const uint8_t set_default_phy_all_param[] = {
9377 0x00, /* preference is there for tx and rx */
9378 0x07, /* 1m 2m coded tx */
9379 0x07, /* 1m 2m coded rx */
9382 static const struct generic_data set_phy_all_success = {
9383 .setup_settings = settings_powered_le,
9384 .send_opcode = MGMT_OP_SET_PHY_CONFIGURATION,
9385 .send_param = set_phy_all_param,
9386 .send_len = sizeof(set_phy_all_param),
9387 .expect_status = MGMT_STATUS_SUCCESS,
9388 .expect_hci_command = BT_HCI_CMD_LE_SET_DEFAULT_PHY,
9389 .expect_hci_param = set_default_phy_all_param,
9390 .expect_hci_len = sizeof(set_default_phy_all_param),
9391 .expect_alt_ev = MGMT_EV_PHY_CONFIGURATION_CHANGED,
9392 .expect_alt_ev_param = set_phy_all_param,
9393 .expect_alt_ev_len = sizeof(set_phy_all_param),
9396 static const uint8_t set_phy_2m_tx_param[] = {
9397 0xff, 0x0f, 0x00, 0x00 /* 1mtxrx, 2m tx */
9400 static const uint8_t set_default_phy_2m_tx_param[] = {
9402 0x03, /* 1m, 2m tx */
9406 static const uint8_t set_phy_2m_tx_evt_param[] = {
9407 0xff, 0x0f, 0x00, 0x00 /* 2m tx 1m rx */
9410 static const struct generic_data set_phy_2m_tx_success = {
9411 .setup_settings = settings_powered_le,
9412 .send_opcode = MGMT_OP_SET_PHY_CONFIGURATION,
9413 .send_param = set_phy_2m_tx_param,
9414 .send_len = sizeof(set_phy_2m_tx_param),
9415 .expect_status = MGMT_STATUS_SUCCESS,
9416 .expect_hci_command = BT_HCI_CMD_LE_SET_DEFAULT_PHY,
9417 .expect_hci_param = set_default_phy_2m_tx_param,
9418 .expect_hci_len = sizeof(set_default_phy_2m_tx_param),
9419 .expect_alt_ev = MGMT_EV_PHY_CONFIGURATION_CHANGED,
9420 .expect_alt_ev_param = set_phy_2m_tx_evt_param,
9421 .expect_alt_ev_len = sizeof(set_phy_2m_tx_evt_param),
9424 static const uint8_t set_phy_2m_rx_param[] = {
9425 0xff, 0x17, 0x00, 0x00 /* 1mtxrx, 2m rx */
9428 static const uint8_t set_default_phy_2m_rx_param[] = {
9434 static const uint8_t set_phy_2m_rx_evt_param[] = {
9435 0xff, 0x17, 0x00, 0x00 /* 2m rx 1m tx */
9438 static const struct generic_data set_phy_2m_rx_success = {
9439 .setup_settings = settings_powered_le,
9440 .send_opcode = MGMT_OP_SET_PHY_CONFIGURATION,
9441 .send_param = set_phy_2m_rx_param,
9442 .send_len = sizeof(set_phy_2m_rx_param),
9443 .expect_status = MGMT_STATUS_SUCCESS,
9444 .expect_hci_command = BT_HCI_CMD_LE_SET_DEFAULT_PHY,
9445 .expect_hci_param = set_default_phy_2m_rx_param,
9446 .expect_hci_len = sizeof(set_default_phy_2m_rx_param),
9447 .expect_alt_ev = MGMT_EV_PHY_CONFIGURATION_CHANGED,
9448 .expect_alt_ev_param = set_phy_2m_rx_evt_param,
9449 .expect_alt_ev_len = sizeof(set_phy_2m_rx_evt_param),
9452 static const uint8_t set_phy_param_invalid[] = {
9453 0x79, 0xfe, 0x00, 0x00 /* Set unconfigurable phy*/
9456 static const struct generic_data set_phy_invalid_param = {
9457 .setup_settings = settings_powered_le,
9458 .send_opcode = MGMT_OP_SET_PHY_CONFIGURATION,
9459 .send_param = set_phy_param_invalid,
9460 .send_len = sizeof(set_phy_param_invalid),
9461 .expect_status = MGMT_STATUS_INVALID_PARAMS,
9464 static const char start_discovery_valid_ext_scan_enable[] = {
9471 static const struct generic_data start_discovery_bredrle_ext_scan_enable = {
9472 .setup_settings = settings_powered_le,
9473 .send_opcode = MGMT_OP_START_DISCOVERY,
9474 .send_param = start_discovery_bredrle_param,
9475 .send_len = sizeof(start_discovery_bredrle_param),
9476 .expect_status = MGMT_STATUS_SUCCESS,
9477 .expect_param = start_discovery_bredrle_param,
9478 .expect_len = sizeof(start_discovery_bredrle_param),
9479 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_ENABLE,
9480 .expect_hci_param = start_discovery_valid_ext_scan_enable,
9481 .expect_hci_len = sizeof(start_discovery_valid_ext_scan_enable),
9482 .expect_alt_ev = MGMT_EV_DISCOVERING,
9483 .expect_alt_ev_param = start_discovery_evt,
9484 .expect_alt_ev_len = sizeof(start_discovery_evt),
9487 static const struct generic_data start_discovery_le_ext_scan_enable = {
9488 .setup_settings = settings_powered_le,
9489 .send_opcode = MGMT_OP_START_DISCOVERY,
9490 .send_param = start_discovery_le_param,
9491 .send_len = sizeof(start_discovery_le_param),
9492 .expect_status = MGMT_STATUS_SUCCESS,
9493 .expect_param = start_discovery_le_param,
9494 .expect_len = sizeof(start_discovery_le_param),
9495 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_ENABLE,
9496 .expect_hci_param = start_discovery_valid_ext_scan_enable,
9497 .expect_hci_len = sizeof(start_discovery_valid_ext_scan_enable),
9498 .expect_alt_ev = MGMT_EV_DISCOVERING,
9499 .expect_alt_ev_param = start_discovery_le_evt,
9500 .expect_alt_ev_len = sizeof(start_discovery_le_evt),
9503 static const char start_discovery_valid_ext_scan_param[] = {
9504 0x01, /* Own Addr type*/
9505 0x00, /* Scan filter policy*/
9506 0x01, /*Phys - 1m */
9508 0x12, 0x00, /* Interval */
9509 0x12, 0x00, /* Window */
9512 static const struct generic_data start_discovery_le_ext_scan_param = {
9513 .setup_settings = settings_powered_le,
9514 .send_opcode = MGMT_OP_START_DISCOVERY,
9515 .send_param = start_discovery_le_param,
9516 .send_len = sizeof(start_discovery_le_param),
9517 .expect_status = MGMT_STATUS_SUCCESS,
9518 .expect_param = start_discovery_le_param,
9519 .expect_len = sizeof(start_discovery_le_param),
9520 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_PARAMS,
9521 .expect_hci_param = start_discovery_valid_ext_scan_param,
9522 .expect_hci_len = sizeof(start_discovery_valid_ext_scan_param),
9523 .expect_alt_ev = MGMT_EV_DISCOVERING,
9524 .expect_alt_ev_param = start_discovery_le_evt,
9525 .expect_alt_ev_len = sizeof(start_discovery_le_evt),
9528 static const char stop_discovery_valid_ext_scan_disable[] = {
9535 static const struct generic_data stop_discovery_le_ext_scan_disable = {
9536 .setup_settings = settings_powered_le,
9537 .setup_send_opcode = MGMT_OP_START_DISCOVERY,
9538 .setup_send_param = start_discovery_bredrle_param,
9539 .setup_send_len = sizeof(start_discovery_bredrle_param),
9540 .send_opcode = MGMT_OP_STOP_DISCOVERY,
9541 .send_param = stop_discovery_bredrle_param,
9542 .send_len = sizeof(stop_discovery_bredrle_param),
9543 .expect_status = MGMT_STATUS_SUCCESS,
9544 .expect_param = stop_discovery_bredrle_param,
9545 .expect_len = sizeof(stop_discovery_bredrle_param),
9546 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_ENABLE,
9547 .expect_hci_param = stop_discovery_valid_ext_scan_disable,
9548 .expect_hci_len = sizeof(stop_discovery_valid_ext_scan_disable),
9549 .expect_alt_ev = MGMT_EV_DISCOVERING,
9550 .expect_alt_ev_param = stop_discovery_evt,
9551 .expect_alt_ev_len = sizeof(stop_discovery_evt),
9554 static const struct generic_data start_discovery_le_2m_scan_param = {
9555 .setup_settings = settings_powered_le,
9556 .setup_send_opcode = MGMT_OP_SET_PHY_CONFIGURATION,
9557 .setup_send_param = set_phy_2m_param,
9558 .setup_send_len = sizeof(set_phy_2m_param),
9559 .send_opcode = MGMT_OP_START_DISCOVERY,
9560 .send_param = start_discovery_bredrle_param,
9561 .send_len = sizeof(start_discovery_bredrle_param),
9562 .expect_status = MGMT_STATUS_SUCCESS,
9563 .expect_param = start_discovery_bredrle_param,
9564 .expect_len = sizeof(start_discovery_bredrle_param),
9565 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_PARAMS,
9566 .expect_hci_param = start_discovery_valid_ext_scan_param,
9567 .expect_hci_len = sizeof(start_discovery_valid_ext_scan_param),
9568 .expect_alt_ev = MGMT_EV_DISCOVERING,
9569 .expect_alt_ev_param = start_discovery_evt,
9570 .expect_alt_ev_len = sizeof(start_discovery_evt),
9573 static const char start_discovery_valid_coded_scan_param[] = {
9574 0x01, /* Own Addr type*/
9575 0x00, /* Scan filter policy*/
9576 0x05, /*Phys - 1m & coded */
9578 0x12, 0x00, /* Interval */
9579 0x12, 0x00, /* Window */
9581 0x12, 0x00, /* Interval */
9582 0x12, 0x00, /* Window */
9585 static const struct generic_data start_discovery_le_coded_scan_param = {
9586 .setup_settings = settings_powered_le,
9587 .setup_send_opcode = MGMT_OP_SET_PHY_CONFIGURATION,
9588 .setup_send_param = set_phy_coded_param,
9589 .setup_send_len = sizeof(set_phy_coded_param),
9590 .send_opcode = MGMT_OP_START_DISCOVERY,
9591 .send_param = start_discovery_bredrle_param,
9592 .send_len = sizeof(start_discovery_bredrle_param),
9593 .expect_status = MGMT_STATUS_SUCCESS,
9594 .expect_param = start_discovery_bredrle_param,
9595 .expect_len = sizeof(start_discovery_bredrle_param),
9596 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_PARAMS,
9597 .expect_hci_param = start_discovery_valid_coded_scan_param,
9598 .expect_hci_len = sizeof(start_discovery_valid_coded_scan_param),
9599 .expect_alt_ev = MGMT_EV_DISCOVERING,
9600 .expect_alt_ev_param = start_discovery_evt,
9601 .expect_alt_ev_len = sizeof(start_discovery_evt),
9604 static const char start_discovery_valid_1m_2m_coded_scan_param[] = {
9605 0x01, /* Own Addr type*/
9606 0x00, /* Scan filter policy*/
9607 0x05, /*Phys - 1m, coded */
9609 0x12, 0x00, /* Interval */
9610 0x12, 0x00, /* Window */
9612 0x12, 0x00, /* Interval */
9613 0x12, 0x00, /* Window */
9616 static const struct generic_data start_discovery_le_1m_coded_scan_param = {
9617 .setup_settings = settings_powered_le,
9618 .setup_send_opcode = MGMT_OP_SET_PHY_CONFIGURATION,
9619 .setup_send_param = set_phy_all_param,
9620 .setup_send_len = sizeof(set_phy_all_param),
9621 .send_opcode = MGMT_OP_START_DISCOVERY,
9622 .send_param = start_discovery_bredrle_param,
9623 .send_len = sizeof(start_discovery_bredrle_param),
9624 .expect_status = MGMT_STATUS_SUCCESS,
9625 .expect_param = start_discovery_bredrle_param,
9626 .expect_len = sizeof(start_discovery_bredrle_param),
9627 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_PARAMS,
9628 .expect_hci_param = start_discovery_valid_1m_2m_coded_scan_param,
9629 .expect_hci_len = sizeof(start_discovery_valid_1m_2m_coded_scan_param),
9630 .expect_alt_ev = MGMT_EV_DISCOVERING,
9631 .expect_alt_ev_param = start_discovery_evt,
9632 .expect_alt_ev_len = sizeof(start_discovery_evt),
9636 static void set_phy_callback(uint8_t status, uint16_t length,
9637 const void *param, void *user_data)
9639 if (status != MGMT_STATUS_SUCCESS) {
9640 tester_setup_failed();
9644 tester_print("Set PHY Success");
9646 tester_setup_complete();
9649 static void setup_phy_configuration(const void *test_data)
9651 struct test_data *data = tester_get_data();
9652 const struct generic_data *test = data->test_data;
9653 const void *send_param = test->setup_send_param;
9654 uint16_t send_len = test->setup_send_len;
9657 id = mgmt_register(data->mgmt, MGMT_EV_DISCOVERING, data->mgmt_index,
9658 discovering_event, NULL, NULL);
9659 data->mgmt_discov_ev_id = id;
9661 mgmt_send(data->mgmt, test->setup_send_opcode, data->mgmt_index,
9662 send_len, send_param, set_phy_callback,
9666 static const uint8_t get_dev_flags_param[] = {
9667 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Address */
9671 static const uint8_t get_dev_flags_rsp_param[] = {
9672 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Address */
9674 0x01, 0x00, 0x00, 0x00, /* Supported Flages */
9675 0x00, 0x00, 0x00, 0x00, /* Current Flages */
9678 static const struct generic_data get_dev_flags_success = {
9679 .send_opcode = MGMT_OP_GET_DEVICE_FLAGS,
9680 .send_param = get_dev_flags_param,
9681 .send_len = sizeof(get_dev_flags_param),
9682 .expect_status = MGMT_STATUS_SUCCESS,
9683 .expect_param = get_dev_flags_rsp_param,
9684 .expect_len = sizeof(get_dev_flags_rsp_param),
9687 static const uint8_t get_dev_flags_param_fail_1[] = {
9688 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Address */
9691 static const struct generic_data get_dev_flags_fail_1 = {
9692 .send_opcode = MGMT_OP_GET_DEVICE_FLAGS,
9693 .send_param = get_dev_flags_param_fail_1,
9694 .send_len = sizeof(get_dev_flags_param_fail_1),
9695 .expect_status = MGMT_STATUS_INVALID_PARAMS,
9698 static void setup_get_dev_flags(const void *test_data)
9700 struct test_data *data = tester_get_data();
9701 unsigned char param[] = { 0x01 };
9702 const unsigned char *add_param;
9703 size_t add_param_len;
9705 tester_print("Powering on controller (with added device)");
9707 if (data->hciemu_type == HCIEMU_TYPE_LE) {
9708 add_param = add_device_success_param_2;
9709 add_param_len = sizeof(add_device_success_param_2);
9711 add_param = add_device_success_param_1;
9712 add_param_len = sizeof(add_device_success_param_1);
9715 mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
9716 add_param_len, add_param, NULL, NULL, NULL);
9718 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
9719 sizeof(param), param,
9720 setup_powered_callback, NULL, NULL);
9723 static const uint8_t set_dev_flags_param[] = {
9724 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Address */
9726 0x01, 0x00, 0x00, 0x00, /* Current Flages */
9729 static const uint8_t set_dev_flags_rsp_param[] = {
9730 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Address */
9734 static const uint8_t dev_flags_changed_param[] = {
9735 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Address */
9737 0x01, 0x00, 0x00, 0x00, /* Supported Flages */
9738 0x01, 0x00, 0x00, 0x00, /* Current Flages */
9741 static const struct generic_data set_dev_flags_success = {
9742 .send_opcode = MGMT_OP_SET_DEVICE_FLAGS,
9743 .send_param = set_dev_flags_param,
9744 .send_len = sizeof(set_dev_flags_param),
9745 .expect_status = MGMT_STATUS_SUCCESS,
9746 .expect_param = set_dev_flags_rsp_param,
9747 .expect_len = sizeof(set_dev_flags_rsp_param),
9748 .expect_alt_ev = MGMT_EV_DEVICE_FLAGS_CHANGED,
9749 .expect_alt_ev_param = dev_flags_changed_param,
9750 .expect_alt_ev_len = sizeof(dev_flags_changed_param),
9753 static const uint8_t set_dev_flags_param_fail_1[] = {
9754 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Address */
9758 static const struct generic_data set_dev_flags_fail_1 = {
9759 .send_opcode = MGMT_OP_SET_DEVICE_FLAGS,
9760 .send_param = set_dev_flags_param_fail_1,
9761 .send_len = sizeof(set_dev_flags_param_fail_1),
9762 .expect_status = MGMT_STATUS_INVALID_PARAMS,
9765 static const uint8_t set_dev_flags_param_fail_2[] = {
9766 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Address */
9768 0x03, 0x00, 0x00, 0x00, /* Current Flages */
9771 static const struct generic_data set_dev_flags_fail_2 = {
9772 .send_opcode = MGMT_OP_SET_DEVICE_FLAGS,
9773 .send_param = set_dev_flags_param_fail_2,
9774 .send_len = sizeof(set_dev_flags_param_fail_2),
9775 .expect_status = MGMT_STATUS_INVALID_PARAMS,
9776 .expect_param = set_dev_flags_rsp_param,
9777 .expect_len = sizeof(set_dev_flags_rsp_param),
9780 static const uint8_t set_dev_flags_param_fail_3[] = {
9781 0x11, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Address */
9783 0x01, 0x00, 0x00, 0x00, /* Current Flages */
9786 static const uint8_t set_dev_flags_rsp_param_fail_3[] = {
9787 0x11, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Address */
9791 static const struct generic_data set_dev_flags_fail_3 = {
9792 .send_opcode = MGMT_OP_SET_DEVICE_FLAGS,
9793 .send_param = set_dev_flags_param_fail_3,
9794 .send_len = sizeof(set_dev_flags_param_fail_3),
9795 .expect_status = MGMT_STATUS_INVALID_PARAMS,
9796 .expect_param = set_dev_flags_rsp_param_fail_3,
9797 .expect_len = sizeof(set_dev_flags_rsp_param_fail_3),
9800 static const uint8_t read_exp_feat_param_success[] = {
9801 0x03, 0x00, /* Feature Count */
9802 0xd6, 0x49, 0xb0, 0xd1, 0x28, 0xeb, /* UUID - Simultaneous */
9803 0x27, 0x92, 0x96, 0x46, 0xc0, 0x42, /* Central Peripheral */
9804 0xb5, 0x10, 0x1b, 0x67,
9805 0x00, 0x00, 0x00, 0x00, /* Flags */
9806 0x04, 0x00, 0x13, 0xac, 0x42, 0x02, /* UUID - LL Privacy */
9807 0xde, 0xb3, 0xea, 0x11, 0x73, 0xc2,
9808 0x48, 0xa1, 0xc0, 0x15,
9809 0x02, 0x00, 0x00, 0x00, /* Flags */
9810 0xaf, 0x29, 0xc6, 0x66, 0xac, 0x5f, /* UUID - Codec Offload */
9811 0x1a, 0x88, 0xb9, 0x4f, 0x7f, 0xee,
9812 0xce, 0x5a, 0x69, 0xa6,
9813 0x00, 0x00, 0x00, 0x00 /* Flags */
9816 static const struct generic_data read_exp_feat_success = {
9817 .send_opcode = MGMT_OP_READ_EXP_FEATURES_INFO,
9818 .expect_status = MGMT_STATUS_SUCCESS,
9819 .expect_param = read_exp_feat_param_success,
9820 .expect_len = sizeof(read_exp_feat_param_success),
9824 static const uint8_t read_exp_feat_param_success_index_none[] = {
9825 0x01, 0x00, /* Feature Count */
9826 0x1c, 0xda, 0x47, 0x1c, 0x48, 0x6c, /* UUID - Debug */
9827 0x01, 0xab, 0x9f, 0x46, 0xec, 0xb9,
9828 0x30, 0x25, 0x99, 0xd4,
9829 0x00, 0x00, 0x00, 0x00, /* Flags */
9832 static const struct generic_data read_exp_feat_success_index_none = {
9833 .send_index_none = true,
9834 .send_opcode = MGMT_OP_READ_EXP_FEATURES_INFO,
9835 .expect_status = MGMT_STATUS_SUCCESS,
9836 .expect_param = read_exp_feat_param_success_index_none,
9837 .expect_len = sizeof(read_exp_feat_param_success_index_none),
9840 static uint16_t settings_powered_le_privacy[] = { MGMT_OP_SET_LE,
9841 MGMT_OP_SET_PRIVACY,
9842 MGMT_OP_SET_POWERED, 0 };
9844 static const uint8_t set_exp_feat_param_ll_privacy[] = {
9845 0x04, 0x00, 0x13, 0xac, 0x42, 0x02, /* UUID - LL Privacy */
9846 0xde, 0xb3, 0xea, 0x11, 0x73, 0xc2,
9847 0x48, 0xa1, 0xc0, 0x15,
9848 0x01, /* Action - enable */
9851 static const uint8_t set_exp_feat_rsp_param_ll_privacy[] = {
9852 0x04, 0x00, 0x13, 0xac, 0x42, 0x02, /* UUID - LL Privacy */
9853 0xde, 0xb3, 0xea, 0x11, 0x73, 0xc2,
9854 0x48, 0xa1, 0xc0, 0x15,
9855 0x03, 0x00, 0x00, 0x00, /* Action - enable */
9858 static const uint8_t set_exp_feat_param_offload_codec[] = {
9859 0xaf, 0x29, 0xc6, 0x66, 0xac, 0x5f, /* UUID - Codec Offload */
9860 0x1a, 0x88, 0xb9, 0x4f, 0x7f, 0xee,
9861 0xce, 0x5a, 0x69, 0xa6,
9862 0x01, /* Action - enable */
9865 static const uint8_t set_exp_feat_rsp_param_offload_codec[] = {
9866 0xaf, 0x29, 0xc6, 0x66, 0xac, 0x5f, /* UUID - Codec Offload */
9867 0x1a, 0x88, 0xb9, 0x4f, 0x7f, 0xee,
9868 0xce, 0x5a, 0x69, 0xa6,
9869 0x01, 0x00, 0x00, 0x00, /* Action - enable */
9872 static const struct generic_data set_exp_feat_enable_ll_privacy = {
9873 .send_opcode = MGMT_OP_SET_EXP_FEATURE,
9874 .send_param = set_exp_feat_param_ll_privacy,
9875 .send_len = sizeof(set_exp_feat_param_ll_privacy),
9876 .expect_status = MGMT_STATUS_SUCCESS,
9877 .expect_param = set_exp_feat_rsp_param_ll_privacy,
9878 .expect_len = sizeof(set_exp_feat_rsp_param_ll_privacy),
9879 .expect_alt_ev = MGMT_EV_EXP_FEATURE_CHANGE,
9880 .expect_alt_ev_len = sizeof(struct mgmt_ev_exp_feature_changed),
9883 static void read_exp_feature_callback(uint8_t status, uint16_t length,
9884 const void *param, void *user_data)
9886 if (status != MGMT_STATUS_SUCCESS) {
9887 tester_setup_failed();
9891 tester_print("Received Read Experimental Features Info");
9893 tester_setup_complete();
9896 static void setup_set_exp_feature_alt(const void *test_data)
9898 struct test_data *data = tester_get_data();
9900 /* Send the Read Experiemental Features Information command to receive
9901 * the Experiemental Feature Changed event
9903 mgmt_send(data->mgmt_alt, MGMT_OP_READ_EXP_FEATURES_INFO,
9904 data->mgmt_index, 0, NULL,
9905 read_exp_feature_callback, NULL, NULL);
9908 static const struct generic_data set_exp_feat_offload_codec = {
9909 .send_opcode = MGMT_OP_SET_EXP_FEATURE,
9910 .send_param = set_exp_feat_param_offload_codec,
9911 .send_len = sizeof(set_exp_feat_param_offload_codec),
9912 .expect_status = MGMT_STATUS_SUCCESS,
9913 .expect_param = set_exp_feat_rsp_param_offload_codec,
9914 .expect_len = sizeof(set_exp_feat_rsp_param_offload_codec),
9915 .expect_alt_ev = MGMT_EV_EXP_FEATURE_CHANGE,
9916 .expect_alt_ev_len = sizeof(struct mgmt_ev_exp_feature_changed),
9919 static const uint8_t set_exp_feat_param_disable[17] = { 0x00 };
9920 static const uint8_t set_exp_feat_rsp_param_disable[20] = { 0x00 };
9922 static const struct generic_data set_exp_feat_disable = {
9923 .send_opcode = MGMT_OP_SET_EXP_FEATURE,
9924 .send_param = set_exp_feat_param_disable,
9925 .send_len = sizeof(set_exp_feat_param_disable),
9926 .expect_status = MGMT_STATUS_SUCCESS,
9927 .expect_param = set_exp_feat_rsp_param_disable,
9928 .expect_len = sizeof(set_exp_feat_rsp_param_disable),
9931 static const struct generic_data set_exp_feat_rejected = {
9932 .setup_settings = settings_powered_le_privacy,
9933 .send_opcode = MGMT_OP_SET_EXP_FEATURE,
9934 .send_param = set_exp_feat_param_ll_privacy,
9935 .send_len = sizeof(set_exp_feat_param_ll_privacy),
9936 .expect_status = MGMT_STATUS_REJECTED,
9939 static const uint8_t set_exp_feat_param_invalid[] = {
9940 0x04, 0x00, 0x13, 0xac, 0x42, 0x02, /* UUID - LL Privacy */
9941 0xde, 0xb3, 0xea, 0x11, 0x73, 0xc2,
9942 0x48, 0xa1, 0xc0, 0x15,
9943 0xff, /* Action - invalid */
9946 static const struct generic_data set_exp_feat_invalid = {
9947 .send_opcode = MGMT_OP_SET_EXP_FEATURE,
9948 .send_param = set_exp_feat_param_invalid,
9949 .send_len = sizeof(set_exp_feat_param_invalid),
9950 .expect_status = MGMT_STATUS_INVALID_PARAMS,
9953 static const uint8_t set_exp_feat_param_unknown[] = {
9954 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* UUID - Unknown */
9955 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
9956 0xff, 0xff, 0xff, 0xff,
9957 0x01, /* Action - enable */
9960 static const struct generic_data set_exp_feat_unknown = {
9961 .send_opcode = MGMT_OP_SET_EXP_FEATURE,
9962 .send_param = set_exp_feat_param_unknown,
9963 .send_len = sizeof(set_exp_feat_param_unknown),
9964 .expect_status = MGMT_STATUS_NOT_SUPPORTED,
9967 static const uint8_t add_device_le_public_param_1[] = {
9968 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* BDADDR */
9969 0x01, /* Type - LE Public */
9970 0x02, /* Action - Auto-Connect */
9973 static const uint8_t add_device_rsp_le_public[] = {
9974 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* BDADDR */
9975 0x01, /* Type - LE Public */
9977 static const char load_irks_le_public_param_1[] = {
9978 0x01, 0x00, /* Key Count */
9979 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Key 1 - BDADDR */
9980 0x01, /* Key 1 - Type */
9981 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, /* Key 1 - Value */
9982 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
9985 static const uint8_t add_device_le_public_param_2[] = {
9986 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, /* BDADDR */
9987 0x01, /* Type - LE Public */
9988 0x00, /* Action - Background scan */
9991 static const uint8_t add_device_rsp_le_public_2[] = {
9992 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, /* BDADDR */
9993 0x01, /* Type - LE Public */
9996 static const uint8_t add_device_le_public_param_3[] = {
9997 0x33, 0x33, 0x33, 0x44, 0x55, 0x66, /* BDADDR */
9998 0x01, /* Type - LE Public */
9999 0x00, /* Action - Background scan */
10002 static const uint8_t add_device_rsp_le_public_3[] = {
10003 0x33, 0x33, 0x33, 0x44, 0x55, 0x66, /* BDADDR */
10004 0x01, /* Type - LE Public */
10007 static const uint8_t add_device_le_public_param_4[] = {
10008 0x44, 0x44, 0x44, 0x44, 0x55, 0x66, /* BDADDR */
10009 0x01, /* Type - LE Public */
10010 0x00, /* Action - Background scan */
10013 static const uint8_t add_device_rsp_le_public_4[] = {
10014 0x44, 0x44, 0x44, 0x44, 0x55, 0x66, /* BDADDR */
10015 0x01, /* Type - LE Public */
10018 static const char load_irks_2_devices_param[] = {
10019 0x02, 0x00, /* Key Count */
10020 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Key 1 - BDADDR */
10021 0x01, /* Key 1 - Type */
10022 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, /* Key 1 - Value */
10023 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
10024 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, /* Key 2 - BDADDR */
10025 0x01, /* Key 2 - Type */
10026 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, /* Key 2 - Value */
10027 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88
10030 static const char load_irks_3_devices_param[] = {
10031 0x03, 0x00, /* Key Count */
10032 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Key 1 - BDADDR */
10033 0x01, /* Key 1 - Type */
10034 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, /* Key 1 - Value */
10035 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
10036 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, /* Key 2 - BDADDR */
10037 0x01, /* Key 2 - Type */
10038 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, /* Key 2 - Value */
10039 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
10040 0x33, 0x33, 0x33, 0x44, 0x55, 0x66, /* Key 3 - BDADDR */
10041 0x01, /* Key 3 - Type */
10042 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, /* Key 3 - Value */
10043 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
10046 static const char load_irks_4_devices_param[] = {
10047 0x04, 0x00, /* Key Count */
10048 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Key 1 - BDADDR */
10049 0x01, /* Key 1 - Type */
10050 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, /* Key 1 - Value */
10051 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
10052 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, /* Key 2 - BDADDR */
10053 0x01, /* Key 2 - Type */
10054 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, /* Key 2 - Value */
10055 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
10056 0x33, 0x33, 0x33, 0x44, 0x55, 0x66, /* Key 3 - BDADDR */
10057 0x01, /* Key 3 - Type */
10058 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, /* Key 3 - Value */
10059 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
10060 0x44, 0x44, 0x44, 0x44, 0x55, 0x66, /* Key 4 - BDADDR */
10061 0x01, /* Key 4 - Type */
10062 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, /* Key 4 - Value */
10063 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
10066 static const uint8_t le_add_to_accept_list_param[] = {
10068 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Address */
10071 static const uint8_t le_add_to_white_list_param_2[] = {
10073 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, /* Address */
10076 static const uint8_t le_add_to_white_list_param_3[] = {
10078 0x33, 0x33, 0x33, 0x44, 0x55, 0x66, /* Address */
10081 static const uint8_t le_add_to_resolv_list_param[] = {
10083 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* BDADDR */
10084 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, /* Peer IRK */
10085 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
10086 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, /* Local IRK */
10087 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
10090 static const uint8_t le_add_to_resolv_list_param_2[] = {
10092 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, /* BDADDR */
10093 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, /* Peer IRK */
10094 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
10095 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, /* Local IRK */
10096 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
10099 static const uint8_t le_add_to_resolv_list_param_4[] = {
10101 0x44, 0x44, 0x44, 0x44, 0x55, 0x66, /* BDADDR */
10102 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, /* Peer IRK */
10103 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
10104 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, /* Local IRK */
10105 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
10108 static const char set_resolv_off_param[] = { 0x00 };
10109 static const char set_resolv_on_param[] = { 0x01 };
10111 static const struct generic_data ll_privacy_add_device_1 = {
10112 .setup_settings = settings_powered_le,
10113 .send_opcode = MGMT_OP_ADD_DEVICE,
10114 .send_param = add_device_le_public_param_1,
10115 .send_len = sizeof(add_device_le_public_param_1),
10116 .expect_param = add_device_rsp_le,
10117 .expect_len = sizeof(add_device_rsp_le),
10118 .expect_status = MGMT_STATUS_SUCCESS,
10119 .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
10120 .expect_alt_ev_param = add_device_le_public_param_1,
10121 .expect_alt_ev_len = sizeof(add_device_le_public_param_1),
10122 .expect_hci_command = BT_HCI_CMD_LE_ADD_TO_ACCEPT_LIST,
10123 .expect_hci_param = le_add_to_accept_list_param,
10124 .expect_hci_len = sizeof(le_add_to_accept_list_param),
10127 static uint16_t settings_le_privacy_ll_privacy[] = { MGMT_OP_SET_LE,
10128 MGMT_OP_SET_PRIVACY,
10129 MGMT_OP_SET_EXP_FEATURE, 0 };
10131 static const struct generic_data ll_privacy_add_device_2 = {
10132 .setup_settings = settings_le_privacy_ll_privacy,
10133 .setup_exp_feat_param = set_exp_feat_param_ll_privacy,
10134 .send_opcode = MGMT_OP_ADD_DEVICE,
10135 .send_param = add_device_le_public_param_1,
10136 .send_len = sizeof(add_device_le_public_param_1),
10137 .expect_param = add_device_rsp_le_public,
10138 .expect_len = sizeof(add_device_rsp_le_public),
10139 .expect_status = MGMT_STATUS_SUCCESS,
10140 .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
10141 .expect_alt_ev_param = add_device_le_public_param_1,
10142 .expect_alt_ev_len = sizeof(add_device_le_public_param_1),
10143 .expect_hci_command = BT_HCI_CMD_LE_ADD_TO_RESOLV_LIST,
10144 .expect_hci_param = le_add_to_resolv_list_param,
10145 .expect_hci_len = sizeof(le_add_to_resolv_list_param),
10148 static const struct hci_cmd_data ll_privacy_add_device_3_hci_list[] = {
10150 .opcode = BT_HCI_CMD_LE_SET_RESOLV_ENABLE,
10151 .param = set_resolv_off_param,
10152 .len = sizeof(set_resolv_off_param),
10155 .opcode = BT_HCI_CMD_LE_ADD_TO_RESOLV_LIST,
10156 .param = le_add_to_resolv_list_param,
10157 .len = sizeof(le_add_to_resolv_list_param),
10160 .opcode = BT_HCI_CMD_LE_ADD_TO_ACCEPT_LIST,
10161 .param = le_add_to_accept_list_param,
10162 .len = sizeof(le_add_to_accept_list_param),
10165 .opcode = BT_HCI_CMD_LE_SET_RESOLV_ENABLE,
10166 .param = set_resolv_on_param,
10167 .len = sizeof(set_resolv_on_param),
10171 static const struct generic_data ll_privacy_add_device_3 = {
10172 .setup_settings = settings_le_privacy_ll_privacy,
10173 .setup_exp_feat_param = set_exp_feat_param_ll_privacy,
10174 .send_opcode = MGMT_OP_ADD_DEVICE,
10175 .send_param = add_device_le_public_param_1,
10176 .send_len = sizeof(add_device_le_public_param_1),
10177 .expect_param = add_device_rsp_le,
10178 .expect_len = sizeof(add_device_rsp_le),
10179 .expect_status = MGMT_STATUS_SUCCESS,
10180 .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
10181 .expect_alt_ev_param = add_device_le_public_param_1,
10182 .expect_alt_ev_len = sizeof(add_device_le_public_param_1),
10183 .expect_hci_list = ll_privacy_add_device_3_hci_list,
10186 static const struct generic_data ll_privacy_add_device_4 = {
10187 .setup_settings = settings_le_privacy_ll_privacy,
10188 .setup_exp_feat_param = set_exp_feat_param_ll_privacy,
10189 .send_opcode = MGMT_OP_ADD_DEVICE,
10190 .send_param = add_device_le_public_param_2,
10191 .send_len = sizeof(add_device_le_public_param_2),
10192 .expect_param = add_device_rsp_le_public_2,
10193 .expect_len = sizeof(add_device_rsp_le_public_2),
10194 .expect_status = MGMT_STATUS_SUCCESS,
10195 .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
10196 .expect_alt_ev_param = add_device_le_public_param_2,
10197 .expect_alt_ev_len = sizeof(add_device_le_public_param_2),
10198 .expect_hci_command = BT_HCI_CMD_LE_ADD_TO_ACCEPT_LIST,
10199 .expect_hci_param = le_add_to_white_list_param_2,
10200 .expect_hci_len = sizeof(le_add_to_white_list_param_2),
10203 static const struct generic_data ll_privacy_add_device_5 = {
10204 .setup_settings = settings_le_privacy_ll_privacy,
10205 .setup_exp_feat_param = set_exp_feat_param_ll_privacy,
10206 .send_opcode = MGMT_OP_ADD_DEVICE,
10207 .send_param = add_device_le_public_param_2,
10208 .send_len = sizeof(add_device_le_public_param_2),
10209 .expect_param = add_device_rsp_le_public_2,
10210 .expect_len = sizeof(add_device_rsp_le_public_2),
10211 .expect_status = MGMT_STATUS_SUCCESS,
10212 .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
10213 .expect_alt_ev_param = add_device_le_public_param_2,
10214 .expect_alt_ev_len = sizeof(add_device_le_public_param_2),
10215 .expect_hci_command = BT_HCI_CMD_LE_ADD_TO_RESOLV_LIST,
10216 .expect_hci_param = le_add_to_resolv_list_param_2,
10217 .expect_hci_len = sizeof(le_add_to_resolv_list_param_2),
10220 static const struct generic_data ll_privacy_add_device_6 = {
10221 .setup_settings = settings_le_privacy_ll_privacy,
10222 .setup_exp_feat_param = set_exp_feat_param_ll_privacy,
10223 .send_opcode = MGMT_OP_ADD_DEVICE,
10224 .send_param = add_device_le_public_param_4,
10225 .send_len = sizeof(add_device_le_public_param_4),
10226 .expect_param = add_device_rsp_le_public_4,
10227 .expect_len = sizeof(add_device_rsp_le_public_4),
10228 .expect_status = MGMT_STATUS_SUCCESS,
10229 .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
10230 .expect_alt_ev_param = add_device_le_public_param_4,
10231 .expect_alt_ev_len = sizeof(add_device_le_public_param_4),
10232 .expect_hci_command = BT_HCI_CMD_LE_ADD_TO_RESOLV_LIST,
10233 .expect_hci_param = le_add_to_resolv_list_param_4,
10234 .expect_hci_len = sizeof(le_add_to_resolv_list_param_4),
10237 static const struct generic_data ll_privacy_add_device_7 = {
10238 .setup_settings = settings_le_privacy_ll_privacy,
10239 .setup_exp_feat_param = set_exp_feat_param_ll_privacy,
10240 .send_opcode = MGMT_OP_ADD_DEVICE,
10241 .send_param = add_device_le_public_param_3,
10242 .send_len = sizeof(add_device_le_public_param_3),
10243 .expect_param = add_device_rsp_le_public_3,
10244 .expect_len = sizeof(add_device_rsp_le_public_3),
10245 .expect_status = MGMT_STATUS_SUCCESS,
10246 .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
10247 .expect_alt_ev_param = add_device_le_public_param_3,
10248 .expect_alt_ev_len = sizeof(add_device_le_public_param_3),
10249 .expect_hci_command = BT_HCI_CMD_LE_ADD_TO_ACCEPT_LIST,
10250 .expect_hci_param = le_add_to_white_list_param_3,
10251 .expect_hci_len = sizeof(le_add_to_white_list_param_3),
10254 static const char set_ext_adv_disable[] = {
10258 static const struct generic_data ll_privacy_add_device_8 = {
10259 .setup_settings = settings_le_privacy_ll_privacy,
10260 .setup_exp_feat_param = set_exp_feat_param_ll_privacy,
10261 .send_opcode = MGMT_OP_ADD_DEVICE,
10262 .send_param = add_device_le_public_param_3,
10263 .send_len = sizeof(add_device_le_public_param_3),
10264 .expect_param = add_device_rsp_le_public_3,
10265 .expect_len = sizeof(add_device_rsp_le_public_3),
10266 .expect_status = MGMT_STATUS_SUCCESS,
10267 .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
10268 .expect_alt_ev_param = add_device_le_public_param_3,
10269 .expect_alt_ev_len = sizeof(add_device_le_public_param_3),
10270 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_ENABLE,
10271 .expect_hci_param = set_ext_adv_disable,
10272 .expect_hci_len = sizeof(set_ext_adv_disable),
10275 static const struct hci_cmd_data ll_privacy_add_device_9_hci_list[] = {
10277 .opcode = BT_HCI_CMD_LE_SET_EXT_ADV_ENABLE,
10278 .len = sizeof(set_ext_adv_disable),
10279 .param = set_ext_adv_disable,
10282 .opcode = BT_HCI_CMD_LE_ADD_TO_RESOLV_LIST,
10283 .len = sizeof(le_add_to_resolv_list_param),
10284 .param = le_add_to_resolv_list_param
10288 static const struct generic_data ll_privacy_add_device_9 = {
10289 .setup_settings = settings_le_privacy_ll_privacy,
10290 .setup_exp_feat_param = set_exp_feat_param_ll_privacy,
10291 .send_opcode = MGMT_OP_ADD_DEVICE,
10292 .send_param = add_device_le_public_param_1,
10293 .send_len = sizeof(add_device_le_public_param_1),
10294 .expect_param = add_device_rsp_le_public,
10295 .expect_len = sizeof(add_device_rsp_le_public),
10296 .expect_status = MGMT_STATUS_SUCCESS,
10297 .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
10298 .expect_alt_ev_param = add_device_le_public_param_1,
10299 .expect_alt_ev_len = sizeof(add_device_le_public_param_1),
10300 .expect_hci_list = ll_privacy_add_device_9_hci_list,
10303 static const struct generic_data ll_privacy_remove_device_1 = {
10304 .setup_settings = settings_le_privacy_ll_privacy,
10305 .setup_exp_feat_param = set_exp_feat_param_ll_privacy,
10306 .send_opcode = MGMT_OP_REMOVE_DEVICE,
10307 .send_param = remove_device_param_2,
10308 .send_len = sizeof(remove_device_param_2),
10309 .expect_param = remove_device_param_2,
10310 .expect_len = sizeof(remove_device_param_2),
10311 .expect_status = MGMT_STATUS_SUCCESS,
10312 .expect_hci_command = BT_HCI_CMD_LE_REMOVE_FROM_ACCEPT_LIST,
10313 .expect_hci_param = le_add_to_accept_list_param,
10314 .expect_hci_len = sizeof(le_add_to_accept_list_param),
10315 .expect_alt_ev = MGMT_EV_DEVICE_REMOVED,
10316 .expect_alt_ev_param = remove_device_param_2,
10317 .expect_alt_ev_len = sizeof(remove_device_param_2),
10320 static const struct generic_data ll_privacy_remove_device_2 = {
10321 .setup_settings = settings_le_privacy_ll_privacy,
10322 .setup_exp_feat_param = set_exp_feat_param_ll_privacy,
10323 .send_opcode = MGMT_OP_REMOVE_DEVICE,
10324 .send_param = remove_device_param_2,
10325 .send_len = sizeof(remove_device_param_2),
10326 .expect_param = remove_device_param_2,
10327 .expect_len = sizeof(remove_device_param_2),
10328 .expect_status = MGMT_STATUS_SUCCESS,
10329 .expect_hci_command = BT_HCI_CMD_LE_REMOVE_FROM_RESOLV_LIST,
10330 .expect_hci_param = le_add_to_accept_list_param,
10331 .expect_hci_len = sizeof(le_add_to_accept_list_param),
10332 .expect_alt_ev = MGMT_EV_DEVICE_REMOVED,
10333 .expect_alt_ev_param = remove_device_param_2,
10334 .expect_alt_ev_len = sizeof(remove_device_param_2),
10337 static const struct generic_data ll_privacy_remove_device_3 = {
10338 .setup_settings = settings_le_privacy_ll_privacy,
10339 .setup_exp_feat_param = set_exp_feat_param_ll_privacy,
10340 .send_opcode = MGMT_OP_REMOVE_DEVICE,
10341 .send_param = remove_device_param_2,
10342 .send_len = sizeof(remove_device_param_2),
10343 .expect_param = remove_device_param_2,
10344 .expect_len = sizeof(remove_device_param_2),
10345 .expect_status = MGMT_STATUS_SUCCESS,
10346 .expect_hci_command = BT_HCI_CMD_LE_SET_RESOLV_ENABLE,
10347 .expect_hci_param = set_resolv_off_param,
10348 .expect_hci_len = sizeof(set_resolv_off_param),
10349 .expect_alt_ev = MGMT_EV_DEVICE_REMOVED,
10350 .expect_alt_ev_param = remove_device_param_2,
10351 .expect_alt_ev_len = sizeof(remove_device_param_2),
10354 static const struct generic_data ll_privacy_remove_device_4 = {
10355 .setup_settings = settings_le_privacy_ll_privacy,
10356 .setup_exp_feat_param = set_exp_feat_param_ll_privacy,
10357 .send_opcode = MGMT_OP_REMOVE_DEVICE,
10358 .send_param = remove_device_param_2,
10359 .send_len = sizeof(remove_device_param_2),
10360 .expect_param = remove_device_param_2,
10361 .expect_len = sizeof(remove_device_param_2),
10362 .expect_status = MGMT_STATUS_SUCCESS,
10363 .expect_hci_command = BT_HCI_CMD_LE_REMOVE_FROM_RESOLV_LIST,
10364 .expect_hci_param = le_add_to_accept_list_param,
10365 .expect_hci_len = sizeof(le_add_to_accept_list_param),
10366 .expect_alt_ev = MGMT_EV_DEVICE_REMOVED,
10367 .expect_alt_ev_param = remove_device_param_2,
10368 .expect_alt_ev_len = sizeof(remove_device_param_2),
10371 static const struct generic_data ll_privacy_remove_device_5 = {
10372 .setup_settings = settings_le_privacy_ll_privacy,
10373 .setup_exp_feat_param = set_exp_feat_param_ll_privacy,
10374 .send_opcode = MGMT_OP_REMOVE_DEVICE,
10375 .send_param = remove_device_param_2,
10376 .send_len = sizeof(remove_device_param_2),
10377 .expect_param = remove_device_param_2,
10378 .expect_len = sizeof(remove_device_param_2),
10379 .expect_status = MGMT_STATUS_SUCCESS,
10380 .expect_hci_command = BT_HCI_CMD_LE_REMOVE_FROM_RESOLV_LIST,
10381 .expect_hci_param = le_add_to_accept_list_param,
10382 .expect_hci_len = sizeof(le_add_to_accept_list_param),
10383 .expect_alt_ev = MGMT_EV_DEVICE_REMOVED,
10384 .expect_alt_ev_param = remove_device_param_2,
10385 .expect_alt_ev_len = sizeof(remove_device_param_2),
10388 static const struct generic_data ll_privacy_start_discovery_ll_privacy_1 = {
10389 .setup_settings = settings_le_privacy_ll_privacy,
10390 .setup_exp_feat_param = set_exp_feat_param_ll_privacy,
10391 .setup_expect_hci_command = BT_HCI_CMD_LE_SET_RESOLV_ENABLE,
10392 .setup_expect_hci_param = set_resolv_on_param,
10393 .setup_expect_hci_len = sizeof(set_resolv_on_param),
10394 .send_opcode = MGMT_OP_START_DISCOVERY,
10395 .send_param = start_discovery_le_param,
10396 .send_len = sizeof(start_discovery_le_param),
10397 .expect_status = MGMT_STATUS_SUCCESS,
10398 .expect_param = start_discovery_le_param,
10399 .expect_len = sizeof(start_discovery_le_param),
10400 .expect_hci_command = BT_HCI_CMD_LE_SET_RESOLV_ENABLE,
10401 .expect_hci_param = set_resolv_off_param,
10402 .expect_hci_len = sizeof(set_resolv_off_param),
10405 static const struct generic_data ll_privacy_start_discovery_ll_privacy_2 = {
10406 .setup_settings = settings_le_privacy_ll_privacy,
10407 .setup_exp_feat_param = set_exp_feat_param_ll_privacy,
10408 .setup_expect_hci_command = BT_HCI_CMD_LE_REMOVE_FROM_RESOLV_LIST,
10409 .setup_expect_hci_param = le_add_to_accept_list_param,
10410 .setup_expect_hci_len = sizeof(le_add_to_accept_list_param),
10411 .send_opcode = MGMT_OP_START_DISCOVERY,
10412 .send_param = start_discovery_le_param,
10413 .send_len = sizeof(start_discovery_le_param),
10414 .expect_status = MGMT_STATUS_SUCCESS,
10415 .expect_param = start_discovery_le_param,
10416 .expect_len = sizeof(start_discovery_le_param),
10417 .expect_hci_command = BT_HCI_CMD_LE_SET_RESOLV_ENABLE,
10418 .expect_hci_param = set_resolv_off_param,
10419 .expect_hci_len = sizeof(set_resolv_off_param),
10420 .expect_alt_ev = MGMT_EV_DISCOVERING,
10421 .expect_alt_ev_param = start_discovery_le_evt,
10422 .expect_alt_ev_len = sizeof(start_discovery_le_evt),
10425 static const struct generic_data ll_privacy_advertising_1 = {
10426 .setup_settings = settings_le_privacy_ll_privacy,
10427 .setup_exp_feat_param = set_exp_feat_param_ll_privacy,
10428 .send_opcode = MGMT_OP_SET_ADVERTISING,
10429 .send_param = set_adv_on_param2,
10430 .send_len = sizeof(set_adv_on_param2),
10431 .expect_status = MGMT_STATUS_SUCCESS,
10432 .expect_ignore_param = true,
10435 static const struct generic_data ll_privacy_acceptor_1 = {
10436 .setup_settings = settings_le_privacy_ll_privacy,
10437 .setup_exp_feat_param = set_exp_feat_param_ll_privacy,
10438 .io_cap = 0x04, /* KeyboardDisplay */
10439 .client_io_cap = 0x04, /* KeyboardDisplay */
10440 .client_auth_req = 0x05, /* Bonding - MITM */
10441 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
10442 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
10443 .verify_alt_ev_func = verify_ltk,
10446 static const struct generic_data ll_privacy_acceptor_2 = {
10447 .setup_settings = settings_le_privacy_ll_privacy,
10448 .setup_exp_feat_param = set_exp_feat_param_ll_privacy,
10449 .io_cap = 0x04, /* KeyboardDisplay */
10450 .client_io_cap = 0x04, /* KeyboardDisplay */
10451 .just_works = true,
10452 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
10453 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
10454 .verify_alt_ev_func = verify_ltk,
10457 static const uint8_t unpair_client_1[] = {
10458 0x00, 0x00, 0x01, 0x01, 0xaa, 0x00, /* Address */
10460 0x01, /* Disconnect */
10463 static const uint8_t unpair_resp_param_1[] = {
10464 0x00, 0x00, 0x01, 0x01, 0xaa, 0x00, /* Address */
10468 static const uint8_t add_paired_client_1[] = {
10469 0x00, 0x00, 0x01, 0x01, 0xaa, 0x00, /* Address */
10474 static const uint8_t remove_paired_device_1[] = {
10475 0x00, 0x00, 0x01, 0x01, 0xaa, 0x00, /* Address */
10479 static const uint8_t add_to_al_client[] = {
10480 0x00, /* Address Type */
10481 0x00, 0x00, 0x01, 0x01, 0xaa, 0x00, /* Address */
10484 static uint16_t settings_powered_le_sc_bondable_privacy_ll_privacy[] = {
10487 MGMT_OP_SET_BONDABLE,
10488 MGMT_OP_SET_SECURE_CONN,
10489 MGMT_OP_SET_PRIVACY,
10490 MGMT_OP_SET_EXP_FEATURE,
10491 MGMT_OP_SET_POWERED, 0 };
10493 static const struct generic_data ll_privacy_pair_1 = {
10494 .setup_settings = settings_powered_le_sc_bondable_privacy_ll_privacy,
10495 .setup_exp_feat_param = set_exp_feat_param_ll_privacy,
10496 .send_opcode = MGMT_OP_PAIR_DEVICE,
10497 .send_func = pair_device_send_param_func,
10498 .addr_type_avail = true,
10500 .client_enable_sc = true,
10501 .client_enable_ssp = true,
10502 .client_enable_adv = true,
10503 .expect_sc_key = true,
10504 .io_cap = 0x02, /* KeyboardOnly */
10505 .client_io_cap = 0x02, /* KeyboardOnly */
10506 .client_auth_req = 0x05, /* Bonding - MITM */
10507 .expect_status = MGMT_STATUS_SUCCESS,
10508 .expect_func = pair_device_expect_param_func,
10509 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
10510 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
10511 .verify_alt_ev_func = verify_ltk,
10514 static const struct generic_data ll_privacy_pair_2 = {
10515 .setup_settings = settings_powered_le_sc_bondable_privacy_ll_privacy,
10516 .setup_exp_feat_param = set_exp_feat_param_ll_privacy,
10517 .send_opcode = MGMT_OP_PAIR_DEVICE,
10518 .send_func = pair_device_send_param_func,
10519 .addr_type_avail = true,
10521 .client_enable_sc = true,
10522 .client_enable_ssp = true,
10523 .client_enable_adv = true,
10524 .expect_sc_key = true,
10525 .io_cap = 0x02, /* KeyboardOnly */
10526 .client_io_cap = 0x02, /* KeyboardOnly */
10527 .client_auth_req = 0x05, /* Bonding - MITM */
10528 .expect_status = MGMT_STATUS_SUCCESS,
10529 .expect_func = pair_device_expect_param_func,
10530 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
10531 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
10532 .verify_alt_ev_func = verify_ltk,
10533 .expect_hci_command = BT_HCI_CMD_LE_ADD_TO_ACCEPT_LIST,
10534 .expect_hci_param = add_to_al_client,
10535 .expect_hci_len = sizeof(add_to_al_client),
10538 static const struct generic_data ll_privacy_unpair_1 = {
10539 .setup_settings = settings_powered_le_sc_bondable_privacy_ll_privacy,
10540 .setup_exp_feat_param = set_exp_feat_param_ll_privacy,
10541 .send_opcode = MGMT_OP_PAIR_DEVICE,
10542 .send_func = pair_device_send_param_func,
10543 .addr_type_avail = true,
10545 .client_enable_sc = true,
10546 .client_enable_ssp = true,
10547 .client_enable_adv = true,
10548 .expect_sc_key = true,
10549 .io_cap = 0x02, /* KeyboardOnly */
10550 .client_io_cap = 0x02, /* KeyboardOnly */
10551 .expect_status = MGMT_STATUS_SUCCESS,
10552 .expect_func = pair_device_expect_param_func,
10553 .expect_alt_ev = MGMT_EV_DEVICE_UNPAIRED,
10554 .expect_alt_ev_param = unpair_resp_param_1,
10555 .expect_alt_ev_len = sizeof(unpair_resp_param_1),
10558 static const struct generic_data ll_privacy_unpair_2 = {
10559 .setup_settings = settings_powered_le_sc_bondable_privacy_ll_privacy,
10560 .setup_exp_feat_param = set_exp_feat_param_ll_privacy,
10561 .send_opcode = MGMT_OP_PAIR_DEVICE,
10562 .send_func = pair_device_send_param_func,
10563 .addr_type_avail = true,
10565 .client_enable_sc = true,
10566 .client_enable_ssp = true,
10567 .client_enable_adv = true,
10568 .expect_sc_key = true,
10569 .io_cap = 0x02, /* KeyboardOnly */
10570 .client_io_cap = 0x02, /* KeyboardOnly */
10571 .expect_status = MGMT_STATUS_SUCCESS,
10572 .expect_func = pair_device_expect_param_func,
10573 .expect_alt_ev = MGMT_EV_DEVICE_UNPAIRED,
10574 .expect_alt_ev_param = unpair_resp_param_1,
10575 .expect_alt_ev_len = sizeof(unpair_resp_param_1),
10576 .expect_hci_command = BT_HCI_CMD_LE_REMOVE_FROM_ACCEPT_LIST,
10577 .expect_hci_param = add_to_al_client,
10578 .expect_hci_len = sizeof(add_to_al_client),
10581 static const uint8_t set_device_flags_param_1[] = {
10582 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* BDADDR */
10583 0x01, /* Type - LE Public */
10584 0x02, 0x00, 0x00, 0x00 /* Flags - Device Privacy */
10587 static const uint8_t set_device_flags_rsp[] = {
10588 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* BDADDR */
10589 0x01 /* Type - LE Public */
10592 static const uint8_t le_set_priv_mode_param[] = {
10594 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* BDADDR */
10595 0x01 /* Privacy Mode */
10598 static const struct hci_cmd_data ll_privacy_set_device_flags_1_hci_list[] = {
10600 .opcode = BT_HCI_CMD_LE_SET_RESOLV_ENABLE,
10601 .param = set_resolv_off_param,
10602 .len = sizeof(set_resolv_off_param),
10605 .opcode = BT_HCI_CMD_LE_SET_PRIV_MODE,
10606 .param = le_set_priv_mode_param,
10607 .len = sizeof(le_set_priv_mode_param),
10610 .opcode = BT_HCI_CMD_LE_SET_RESOLV_ENABLE,
10611 .param = set_resolv_on_param,
10612 .len = sizeof(set_resolv_on_param),
10616 static const uint8_t device_flags_changed_params_1[] = {
10617 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* BDADDR */
10618 0x01, /* Type - LE Public */
10619 0x03, 0x00, 0x00, 0x00, /* Supported Flags */
10620 0x02, 0x00, 0x00, 0x00 /* Current Flags */
10623 static const struct generic_data ll_privacy_set_device_flag_1 = {
10624 .setup_settings = settings_le_privacy_ll_privacy,
10625 .setup_exp_feat_param = set_exp_feat_param_ll_privacy,
10626 .send_opcode = MGMT_OP_SET_DEVICE_FLAGS,
10627 .send_param = set_device_flags_param_1,
10628 .send_len = sizeof(set_device_flags_param_1),
10629 .expect_param = set_device_flags_rsp,
10630 .expect_len = sizeof(set_device_flags_rsp),
10631 .expect_status = MGMT_STATUS_SUCCESS,
10632 .expect_alt_ev = MGMT_EV_DEVICE_FLAGS_CHANGED,
10633 .expect_alt_ev_param = device_flags_changed_params_1,
10634 .expect_alt_ev_len = sizeof(device_flags_changed_params_1),
10635 .expect_hci_list = ll_privacy_set_device_flags_1_hci_list,
10638 static void setup_load_irks_callback(uint8_t status, uint16_t length,
10639 const void *param, void *user_data)
10641 if (status != MGMT_STATUS_SUCCESS) {
10642 tester_setup_failed();
10646 tester_print("Load IRK completed");
10649 static void setup_add_device_callback(uint8_t status, uint16_t length,
10650 const void *param, void *user_data)
10652 if (status != MGMT_STATUS_SUCCESS) {
10653 tester_setup_failed();
10657 tester_print("New Device is Added");
10660 static void setup_remove_device_callback(uint8_t status, uint16_t length,
10661 const void *param, void *user_data)
10663 bool bthost = PTR_TO_INT(user_data);
10665 if (status != MGMT_STATUS_SUCCESS) {
10666 tester_setup_failed();
10670 tester_print("Device is Removed");
10676 static void setup_add_adv_callback(uint8_t status, uint16_t length,
10677 const void *param, void *user_data)
10679 struct mgmt_rp_add_advertising *rp =
10680 (struct mgmt_rp_add_advertising *) param;
10682 if (status != MGMT_STATUS_SUCCESS) {
10683 tester_setup_failed();
10687 tester_print("Add Advertising setup complete (instance %d)",
10691 static void setup_add_adv_callback_adv(uint8_t status, uint16_t length,
10692 const void *param, void *user_data)
10694 struct test_data *data = tester_get_data();
10695 struct mgmt_cp_add_advertising *cp;
10696 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
10697 struct mgmt_rp_add_advertising *rp =
10698 (struct mgmt_rp_add_advertising *) param;
10700 if (status != MGMT_STATUS_SUCCESS) {
10701 tester_setup_failed();
10705 tester_print("Add Advertising setup complete (instance %d)",
10708 /* Add another advertising */
10709 cp = (struct mgmt_cp_add_advertising *) adv_param;
10710 setup_add_adv_param(cp, 2);
10712 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
10713 sizeof(adv_param), adv_param,
10714 setup_add_advertising_callback,
10718 static void setup_ll_privacy_with_irk1(const void *test_data)
10720 struct test_data *data = tester_get_data();
10721 unsigned char param[] = { 0x01 };
10723 mgmt_send(data->mgmt, MGMT_OP_LOAD_IRKS, data->mgmt_index,
10724 sizeof(load_irks_le_public_param_1),
10725 load_irks_le_public_param_1,
10726 setup_load_irks_callback, NULL, NULL);
10728 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
10729 sizeof(param), param,
10730 setup_powered_callback, NULL, NULL);
10734 static void setup_ll_privacy_dev1_and_irk2(const void *test_data)
10736 struct test_data *data = tester_get_data();
10737 unsigned char param[] = { 0x01 };
10739 /* Add IRKs of Device1 and Device2 */
10740 mgmt_send(data->mgmt, MGMT_OP_LOAD_IRKS, data->mgmt_index,
10741 sizeof(load_irks_2_devices_param),
10742 load_irks_2_devices_param,
10743 setup_load_irks_callback, NULL, NULL);
10746 mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
10747 sizeof(add_device_le_public_param_1),
10748 add_device_le_public_param_1,
10749 setup_add_device_callback, NULL, NULL);
10751 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
10752 sizeof(param), param,
10753 setup_powered_callback, NULL, NULL);
10756 static void setup_ll_privacy_3_devices(const void *test_data)
10758 struct test_data *data = tester_get_data();
10759 unsigned char param[] = { 0x01 };
10761 /* Add IRKs of 4 Devices */
10762 mgmt_send(data->mgmt, MGMT_OP_LOAD_IRKS, data->mgmt_index,
10763 sizeof(load_irks_4_devices_param),
10764 load_irks_4_devices_param,
10765 setup_load_irks_callback, NULL, NULL);
10768 mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
10769 sizeof(add_device_le_public_param_1),
10770 add_device_le_public_param_1,
10771 setup_add_device_callback, NULL, NULL);
10774 mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
10775 sizeof(add_device_le_public_param_2),
10776 add_device_le_public_param_2,
10777 setup_add_device_callback, NULL, NULL);
10780 mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
10781 sizeof(add_device_le_public_param_3),
10782 add_device_le_public_param_3,
10783 setup_add_device_callback, NULL, NULL);
10785 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
10786 sizeof(param), param,
10787 setup_powered_callback, NULL, NULL);
10790 static void setup_ll_privacy_2_devices_extra_rl(const void *test_data)
10792 struct test_data *data = tester_get_data();
10793 unsigned char param[] = { 0x01 };
10795 hciemu_set_central_le_rl_len(data->hciemu, 2);
10797 /* Add IRKs of 4 Devices */
10798 mgmt_send(data->mgmt, MGMT_OP_LOAD_IRKS, data->mgmt_index,
10799 sizeof(load_irks_4_devices_param),
10800 load_irks_4_devices_param,
10801 setup_load_irks_callback, NULL, NULL);
10804 mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
10805 sizeof(add_device_le_public_param_1),
10806 add_device_le_public_param_1,
10807 setup_add_device_callback, NULL, NULL);
10810 mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
10811 sizeof(add_device_le_public_param_2),
10812 add_device_le_public_param_2,
10813 setup_add_device_callback, NULL, NULL);
10815 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
10816 sizeof(param), param,
10817 setup_powered_callback, NULL, NULL);
10820 static void setup_ll_privacy_2_devices_extra_al(const void *test_data)
10822 struct test_data *data = tester_get_data();
10823 unsigned char param[] = { 0x01 };
10825 hciemu_set_central_le_al_len(data->hciemu, 2);
10827 /* Add IRKs of 3 Devices */
10828 mgmt_send(data->mgmt, MGMT_OP_LOAD_IRKS, data->mgmt_index,
10829 sizeof(load_irks_3_devices_param),
10830 load_irks_3_devices_param,
10831 setup_load_irks_callback, NULL, NULL);
10834 mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
10835 sizeof(add_device_le_public_param_1),
10836 add_device_le_public_param_1,
10837 setup_add_device_callback, NULL, NULL);
10840 mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
10841 sizeof(add_device_le_public_param_2),
10842 add_device_le_public_param_2,
10843 setup_add_device_callback, NULL, NULL);
10845 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
10846 sizeof(param), param,
10847 setup_powered_callback, NULL, NULL);
10850 /* Enable LL Privacy and Add 2 devices */
10851 static void setup_ll_privacy_device2_discovry(const void *test_data)
10853 struct test_data *data = tester_get_data();
10854 unsigned char param[] = { 0x01 };
10855 uint8_t disc_param[] = { 0x06 };
10857 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
10858 sizeof(param), param,
10859 setup_powered_callback, NULL, NULL);
10861 mgmt_send(data->mgmt, MGMT_OP_LOAD_IRKS, data->mgmt_index,
10862 sizeof(load_irks_2_devices_param),
10863 load_irks_2_devices_param,
10864 setup_load_irks_callback, NULL, NULL);
10867 mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
10868 sizeof(add_device_le_public_param_1),
10869 add_device_le_public_param_1,
10870 setup_add_device_callback, NULL, NULL);
10872 mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
10873 sizeof(add_device_le_public_param_2),
10874 add_device_le_public_param_2,
10875 setup_add_device_callback, NULL, NULL);
10877 mgmt_send(data->mgmt, MGMT_OP_START_DISCOVERY, data->mgmt_index,
10878 sizeof(disc_param), disc_param,
10879 setup_discovery_callback, NULL, NULL);
10881 mgmt_send(data->mgmt, MGMT_OP_STOP_DISCOVERY, data->mgmt_index,
10882 sizeof(disc_param), disc_param,
10883 setup_discovery_callback, NULL, NULL);
10885 mgmt_send(data->mgmt, MGMT_OP_REMOVE_DEVICE, data->mgmt_index,
10886 sizeof(add_device_rsp_le_public),
10887 add_device_rsp_le_public,
10888 setup_remove_device_callback,
10892 /* Enable LL Privacy and Add Advertising */
10893 static void setup_ll_privacy_adv(const void *test_data)
10895 struct test_data *data = tester_get_data();
10896 struct mgmt_cp_add_advertising *cp;
10897 unsigned char param[] = { 0x01 };
10898 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
10900 cp = (struct mgmt_cp_add_advertising *) adv_param;
10901 setup_add_adv_param(cp, 1);
10903 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
10904 sizeof(adv_param), adv_param,
10905 setup_add_adv_callback, NULL, NULL);
10907 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
10908 sizeof(param), param,
10909 setup_powered_callback, NULL, NULL);
10912 /* Enable LL Privacy and Add Advertising */
10913 static void setup_ll_privacy_2_advs(const void *test_data)
10915 struct test_data *data = tester_get_data();
10916 struct mgmt_cp_add_advertising *cp;
10917 unsigned char param[] = { 0x01 };
10918 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
10920 cp = (struct mgmt_cp_add_advertising *) adv_param;
10921 setup_add_adv_param(cp, 1);
10923 mgmt_send(data->mgmt, MGMT_OP_LOAD_IRKS, data->mgmt_index,
10924 sizeof(load_irks_le_public_param_1),
10925 load_irks_le_public_param_1,
10926 setup_load_irks_callback, NULL, NULL);
10928 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
10929 sizeof(param), param,
10932 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
10933 sizeof(adv_param), adv_param,
10934 setup_add_adv_callback_adv, NULL, NULL);
10937 static void setup_ll_privacy_dev_2_advs(const void *test_data)
10939 struct test_data *data = tester_get_data();
10940 struct mgmt_cp_add_advertising *cp;
10941 unsigned char param[] = { 0x01 };
10942 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
10944 cp = (struct mgmt_cp_add_advertising *) adv_param;
10945 setup_add_adv_param(cp, 1);
10947 mgmt_send(data->mgmt, MGMT_OP_LOAD_IRKS, data->mgmt_index,
10948 sizeof(load_irks_le_public_param_1),
10949 load_irks_le_public_param_1,
10950 setup_load_irks_callback, NULL, NULL);
10952 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
10953 sizeof(param), param,
10957 mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
10958 sizeof(add_device_le_public_param_2),
10959 add_device_le_public_param_2,
10960 setup_add_device_callback, NULL, NULL);
10962 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
10963 sizeof(adv_param), adv_param,
10964 setup_add_adv_callback_adv, NULL, NULL);
10967 static void setup_ll_privacy_adv_3_devices(const void *test_data)
10969 struct test_data *data = tester_get_data();
10970 struct mgmt_cp_add_advertising *cp;
10971 unsigned char param[] = { 0x01 };
10972 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
10974 cp = (struct mgmt_cp_add_advertising *) adv_param;
10975 setup_add_adv_param(cp, 1);
10977 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
10978 sizeof(adv_param), adv_param,
10979 setup_add_adv_callback, NULL, NULL);
10981 /* Add IRKs of 4 Devices */
10982 mgmt_send(data->mgmt, MGMT_OP_LOAD_IRKS, data->mgmt_index,
10983 sizeof(load_irks_4_devices_param),
10984 load_irks_4_devices_param,
10985 setup_load_irks_callback, NULL, NULL);
10988 mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
10989 sizeof(add_device_le_public_param_1),
10990 add_device_le_public_param_1,
10991 setup_add_device_callback, NULL, NULL);
10994 mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
10995 sizeof(add_device_le_public_param_2),
10996 add_device_le_public_param_2,
10997 setup_add_device_callback, NULL, NULL);
11000 mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
11001 sizeof(add_device_le_public_param_3),
11002 add_device_le_public_param_3,
11003 setup_add_device_callback, NULL, NULL);
11005 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
11006 sizeof(param), param,
11007 setup_powered_callback, NULL, NULL);
11010 static void setup_ll_privacy_adv_1_device_2_advs(const void *test_data)
11012 struct test_data *data = tester_get_data();
11013 struct mgmt_cp_add_advertising *cp;
11014 unsigned char param[] = { 0x01 };
11015 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
11017 cp = (struct mgmt_cp_add_advertising *) adv_param;
11018 setup_add_adv_param(cp, 1);
11020 /* Add IRKs of 4 Devices */
11021 mgmt_send(data->mgmt, MGMT_OP_LOAD_IRKS, data->mgmt_index,
11022 sizeof(load_irks_4_devices_param),
11023 load_irks_4_devices_param,
11024 setup_load_irks_callback, NULL, NULL);
11026 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
11027 sizeof(param), param,
11031 mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
11032 sizeof(add_device_le_public_param_1),
11033 add_device_le_public_param_1,
11034 setup_add_device_callback, NULL, NULL);
11037 mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
11038 sizeof(add_device_le_public_param_2),
11039 add_device_le_public_param_2,
11040 setup_add_device_callback, NULL, NULL);
11042 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
11043 sizeof(adv_param), adv_param,
11044 setup_add_adv_callback_adv, NULL, NULL);
11047 static void setup_add_2_advertisings(const void *test_data)
11049 struct test_data *data = tester_get_data();
11050 struct mgmt_cp_add_advertising *cp;
11051 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
11052 unsigned char param[] = { 0x01 };
11054 tester_print("Adding advertising instance while powered");
11056 cp = (struct mgmt_cp_add_advertising *) adv_param;
11057 setup_add_adv_param(cp, 1);
11059 mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
11060 sizeof(param), ¶m,
11063 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
11064 sizeof(param), param,
11067 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
11068 sizeof(adv_param), adv_param,
11069 setup_add_adv_callback_adv,
11073 static void setup_add_2_advertisings_no_power(const void *test_data)
11075 struct test_data *data = tester_get_data();
11076 struct mgmt_cp_add_advertising *cp;
11077 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
11078 unsigned char param[] = { 0x01 };
11080 tester_print("Adding advertising instance while not powered");
11082 cp = (struct mgmt_cp_add_advertising *) adv_param;
11083 setup_add_adv_param(cp, 1);
11085 mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
11086 sizeof(param), ¶m,
11089 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
11090 sizeof(adv_param), adv_param,
11091 setup_add_adv_callback_adv,
11095 static void setup_ll_privacy_enable_powered(const void *test_data)
11097 struct test_data *data = tester_get_data();
11098 unsigned char param[] = { 0x01 };
11099 struct bthost *bthost;
11101 bthost = hciemu_client_get_host(data->hciemu);
11102 bthost_set_scan_params(bthost, 0x01, 0x00, 0x00);
11103 bthost_set_scan_enable(bthost, 0x01);
11105 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
11106 sizeof(param), param,
11107 setup_powered_callback, NULL, NULL);
11110 static void setup_ll_privacy_add_adv(const void *test_data)
11112 struct test_data *data = tester_get_data();
11113 const struct generic_data *test = data->test_data;
11114 unsigned char param[] = { 0x01 };
11115 unsigned char set_adv_param[] = { 0x02 };
11116 struct bthost *bthost;
11118 /* Setup bthost to enable the scan */
11119 bthost = hciemu_client_get_host(data->hciemu);
11120 bthost_set_scan_params(bthost, 0x01, 0x00, 0x00);
11121 bthost_set_scan_enable(bthost, 0x01);
11123 mgmt_send(data->mgmt, MGMT_OP_SET_CONNECTABLE, data->mgmt_index,
11124 sizeof(param), ¶m,
11127 mgmt_send(data->mgmt, MGMT_OP_SET_BONDABLE, data->mgmt_index,
11128 sizeof(param), ¶m,
11131 mgmt_send(data->mgmt, MGMT_OP_SET_IO_CAPABILITY, data->mgmt_index,
11132 sizeof(test->io_cap), &test->io_cap,
11135 mgmt_send(data->mgmt, MGMT_OP_SET_ADVERTISING, data->mgmt_index,
11136 sizeof(set_adv_param),
11140 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
11141 sizeof(param), param,
11142 setup_powered_callback, NULL, NULL);
11145 static void setup_ll_privacy_add_device(const void *test_data)
11147 struct test_data *data = tester_get_data();
11148 unsigned char param[] = { 0x01 };
11150 mgmt_send(data->mgmt, MGMT_OP_LOAD_IRKS, data->mgmt_index,
11151 sizeof(load_irks_le_public_param_1),
11152 load_irks_le_public_param_1,
11153 setup_load_irks_callback, NULL, NULL);
11155 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
11156 sizeof(param), param,
11157 setup_powered_callback, NULL, NULL);
11159 mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
11160 sizeof(add_device_le_public_param_1),
11161 add_device_le_public_param_1,
11162 setup_add_device_callback, NULL, NULL);
11166 static bool power_off(uint16_t index)
11170 sk = hci_open_dev(index);
11174 err = ioctl(sk, HCIDEVDOWN, index);
11184 /* Read HCI commands in the expect_hci_list and add it to the queue
11186 static void add_expect_hci_list(struct test_data *data)
11188 const struct generic_data *test = data->test_data;
11189 const struct hci_cmd_data *hci_cmd_data;
11191 /* Initialize the queue */
11192 data->expect_hci_q = queue_new();
11194 hci_cmd_data = test->expect_hci_list;
11195 for (; hci_cmd_data->opcode; hci_cmd_data++) {
11196 struct hci_entry *entry;
11198 entry = new0(struct hci_entry, 1);
11199 entry->cmd_data = hci_cmd_data;
11200 queue_push_tail(data->expect_hci_q, entry);
11202 test_add_condition(data);
11206 static void test_command_generic(const void *test_data)
11208 struct test_data *data = tester_get_data();
11209 const struct generic_data *test = data->test_data;
11210 const void *send_param = test->send_param;
11211 uint16_t send_len = test->send_len;
11215 index = test->send_index_none ? MGMT_INDEX_NONE : data->mgmt_index;
11217 if (test->expect_settings_set || test->expect_settings_unset) {
11218 tester_print("Registering new settings notification");
11220 id = mgmt_register(data->mgmt, MGMT_EV_NEW_SETTINGS, index,
11221 command_generic_new_settings, NULL, NULL);
11222 data->mgmt_settings_id = id;
11224 id = mgmt_register(data->mgmt_alt, MGMT_EV_NEW_SETTINGS, index,
11225 command_generic_new_settings_alt, NULL, NULL);
11226 data->mgmt_alt_settings_id = id;
11227 test_add_condition(data);
11230 if (test->expect_alt_ev) {
11231 tester_print("Registering %s notification",
11232 mgmt_evstr(test->expect_alt_ev));
11233 id = mgmt_register(data->mgmt_alt, test->expect_alt_ev, index,
11234 command_generic_event_alt, NULL, NULL);
11235 data->mgmt_alt_ev_id = id;
11236 test_add_condition(data);
11239 if (test->expect_hci_command) {
11240 tester_print("Registering HCI command callback");
11241 hciemu_add_central_post_command_hook(data->hciemu,
11242 command_hci_callback, data);
11243 test_add_condition(data);
11244 } else if (test->expect_hci_list) {
11245 /* Use this when it needs to check more than 1 hci command.
11246 * However, it cannot be used with expect_hci_command.
11248 tester_print("Registering HCI command list callback");
11249 hciemu_add_central_post_command_hook(data->hciemu,
11250 command_hci_list_callback, data);
11251 add_expect_hci_list(data);
11254 if (test->send_opcode == 0x0000) {
11255 tester_print("Executing no-op test");
11259 tester_print("Sending %s (0x%04x)", mgmt_opstr(test->send_opcode),
11260 test->send_opcode);
11262 if (test->send_func)
11263 send_param = test->send_func(&send_len);
11265 if (test->force_power_off) {
11266 mgmt_send_nowait(data->mgmt, test->send_opcode, index,
11267 send_len, send_param,
11268 command_generic_callback, NULL, NULL);
11269 power_off(data->mgmt_index);
11271 mgmt_send(data->mgmt, test->send_opcode, index, send_len,
11272 send_param, command_generic_callback,
11276 test_add_condition(data);
11279 static void check_scan(void *user_data)
11281 struct test_data *data = tester_get_data();
11283 if (hciemu_get_central_le_scan_enable(data->hciemu)) {
11284 tester_warn("LE scan still enabled");
11285 tester_test_failed();
11289 if (hciemu_get_central_scan_enable(data->hciemu)) {
11290 tester_warn("BR/EDR scan still enabled");
11291 tester_test_failed();
11295 test_condition_complete(data);
11298 static void test_remove_device(const void *test_data)
11300 struct test_data *data = tester_get_data();
11302 test_command_generic(test_data);
11303 tester_wait(1, check_scan, NULL);
11304 test_add_condition(data);
11307 static void trigger_device_found(void *user_data)
11309 struct test_data *data = tester_get_data();
11310 const struct generic_data *test = data->test_data;
11311 struct bthost *bthost;
11313 bthost = hciemu_client_get_host(data->hciemu);
11315 if ((data->hciemu_type == HCIEMU_TYPE_LE) ||
11316 (data->hciemu_type == HCIEMU_TYPE_BREDRLE)) {
11318 bthost_set_adv_data(bthost, test->adv_data,
11319 test->adv_data_len);
11321 bthost_set_adv_enable(bthost, 0x01);
11322 } else if (data->hciemu_type >= HCIEMU_TYPE_BREDRLE50) {
11323 bthost_set_ext_adv_params(bthost);
11325 bthost_set_ext_adv_data(bthost, test->adv_data,
11326 test->adv_data_len);
11328 bthost_set_ext_adv_enable(bthost, 0x01);
11331 if (data->hciemu_type != HCIEMU_TYPE_LE)
11332 bthost_write_scan_enable(bthost, 0x03);
11334 test_condition_complete(data);
11337 static void test_device_found(const void *test_data)
11339 struct test_data *data = tester_get_data();
11341 test_command_generic(test_data);
11343 /* Make sure discovery is enabled before enabling advertising. */
11344 tester_wait(1, trigger_device_found, NULL);
11345 test_add_condition(data);
11348 static void pairing_new_conn(uint16_t handle, void *user_data)
11350 struct test_data *data = tester_get_data();
11351 struct bthost *bthost;
11353 tester_print("New connection with handle 0x%04x", handle);
11355 bthost = hciemu_client_get_host(data->hciemu);
11357 bthost_request_auth(bthost, handle);
11360 static void test_pairing_acceptor(const void *test_data)
11362 struct test_data *data = tester_get_data();
11363 const struct generic_data *test = data->test_data;
11364 const uint8_t *central_bdaddr;
11365 struct bthost *bthost;
11368 if (test->expect_alt_ev) {
11371 tester_print("Registering %s notification",
11372 mgmt_evstr(test->expect_alt_ev));
11373 id = mgmt_register(data->mgmt_alt, test->expect_alt_ev,
11375 command_generic_event_alt, NULL, NULL);
11376 data->mgmt_alt_ev_id = id;
11377 test_add_condition(data);
11380 central_bdaddr = hciemu_get_central_bdaddr(data->hciemu);
11381 if (!central_bdaddr) {
11382 tester_warn("No central bdaddr");
11383 tester_test_failed();
11387 bthost = hciemu_client_get_host(data->hciemu);
11388 bthost_set_connect_cb(bthost, pairing_new_conn, data);
11390 if (data->hciemu_type == HCIEMU_TYPE_BREDRLE)
11391 addr_type = BDADDR_BREDR;
11393 addr_type = BDADDR_LE_PUBLIC;
11395 bthost_hci_connect(bthost, central_bdaddr, addr_type);
11399 static void check_le_ext_adv_discovery(void *user_data)
11401 struct test_data *data = tester_get_data();
11402 const uint8_t *adv_addr;
11403 struct bthost *bthost;
11405 adv_addr = hciemu_get_central_adv_addr(data->hciemu, 0x00);
11407 tester_warn("No EXT ADV Address");
11408 tester_test_failed();
11412 bthost = hciemu_client_get_host(data->hciemu);
11413 if (bthost_search_ext_adv_addr(bthost, adv_addr))
11414 tester_test_passed();
11416 tester_test_failed();
11418 test_condition_complete(data);
11421 static void test_ll_privacy_bthost_scan_report(const void *test_data)
11423 struct test_data *data = tester_get_data();
11425 test_command_generic(test_data);
11426 tester_wait(1, check_le_ext_adv_discovery, NULL);
11427 test_add_condition(data);
11430 static void test_pairing_acceptor_ll_privacy_le_random(const void *test_data)
11432 struct test_data *data = tester_get_data();
11433 const struct generic_data *test = data->test_data;
11434 const uint8_t *adv_addr;
11435 struct bthost *bthost;
11437 if (test->expect_alt_ev) {
11440 tester_print("Registering %s notification",
11441 mgmt_evstr(test->expect_alt_ev));
11442 id = mgmt_register(data->mgmt_alt, test->expect_alt_ev,
11444 command_generic_event_alt, NULL, NULL);
11445 data->mgmt_alt_ev_id = id;
11446 test_add_condition(data);
11449 adv_addr = hciemu_get_central_adv_addr(data->hciemu, 0x00);
11451 tester_warn("No EXT ADV Address");
11452 tester_test_failed();
11456 tester_print("Ext Adv Address: %02x:%02x:%02x:%02x:%02x:%02x",
11457 adv_addr[0], adv_addr[1], adv_addr[2],
11458 adv_addr[3], adv_addr[4], adv_addr[5]);
11460 bthost = hciemu_client_get_host(data->hciemu);
11461 bthost_set_connect_cb(bthost, pairing_new_conn, data);
11463 bthost_hci_ext_connect(bthost, adv_addr, BDADDR_LE_RANDOM);
11466 static void new_link_key_evt_pair_2_callback(uint16_t index, uint16_t length,
11470 struct test_data *data = tester_get_data();
11472 tester_print("New %s event received", mgmt_evstr(MGMT_EV_NEW_LINK_KEY));
11474 mgmt_unregister(data->mgmt, data->mgmt_discov_ev_id);
11476 /* TODO: validate the event */
11477 test_condition_complete(data);
11480 static void test_ll_privacy_pair_2(const void *test_data)
11482 struct test_data *data = tester_get_data();
11485 test_command_generic(test_data);
11487 tester_print("Registering New Link Key notification");
11488 id = mgmt_register(data->mgmt, MGMT_EV_NEW_LINK_KEY,
11489 data->mgmt_index, new_link_key_evt_pair_2_callback,
11491 /* Reuse the variable */
11492 data->mgmt_discov_ev_id = id;
11493 test_add_condition(data);
11496 static void unpair_device_command_callback(uint8_t status, uint16_t length,
11497 const void *param, void *user_data)
11499 struct test_data *data = tester_get_data();
11501 tester_print("%s (0x%04x): %s (0x%02x)",
11502 mgmt_opstr(MGMT_OP_UNPAIR_DEVICE),
11503 MGMT_OP_UNPAIR_DEVICE, mgmt_errstr(status), status);
11505 if (status != MGMT_STATUS_SUCCESS) {
11506 tester_warn("Unexpected status got %d expected %d",
11507 status, MGMT_STATUS_SUCCESS);
11508 tester_test_failed();
11511 test_condition_complete(data);
11514 static void unpair_device(void *user_data)
11516 struct test_data *data = tester_get_data();
11518 tester_print("Sending %s (0x%04x)", mgmt_opstr(MGMT_OP_UNPAIR_DEVICE),
11519 MGMT_OP_UNPAIR_DEVICE);
11521 /* Send Unpair command */
11522 mgmt_send(data->mgmt, MGMT_OP_UNPAIR_DEVICE, data->mgmt_index,
11523 sizeof(unpair_client_1), unpair_client_1,
11524 unpair_device_command_callback, NULL, NULL);
11525 test_add_condition(data);
11528 static void disconnect_device_command_callback(uint8_t status, uint16_t length,
11529 const void *param, void *user_data)
11531 struct test_data *data = tester_get_data();
11533 tester_print("%s (0x%04x): %s (0x%02x)",
11534 mgmt_opstr(MGMT_OP_DISCONNECT),
11535 MGMT_OP_DISCONNECT, mgmt_errstr(status), status);
11537 if (status != MGMT_STATUS_SUCCESS) {
11538 tester_warn("Unexpected status got %d expected %d",
11539 status, MGMT_STATUS_SUCCESS);
11540 tester_test_failed();
11543 test_condition_complete(data);
11545 unpair_device(NULL);
11548 static void unpair_disconnect_device(void *user_data)
11550 struct test_data *data = tester_get_data();
11552 tester_print("Sending %s (0x%04x)", mgmt_opstr(MGMT_OP_DISCONNECT),
11553 MGMT_OP_DISCONNECT);
11555 /* Send Unpair command */
11556 mgmt_send(data->mgmt, MGMT_OP_DISCONNECT, data->mgmt_index,
11557 sizeof(remove_paired_device_1), remove_paired_device_1,
11558 disconnect_device_command_callback, NULL, NULL);
11560 test_add_condition(data);
11563 static void new_link_key_evt_unpair_callback(uint16_t index, uint16_t length,
11567 struct test_data *data = tester_get_data();
11569 tester_print("New %s event received", mgmt_evstr(MGMT_EV_NEW_LINK_KEY));
11571 mgmt_unregister(data->mgmt, data->mgmt_discov_ev_id);
11573 /* TODO: validate the event */
11574 test_condition_complete(data);
11576 /* Wait 1 sec for pairing command complete event */
11577 tester_wait(1, unpair_disconnect_device, NULL);
11580 static void test_ll_privacy_unpair(const void *test_data)
11582 struct test_data *data = tester_get_data();
11585 test_command_generic(test_data);
11587 tester_print("Registering New Link Key notification");
11588 id = mgmt_register(data->mgmt, MGMT_EV_NEW_LINK_KEY,
11589 data->mgmt_index, new_link_key_evt_unpair_callback,
11591 /* Reuse the variable */
11592 data->mgmt_discov_ev_id = id;
11593 test_add_condition(data);
11596 static void remove_device_command_callback(uint8_t status, uint16_t length,
11597 const void *param, void *user_data)
11599 struct test_data *data = tester_get_data();
11601 tester_print("%s (0x%04x): %s (0x%02x)",
11602 mgmt_opstr(MGMT_OP_REMOVE_DEVICE),
11603 MGMT_OP_REMOVE_DEVICE, mgmt_errstr(status), status);
11605 if (status != MGMT_STATUS_SUCCESS) {
11606 tester_warn("Unexpected status got %d expected %d",
11607 status, MGMT_STATUS_SUCCESS);
11608 tester_test_failed();
11611 test_condition_complete(data);
11613 unpair_device(NULL);
11616 static void remove_device(void *user_data)
11618 struct test_data *data = tester_get_data();
11620 tester_print("Sending %s (0x%04x)", mgmt_opstr(MGMT_OP_REMOVE_DEVICE),
11621 MGMT_OP_REMOVE_DEVICE);
11623 /* Send Unpair command */
11624 mgmt_send(data->mgmt, MGMT_OP_REMOVE_DEVICE, data->mgmt_index,
11625 sizeof(remove_paired_device_1), remove_paired_device_1,
11626 remove_device_command_callback, NULL, NULL);
11627 test_add_condition(data);
11630 static void add_device_2_command_callback(uint8_t status, uint16_t length,
11631 const void *param, void *user_data)
11633 struct test_data *data = tester_get_data();
11635 tester_print("%s (0x%04x): %s (0x%02x)",
11636 mgmt_opstr(MGMT_OP_ADD_DEVICE),
11637 MGMT_OP_ADD_DEVICE, mgmt_errstr(status), status);
11639 if (status != MGMT_STATUS_SUCCESS) {
11640 tester_warn("Unexpected status got %d expected %d",
11641 status, MGMT_STATUS_SUCCESS);
11642 tester_test_failed();
11646 test_condition_complete(data);
11648 remove_device(NULL);
11651 static void add_device_2(void *user_data)
11653 struct test_data *data = tester_get_data();
11655 tester_print("Sending %s (0x%04x)", mgmt_opstr(MGMT_OP_ADD_DEVICE),
11656 MGMT_OP_ADD_DEVICE);
11658 /* Send Add Device command */
11659 mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
11660 sizeof(add_device_le_public_param_1),
11661 add_device_le_public_param_1,
11662 add_device_2_command_callback, NULL, NULL);
11664 test_add_condition(data);
11667 static void add_device_command_callback(uint8_t status, uint16_t length,
11668 const void *param, void *user_data)
11670 struct test_data *data = tester_get_data();
11672 tester_print("%s (0x%04x): %s (0x%02x)",
11673 mgmt_opstr(MGMT_OP_ADD_DEVICE),
11674 MGMT_OP_ADD_DEVICE, mgmt_errstr(status), status);
11676 if (status != MGMT_STATUS_SUCCESS) {
11677 tester_warn("Unexpected status got %d expected %d",
11678 status, MGMT_STATUS_SUCCESS);
11679 tester_test_failed();
11682 test_condition_complete(data);
11684 add_device_2(NULL);
11687 static void add_device(void *user_data)
11689 struct test_data *data = tester_get_data();
11691 tester_print("Sending %s (0x%04x)", mgmt_opstr(MGMT_OP_ADD_DEVICE),
11692 MGMT_OP_ADD_DEVICE);
11694 /* Send Unpair command */
11695 mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
11696 sizeof(add_paired_client_1), add_paired_client_1,
11697 add_device_command_callback, NULL, NULL);
11698 test_add_condition(data);
11701 static void unpair_2_disconnect_command_callback(uint8_t status,
11706 struct test_data *data = tester_get_data();
11708 tester_print("%s (0x%04x): %s (0x%02x)",
11709 mgmt_opstr(MGMT_OP_DISCONNECT),
11710 MGMT_OP_DISCONNECT, mgmt_errstr(status), status);
11712 if (status != MGMT_STATUS_SUCCESS) {
11713 tester_warn("Unexpected status got %d expected %d",
11714 status, MGMT_STATUS_SUCCESS);
11715 tester_test_failed();
11718 test_condition_complete(data);
11723 static void unpair_2_disconnect_device(void *user_data)
11725 struct test_data *data = tester_get_data();
11727 tester_print("Sending %s (0x%04x)", mgmt_opstr(MGMT_OP_DISCONNECT),
11728 MGMT_OP_DISCONNECT);
11730 /* Send Unpair command */
11731 mgmt_send(data->mgmt, MGMT_OP_DISCONNECT, data->mgmt_index,
11732 sizeof(remove_paired_device_1), remove_paired_device_1,
11733 unpair_2_disconnect_command_callback, NULL, NULL);
11735 test_add_condition(data);
11738 static void new_link_key_evt_add_dev_callback(uint16_t index, uint16_t length,
11742 struct test_data *data = tester_get_data();
11744 tester_print("New %s event received", mgmt_evstr(MGMT_EV_NEW_LINK_KEY));
11746 mgmt_unregister(data->mgmt, data->mgmt_discov_ev_id);
11748 /* TODO: validate the event */
11749 test_condition_complete(data);
11751 /* Wait 1 sec for pairing command complete event */
11752 tester_wait(1, unpair_2_disconnect_device, NULL);
11755 static void test_ll_privacy_unpair_2(const void *test_data)
11757 struct test_data *data = tester_get_data();
11760 test_command_generic(test_data);
11762 tester_print("Registering New Link Key notification");
11763 id = mgmt_register(data->mgmt, MGMT_EV_NEW_LINK_KEY,
11764 data->mgmt_index, new_link_key_evt_add_dev_callback,
11766 /* Reuse the variable */
11767 data->mgmt_discov_ev_id = id;
11768 test_add_condition(data);
11771 static void connected_event(uint16_t index, uint16_t length, const void *param,
11774 struct test_data *data = tester_get_data();
11775 const struct generic_data *test = data->test_data;
11776 const void *send_param = test->send_param;
11777 uint16_t send_len = test->send_len;
11779 tester_print("Sending %s 0x%04x", mgmt_opstr(test->send_opcode),
11780 test->send_opcode);
11782 if (test->send_func)
11783 send_param = test->send_func(&send_len);
11785 if (test->force_power_off) {
11786 mgmt_send_nowait(data->mgmt, test->send_opcode, index,
11787 send_len, send_param,
11788 command_generic_callback, NULL, NULL);
11789 power_off(data->mgmt_index);
11791 mgmt_send(data->mgmt, test->send_opcode, index, send_len,
11792 send_param, command_generic_callback,
11796 test_add_condition(data);
11798 /* Complete MGMT_EV_DEVICE_CONNECTED *after* adding new one */
11799 test_condition_complete(data);
11802 static void test_command_generic_connect(const void *test_data)
11804 struct test_data *data = tester_get_data();
11806 const uint8_t *central_bdaddr;
11808 struct bthost *bthost;
11810 tester_print("Registering %s notification",
11811 mgmt_evstr(MGMT_EV_DEVICE_CONNECTED));
11812 id = mgmt_register(data->mgmt_alt, MGMT_EV_DEVICE_CONNECTED,
11813 data->mgmt_index, connected_event,
11815 data->mgmt_alt_ev_id = id;
11816 test_add_condition(data);
11818 central_bdaddr = hciemu_get_central_bdaddr(data->hciemu);
11819 if (!central_bdaddr) {
11820 tester_warn("No central bdaddr");
11821 tester_test_failed();
11825 addr_type = data->hciemu_type == HCIEMU_TYPE_BREDRLE ? BDADDR_BREDR :
11827 tester_print("ADDR TYPE: %d", addr_type);
11828 bthost = hciemu_client_get_host(data->hciemu);
11829 bthost_hci_connect(bthost, central_bdaddr, addr_type);
11832 static bool test_adv_enable_hook(const void *data, uint16_t len,
11835 struct test_data *test_data = user_data;
11836 const uint8_t *status = data;
11838 if (*status == 0) {
11839 tester_print("Advertising enabled");
11840 test_condition_complete(test_data);
11842 tester_print("Advertising enabled error 0x%02x", *status);
11848 static void disconnected_event(uint16_t index, uint16_t length,
11849 const void *param, void *user_data)
11851 tester_test_failed();
11854 static void le_connected_event(uint16_t index, uint16_t length,
11855 const void *param, void *user_data)
11857 struct test_data *data = tester_get_data();
11859 tester_print("Device connected");
11861 if (data->hciemu_type < HCIEMU_TYPE_BREDRLE50) {
11862 test_add_condition(data);
11863 hciemu_add_hook(data->hciemu, HCIEMU_HOOK_POST_CMD,
11864 BT_HCI_CMD_LE_SET_ADV_ENABLE,
11865 test_adv_enable_hook, data);
11868 /* Make sure we get not disconnected during the testaces */
11869 mgmt_register(data->mgmt_alt, MGMT_EV_DEVICE_DISCONNECTED,
11870 data->mgmt_index, disconnected_event,
11873 test_condition_complete(data);
11876 static void add_device_callback(uint8_t status, uint16_t len, const void *param,
11879 struct test_data *data = user_data;
11880 const struct generic_data *test = data->test_data;
11881 struct bthost *bthost;
11882 const uint8_t *central_bdaddr;
11885 tester_test_failed();
11889 tester_print("Device added");
11891 /* If advertising is enabled on client that means we can stop here and
11892 * just wait for connection
11894 if (test->client_enable_adv)
11897 central_bdaddr = hciemu_get_central_bdaddr(data->hciemu);
11898 if (!central_bdaddr) {
11899 tester_warn("No central bdaddr");
11900 tester_test_failed();
11904 bthost = hciemu_client_get_host(data->hciemu);
11905 if (data->hciemu_type >= HCIEMU_TYPE_BREDRLE50)
11906 bthost_hci_ext_connect(bthost, central_bdaddr,
11909 bthost_hci_connect(bthost, central_bdaddr, BDADDR_LE_PUBLIC);
11912 static void test_connected_and_advertising(const void *test_data)
11914 struct test_data *data = tester_get_data();
11915 const struct generic_data *test = data->test_data;
11916 const uint8_t *client_bdaddr;
11917 struct mgmt_cp_add_device cp;
11919 tester_print("Registering %s notification",
11920 mgmt_evstr(MGMT_EV_DEVICE_CONNECTED));
11922 test_add_condition(data);
11923 mgmt_register(data->mgmt_alt, MGMT_EV_DEVICE_CONNECTED,
11924 data->mgmt_index, le_connected_event,
11927 client_bdaddr = hciemu_get_client_bdaddr(data->hciemu);
11928 if (!client_bdaddr) {
11929 tester_warn("No client bdaddr");
11930 tester_test_failed();
11934 memset(&cp, 0, sizeof(cp));
11935 memcpy(&cp.addr.bdaddr, client_bdaddr, 6);
11936 cp.addr.type = BDADDR_LE_PUBLIC;
11938 if (test->client_enable_adv)
11939 cp.action = 0x02; /* Auto connect */
11941 cp.action = 0x01; /* Allow incoming connection */
11943 mgmt_send(data->mgmt_alt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
11945 add_device_callback,
11949 static void read_50_controller_cap_complete(uint8_t status, uint16_t length,
11950 const void *param, void *user_data)
11952 struct test_data *data = user_data;
11953 const struct mgmt_rp_read_controller_cap *rp = param;
11954 const uint8_t *ptr = rp->cap;
11959 if (status || !param) {
11960 tester_warn("Failed to read advertising features: %s (0x%02x)",
11961 mgmt_errstr(status), status);
11962 tester_test_failed();
11965 if (sizeof(rp->cap_len) + rp->cap_len != length) {
11966 tester_warn("Controller capabilities malformed, size %zu != %u",
11967 sizeof(rp->cap_len) + rp->cap_len, length);
11968 tester_test_failed();
11971 while (offset < rp->cap_len) {
11972 tag_len = ptr[offset++];
11973 tag_type = ptr[offset++];
11975 switch (tag_type) {
11976 case MGMT_CAP_LE_TX_PWR:
11977 if ((tag_len - sizeof(tag_type)) != 2) {
11978 tester_warn("TX power had unexpected length %d",
11982 tester_print("Expected Tx Power discovered: %d-%d",
11983 ptr[offset], ptr[offset+1]);
11984 test_condition_complete(data);
11987 /* Step to the next entry */
11988 offset += (tag_len - sizeof(tag_type));
11992 static void test_50_controller_cap_response(const void *test_data)
11994 struct test_data *data = tester_get_data();
11996 test_add_condition(data);
11998 mgmt_send(data->mgmt_alt, MGMT_OP_READ_CONTROLLER_CAP, data->mgmt_index,
12000 read_50_controller_cap_complete,
12004 static const uint8_t suspend_state_param_disconnect[] = {
12008 static const uint8_t suspend_state_param_page_scan[] = {
12012 static const uint8_t resume_state_param_non_bt_wake[] = {
12014 0x00, 0x00, 0x0, 0x00, 0x00, 0x00,
12018 static const struct generic_data suspend_resume_success_1 = {
12019 .setup_settings = settings_powered,
12020 .expect_alt_ev = MGMT_EV_CONTROLLER_SUSPEND,
12021 .expect_alt_ev_param = suspend_state_param_disconnect,
12022 .expect_alt_ev_len = sizeof(suspend_state_param_disconnect),
12025 static void test_suspend_resume_success_1(const void *test_data)
12027 struct test_data *data = tester_get_data();
12028 struct vhci *vhci = hciemu_get_vhci(data->hciemu);
12031 /* Triggers the suspend */
12032 err = vhci_set_force_suspend(vhci, true);
12034 tester_warn("Unable to enable the force_suspend");
12035 tester_test_failed();
12038 test_command_generic(test_data);
12041 static const struct generic_data suspend_resume_success_2 = {
12042 .setup_settings = settings_powered,
12043 .expect_alt_ev = MGMT_EV_CONTROLLER_RESUME,
12044 .expect_alt_ev_param = resume_state_param_non_bt_wake,
12045 .expect_alt_ev_len = sizeof(resume_state_param_non_bt_wake),
12048 static void test_suspend_resume_success_2(const void *test_data)
12050 struct test_data *data = tester_get_data();
12051 struct vhci *vhci = hciemu_get_vhci(data->hciemu);
12054 /* Triggers the suspend */
12055 err = vhci_set_force_suspend(vhci, true);
12057 tester_warn("Unable to enable the force_suspend");
12058 tester_test_failed();
12062 /* Triggers the resume */
12063 err = vhci_set_force_suspend(vhci, false);
12065 tester_warn("Unable to enable the force_suspend");
12066 tester_test_failed();
12069 test_command_generic(test_data);
12072 static const struct generic_data suspend_resume_success_3 = {
12073 .setup_expect_hci_command = BT_HCI_CMD_LE_ADD_TO_ACCEPT_LIST,
12074 .setup_expect_hci_param = le_add_to_accept_list_param,
12075 .setup_expect_hci_len = sizeof(le_add_to_accept_list_param),
12076 .expect_alt_ev = MGMT_EV_CONTROLLER_SUSPEND,
12077 .expect_alt_ev_param = suspend_state_param_disconnect,
12078 .expect_alt_ev_len = sizeof(suspend_state_param_disconnect),
12081 static void setup_suspend_resume_success_3(const void *test_data)
12083 struct test_data *data = tester_get_data();
12084 unsigned char param[] = { 0x01 };
12087 mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
12088 sizeof(add_device_success_param_3),
12089 add_device_success_param_3,
12090 setup_add_device_callback,
12093 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
12094 sizeof(param), param,
12095 setup_powered_callback, NULL, NULL);
12098 static void test_suspend_resume_success_3(const void *test_data)
12100 struct test_data *data = tester_get_data();
12101 struct vhci *vhci = hciemu_get_vhci(data->hciemu);
12104 /* Triggers the suspend */
12105 err = vhci_set_force_suspend(vhci, true);
12107 tester_warn("Unable to enable the force_suspend");
12108 tester_test_failed();
12111 test_command_generic(test_data);
12114 static const struct generic_data suspend_resume_success_4 = {
12115 .setup_expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_ENABLE,
12116 .setup_expect_hci_param = set_ext_adv_on_set_adv_enable_param,
12117 .setup_expect_hci_len = sizeof(set_ext_adv_on_set_adv_enable_param),
12118 .expect_alt_ev = MGMT_EV_CONTROLLER_SUSPEND,
12119 .expect_alt_ev_param = suspend_state_param_disconnect,
12120 .expect_alt_ev_len = sizeof(suspend_state_param_disconnect),
12123 static void setup_suspend_resume_success_4(const void *test_data)
12125 struct test_data *data = tester_get_data();
12126 struct mgmt_cp_add_advertising *cp;
12127 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
12128 unsigned char param[] = { 0x01 };
12130 cp = (struct mgmt_cp_add_advertising *) adv_param;
12131 setup_add_adv_param(cp, 1);
12133 mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
12134 sizeof(param), ¶m,
12137 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
12138 sizeof(param), param,
12141 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
12142 sizeof(adv_param), adv_param,
12143 setup_add_advertising_callback,
12147 static void test_suspend_resume_success_4(const void *test_data)
12149 struct test_data *data = tester_get_data();
12150 struct vhci *vhci = hciemu_get_vhci(data->hciemu);
12153 test_command_generic(test_data);
12155 /* Triggers the suspend */
12156 tester_print("Set the system into Suspend via force_suspend");
12157 err = vhci_set_force_suspend(vhci, true);
12159 tester_warn("Unable to enable the force_suspend");
12160 tester_test_failed();
12165 static const struct generic_data suspend_resume_success_5 = {
12166 .setup_settings = settings_powered_connectable_bondable,
12167 .pin = pair_device_pin,
12168 .pin_len = sizeof(pair_device_pin),
12169 .client_pin = pair_device_pin,
12170 .client_pin_len = sizeof(pair_device_pin),
12171 .expect_alt_ev = MGMT_EV_CONTROLLER_SUSPEND,
12172 .expect_alt_ev_param = suspend_state_param_disconnect,
12173 .expect_alt_ev_len = sizeof(suspend_state_param_disconnect),
12176 static void trigger_force_suspend(void *user_data)
12178 struct test_data *data = tester_get_data();
12179 struct vhci *vhci = hciemu_get_vhci(data->hciemu);
12182 /* Triggers the suspend */
12183 tester_print("Set the system into Suspend via force_suspend");
12184 err = vhci_set_force_suspend(vhci, true);
12186 tester_warn("Unable to enable the force_suspend");
12191 static void trigger_force_resume(void *user_data)
12193 struct test_data *data = tester_get_data();
12194 struct vhci *vhci = hciemu_get_vhci(data->hciemu);
12197 /* Triggers the suspend */
12198 tester_print("Set the system into Resume via force_suspend");
12199 err = vhci_set_force_suspend(vhci, false);
12201 tester_warn("Unable to disable the force_suspend");
12206 static void test_suspend_resume_success_5(const void *test_data)
12208 test_pairing_acceptor(test_data);
12209 tester_wait(1, trigger_force_suspend, NULL);
12212 static const struct generic_data suspend_resume_success_6 = {
12213 .setup_settings = settings_powered_connectable_bondable_ssp,
12214 .client_enable_ssp = true,
12215 .expect_alt_ev = MGMT_EV_CONTROLLER_SUSPEND,
12216 .expect_alt_ev_param = suspend_state_param_disconnect,
12217 .expect_alt_ev_len = sizeof(suspend_state_param_disconnect),
12218 .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
12219 .expect_hci_func = client_bdaddr_param_func,
12220 .io_cap = 0x03, /* NoInputNoOutput */
12221 .client_io_cap = 0x03, /* NoInputNoOutput */
12222 .just_works = true,
12225 static const struct generic_data suspend_resume_success_7 = {
12226 .setup_settings = settings_powered,
12227 .expect_alt_ev = MGMT_EV_CONTROLLER_SUSPEND,
12228 .expect_alt_ev_param = suspend_state_param_page_scan,
12229 .expect_alt_ev_len = sizeof(suspend_state_param_page_scan),
12232 static void test_suspend_resume_success_7(const void *test_data)
12234 struct test_data *data = tester_get_data();
12235 struct vhci *vhci = hciemu_get_vhci(data->hciemu);
12238 /* Set Force Wakeup */
12239 err = vhci_set_force_wakeup(vhci, true);
12241 tester_warn("Unable to enable the force_wakeup");
12242 tester_test_failed();
12246 /* Triggers the suspend */
12247 err = vhci_set_force_suspend(vhci, true);
12249 tester_warn("Unable to enable the force_suspend");
12250 tester_test_failed();
12253 test_command_generic(test_data);
12256 static const struct generic_data suspend_resume_success_8 = {
12257 .setup_settings = settings_powered_le,
12258 .send_opcode = MGMT_OP_START_DISCOVERY,
12259 .send_param = start_discovery_le_param,
12260 .send_len = sizeof(start_discovery_le_param),
12261 .expect_status = MGMT_STATUS_SUCCESS,
12262 .expect_param = start_discovery_le_param,
12263 .expect_len = sizeof(start_discovery_le_param),
12264 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_ENABLE,
12265 .expect_hci_param = start_discovery_valid_ext_scan_enable,
12266 .expect_hci_len = sizeof(start_discovery_valid_ext_scan_enable),
12267 .expect_alt_ev = MGMT_EV_CONTROLLER_SUSPEND,
12268 .expect_alt_ev_param = suspend_state_param_disconnect,
12269 .expect_alt_ev_len = sizeof(suspend_state_param_disconnect),
12272 static void test_suspend_resume_success_8(const void *test_data)
12274 test_command_generic(test_data);
12275 tester_wait(1, trigger_force_suspend, NULL);
12278 static uint16_t settings_powered_le_discovery[] = { MGMT_OP_SET_LE,
12279 MGMT_OP_SET_POWERED,
12280 MGMT_OP_START_DISCOVERY,
12283 static const struct generic_data suspend_resume_success_9 = {
12284 .setup_settings = settings_powered_le_discovery,
12285 .setup_discovery_param = start_discovery_bredrle_param,
12286 .setup_expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_ENABLE,
12287 .setup_expect_hci_param = stop_discovery_valid_ext_scan_disable,
12288 .setup_expect_hci_len = sizeof(stop_discovery_valid_ext_scan_disable),
12289 .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_ENABLE,
12290 .expect_hci_param = start_discovery_valid_ext_scan_enable,
12291 .expect_hci_len = sizeof(start_discovery_valid_ext_scan_enable),
12292 .expect_alt_ev = MGMT_EV_CONTROLLER_RESUME,
12293 .expect_alt_ev_param = resume_state_param_non_bt_wake,
12294 .expect_alt_ev_len = sizeof(resume_state_param_non_bt_wake),
12297 static void trigger_force_suspend_9(void *user_data)
12299 trigger_force_suspend(user_data);
12302 static void setup_suspend_resume_success_9(const void *test_data)
12304 setup_command_generic(test_data);
12305 tester_wait(1, trigger_force_suspend_9, NULL);
12308 static void test_suspend_resume_success_9(const void *test_data)
12310 test_command_generic(test_data);
12311 tester_wait(2, trigger_force_resume, NULL);
12314 static const struct generic_data suspend_resume_success_10 = {
12315 .setup_settings = settings_powered_le,
12316 .expect_alt_ev = MGMT_EV_CONTROLLER_RESUME,
12317 .expect_alt_ev_param = resume_state_param_non_bt_wake,
12318 .expect_alt_ev_len = sizeof(resume_state_param_non_bt_wake),
12321 static void resume_event(uint16_t index, uint16_t length,
12322 const void *param, void *user_data)
12324 struct test_data *data = tester_get_data();
12325 const struct mgmt_ev_controller_resume *ev = param;
12327 mgmt_unregister(data->mgmt, data->mgmt_discov_ev_id);
12329 if (length != sizeof(*ev)) {
12330 tester_warn("Incorrect resume event length");
12331 tester_setup_failed();
12335 tester_print("New Controller Resume event received");
12336 test_condition_complete(data);
12337 tester_setup_complete();
12341 static void setup_suspend_resume_success_10(const void *test_data)
12343 struct test_data *data = tester_get_data();
12346 tester_print("Registering Controller Resume notification");
12347 id = mgmt_register(data->mgmt, MGMT_EV_CONTROLLER_RESUME,
12348 data->mgmt_index, resume_event, NULL, NULL);
12349 /* Reuse the variable */
12350 data->mgmt_discov_ev_id = id;
12351 test_add_condition(data);
12353 tester_wait(1, trigger_force_suspend, NULL);
12354 tester_wait(2, trigger_force_resume, NULL);
12357 static void test_suspend_resume_success_10(const void *test_data)
12359 test_command_generic(test_data);
12360 tester_wait(1, trigger_force_suspend, NULL);
12361 tester_wait(2, trigger_force_resume, NULL);
12364 int main(int argc, char *argv[])
12366 tester_init(&argc, &argv);
12368 test_bredrle("Controller setup",
12369 NULL, NULL, controller_setup);
12370 test_bredr("Controller setup (BR/EDR-only)",
12371 NULL, NULL, controller_setup);
12372 test_le("Controller setup (LE)",
12373 NULL, NULL, controller_setup);
12375 test_bredrle("Invalid command",
12376 &invalid_command_test,
12377 NULL, test_command_generic);
12379 test_bredrle("Read version - Success",
12380 &read_version_success_test,
12381 NULL, test_command_generic);
12382 test_bredrle("Read version - Invalid parameters",
12383 &read_version_invalid_param_test,
12384 NULL, test_command_generic);
12385 test_bredrle("Read version - Invalid index",
12386 &read_version_invalid_index_test,
12387 NULL, test_command_generic);
12388 test_bredrle("Read commands - Invalid parameters",
12389 &read_commands_invalid_param_test,
12390 NULL, test_command_generic);
12391 test_bredrle("Read commands - Invalid index",
12392 &read_commands_invalid_index_test,
12393 NULL, test_command_generic);
12394 test_bredrle("Read index list - Invalid parameters",
12395 &read_index_list_invalid_param_test,
12396 NULL, test_command_generic);
12397 test_bredrle("Read index list - Invalid index",
12398 &read_index_list_invalid_index_test,
12399 NULL, test_command_generic);
12400 test_bredrle("Read info - Invalid parameters",
12401 &read_info_invalid_param_test,
12402 NULL, test_command_generic);
12403 test_bredrle("Read info - Invalid index",
12404 &read_info_invalid_index_test,
12405 NULL, test_command_generic);
12406 test_bredrle("Read unconfigured index list - Invalid parameters",
12407 &read_unconf_index_list_invalid_param_test,
12408 NULL, test_command_generic);
12409 test_bredrle("Read unconfigured index list - Invalid index",
12410 &read_unconf_index_list_invalid_index_test,
12411 NULL, test_command_generic);
12412 test_bredrle("Read configuration info - Invalid parameters",
12413 &read_config_info_invalid_param_test,
12414 NULL, test_command_generic);
12415 test_bredrle("Read configuration info - Invalid index",
12416 &read_config_info_invalid_index_test,
12417 NULL, test_command_generic);
12418 test_bredrle("Read extended index list - Invalid parameters",
12419 &read_ext_index_list_invalid_param_test,
12420 NULL, test_command_generic);
12421 test_bredrle("Read extended index list - Invalid index",
12422 &read_ext_index_list_invalid_index_test,
12423 NULL, test_command_generic);
12425 test_bredrle("Set powered on - Success",
12426 &set_powered_on_success_test,
12427 NULL, test_command_generic);
12428 test_bredrle("Set powered on - Invalid parameters 1",
12429 &set_powered_on_invalid_param_test_1,
12430 NULL, test_command_generic);
12431 test_bredrle("Set powered on - Invalid parameters 2",
12432 &set_powered_on_invalid_param_test_2,
12433 NULL, test_command_generic);
12434 test_bredrle("Set powered on - Invalid parameters 3",
12435 &set_powered_on_invalid_param_test_3,
12436 NULL, test_command_generic);
12437 test_bredrle("Set powered on - Invalid index",
12438 &set_powered_on_invalid_index_test,
12439 NULL, test_command_generic);
12440 test_le("Set powered on - Privacy and Advertising",
12441 &set_powered_on_privacy_adv_test,
12442 NULL, test_command_generic);
12444 test_bredrle("Set powered off - Success",
12445 &set_powered_off_success_test,
12446 NULL, test_command_generic);
12447 test_bredrle("Set powered off - Class of Device",
12448 &set_powered_off_class_test,
12449 setup_class, test_command_generic);
12450 test_bredrle("Set powered off - Invalid parameters 1",
12451 &set_powered_off_invalid_param_test_1,
12452 NULL, test_command_generic);
12453 test_bredrle("Set powered off - Invalid parameters 2",
12454 &set_powered_off_invalid_param_test_2,
12455 NULL, test_command_generic);
12456 test_bredrle("Set powered off - Invalid parameters 3",
12457 &set_powered_off_invalid_param_test_3,
12458 NULL, test_command_generic);
12460 test_bredrle("Set connectable on - Success 1",
12461 &set_connectable_on_success_test_1,
12462 NULL, test_command_generic);
12463 test_bredrle("Set connectable on - Success 2",
12464 &set_connectable_on_success_test_2,
12465 NULL, test_command_generic);
12466 test_bredrle("Set connectable on - Invalid parameters 1",
12467 &set_connectable_on_invalid_param_test_1,
12468 NULL, test_command_generic);
12469 test_bredrle("Set connectable on - Invalid parameters 2",
12470 &set_connectable_on_invalid_param_test_2,
12471 NULL, test_command_generic);
12472 test_bredrle("Set connectable on - Invalid parameters 3",
12473 &set_connectable_on_invalid_param_test_3,
12474 NULL, test_command_generic);
12475 test_bredrle("Set connectable on - Invalid index",
12476 &set_connectable_on_invalid_index_test,
12477 NULL, test_command_generic);
12479 test_le("Set connectable on (LE) - Success 1",
12480 &set_connectable_on_le_test_1,
12481 NULL, test_command_generic);
12482 test_le("Set connectable on (LE) - Success 2",
12483 &set_connectable_on_le_test_2,
12484 NULL, test_command_generic);
12485 test_le("Set connectable on (LE) - Success 3",
12486 &set_connectable_on_le_test_3,
12487 NULL, test_command_generic);
12489 test_bredrle("Set connectable off - Success 1",
12490 &set_connectable_off_success_test_1,
12491 NULL, test_command_generic);
12492 test_bredrle("Set connectable off - Success 2",
12493 &set_connectable_off_success_test_2,
12494 NULL, test_command_generic);
12495 test_bredrle("Set connectable off - Success 3",
12496 &set_connectable_off_success_test_3,
12497 NULL, test_command_generic);
12498 test_bredrle("Set connectable off - Success 4",
12499 &set_connectable_off_success_test_4,
12500 setup_add_device, test_command_generic);
12502 test_le("Set connectable off (LE) - Success 1",
12503 &set_connectable_off_le_test_1,
12504 NULL, test_command_generic);
12505 test_le("Set connectable off (LE) - Success 2",
12506 &set_connectable_off_le_test_2,
12507 NULL, test_command_generic);
12508 test_le("Set connectable off (LE) - Success 3",
12509 &set_connectable_off_le_test_3,
12510 NULL, test_command_generic);
12511 test_le("Set connectable off (LE) - Success 4",
12512 &set_connectable_off_le_test_4,
12513 NULL, test_command_generic);
12515 test_bredrle("Set fast connectable on - Success 1",
12516 &set_fast_conn_on_success_test_1,
12517 NULL, test_command_generic);
12518 test_bredrle("Set fast connectable on - Success 2",
12519 &set_fast_conn_on_success_test_2,
12520 NULL, test_command_generic);
12521 test_bredrle("Set fast connectable on - Success 3",
12522 &set_fast_conn_on_success_test_3,
12523 NULL, test_command_generic);
12524 test_bredrle("Set fast connectable on - Invalid Params 1",
12525 &set_fast_conn_nval_param_test_1,
12526 NULL, test_command_generic);
12527 test_le("Set fast connectable on - Not Supported 1",
12528 &set_fast_conn_on_not_supported_test_1,
12529 NULL, test_command_generic);
12531 test_bredrle("Set bondable on - Success",
12532 &set_bondable_on_success_test,
12533 NULL, test_command_generic);
12534 test_bredrle("Set bondable on - Invalid parameters 1",
12535 &set_bondable_on_invalid_param_test_1,
12536 NULL, test_command_generic);
12537 test_bredrle("Set bondable on - Invalid parameters 2",
12538 &set_bondable_on_invalid_param_test_2,
12539 NULL, test_command_generic);
12540 test_bredrle("Set bondable on - Invalid parameters 3",
12541 &set_bondable_on_invalid_param_test_3,
12542 NULL, test_command_generic);
12543 test_bredrle("Set bondable on - Invalid index",
12544 &set_bondable_on_invalid_index_test,
12545 NULL, test_command_generic);
12547 test_bredrle("Set discoverable on - Invalid parameters 1",
12548 &set_discoverable_on_invalid_param_test_1,
12549 NULL, test_command_generic);
12550 test_bredrle("Set discoverable on - Invalid parameters 2",
12551 &set_discoverable_on_invalid_param_test_2,
12552 NULL, test_command_generic);
12553 test_bredrle("Set discoverable on - Invalid parameters 3",
12554 &set_discoverable_on_invalid_param_test_3,
12555 NULL, test_command_generic);
12556 test_bredrle("Set discoverable on - Invalid parameters 4",
12557 &set_discoverable_on_invalid_param_test_4,
12558 NULL, test_command_generic);
12559 test_bredrle("Set discoverable on - Not powered 1",
12560 &set_discoverable_on_not_powered_test_1,
12561 NULL, test_command_generic);
12562 test_bredrle("Set discoverable on - Not powered 2",
12563 &set_discoverable_on_not_powered_test_2,
12564 NULL, test_command_generic);
12565 test_bredrle("Set discoverable on - Rejected 1",
12566 &set_discoverable_on_rejected_test_1,
12567 NULL, test_command_generic);
12568 test_bredrle("Set discoverable on - Rejected 2",
12569 &set_discoverable_on_rejected_test_2,
12570 NULL, test_command_generic);
12571 test_bredrle("Set discoverable on - Rejected 3",
12572 &set_discoverable_on_rejected_test_3,
12573 NULL, test_command_generic);
12574 test_bredrle("Set discoverable on - Success 1",
12575 &set_discoverable_on_success_test_1,
12576 NULL, test_command_generic);
12577 test_bredrle("Set discoverable on - Success 2",
12578 &set_discoverable_on_success_test_2,
12579 NULL, test_command_generic);
12580 test_le("Set discoverable on (LE) - Success 1",
12581 &set_discov_on_le_success_1,
12582 NULL, test_command_generic);
12583 test_bredrle("Set discoverable off - Success 1",
12584 &set_discoverable_off_success_test_1,
12585 NULL, test_command_generic);
12586 test_bredrle("Set discoverable off - Success 2",
12587 &set_discoverable_off_success_test_2,
12588 NULL, test_command_generic);
12589 test_bredrle("Set limited discoverable on - Success 1",
12590 &set_limited_discov_on_success_1,
12591 NULL, test_command_generic);
12592 test_bredrle("Set limited discoverable on - Success 2",
12593 &set_limited_discov_on_success_2,
12594 NULL, test_command_generic);
12595 test_bredrle("Set limited discoverable on - Success 3",
12596 &set_limited_discov_on_success_3,
12597 NULL, test_command_generic);
12598 test_le("Set limited discoverable on (LE) - Success 1",
12599 &set_limited_discov_on_le_success_1,
12600 NULL, test_command_generic);
12602 test_bredrle("Set link security on - Success 1",
12603 &set_link_sec_on_success_test_1,
12604 NULL, test_command_generic);
12605 test_bredrle("Set link security on - Success 2",
12606 &set_link_sec_on_success_test_2,
12607 NULL, test_command_generic);
12608 test_bredrle("Set link security on - Success 3",
12609 &set_link_sec_on_success_test_3,
12610 NULL, test_command_generic);
12611 test_bredrle("Set link security on - Invalid parameters 1",
12612 &set_link_sec_on_invalid_param_test_1,
12613 NULL, test_command_generic);
12614 test_bredrle("Set link security on - Invalid parameters 2",
12615 &set_link_sec_on_invalid_param_test_2,
12616 NULL, test_command_generic);
12617 test_bredrle("Set link security on - Invalid parameters 3",
12618 &set_link_sec_on_invalid_param_test_3,
12619 NULL, test_command_generic);
12620 test_bredrle("Set link security on - Invalid index",
12621 &set_link_sec_on_invalid_index_test,
12622 NULL, test_command_generic);
12624 test_bredrle("Set link security off - Success 1",
12625 &set_link_sec_off_success_test_1,
12626 NULL, test_command_generic);
12627 test_bredrle("Set link security off - Success 2",
12628 &set_link_sec_off_success_test_2,
12629 NULL, test_command_generic);
12631 test_bredrle("Set SSP on - Success 1",
12632 &set_ssp_on_success_test_1,
12633 NULL, test_command_generic);
12634 test_bredrle("Set SSP on - Success 2",
12635 &set_ssp_on_success_test_2,
12636 NULL, test_command_generic);
12637 test_bredrle("Set SSP on - Success 3",
12638 &set_ssp_on_success_test_3,
12639 NULL, test_command_generic);
12640 test_bredrle("Set SSP on - Invalid parameters 1",
12641 &set_ssp_on_invalid_param_test_1,
12642 NULL, test_command_generic);
12643 test_bredrle("Set SSP on - Invalid parameters 2",
12644 &set_ssp_on_invalid_param_test_2,
12645 NULL, test_command_generic);
12646 test_bredrle("Set SSP on - Invalid parameters 3",
12647 &set_ssp_on_invalid_param_test_3,
12648 NULL, test_command_generic);
12649 test_bredrle("Set SSP on - Invalid index",
12650 &set_ssp_on_invalid_index_test,
12651 NULL, test_command_generic);
12653 test_bredrle("Set Secure Connections on - Success 1",
12654 &set_sc_on_success_test_1,
12655 NULL, test_command_generic);
12656 test_bredrle("Set Secure Connections on - Success 2",
12657 &set_sc_on_success_test_2,
12658 NULL, test_command_generic);
12659 test_bredrle("Set Secure Connections on - Invalid params 1",
12660 &set_sc_on_invalid_param_test_1,
12661 NULL, test_command_generic);
12662 test_bredrle("Set Secure Connections on - Invalid params 2",
12663 &set_sc_on_invalid_param_test_2,
12664 NULL, test_command_generic);
12665 test_bredrle("Set Secure Connections on - Invalid params 3",
12666 &set_sc_on_invalid_param_test_3,
12667 NULL, test_command_generic);
12668 test_bredrle("Set Secure Connections on - Invalid index",
12669 &set_sc_on_invalid_index_test,
12670 NULL, test_command_generic);
12671 test_bredr("Set Secure Connections on - Not supported 1",
12672 &set_sc_on_not_supported_test_1,
12673 NULL, test_command_generic);
12674 test_bredr("Set Secure Connections on - Not supported 2",
12675 &set_sc_on_not_supported_test_2,
12676 NULL, test_command_generic);
12678 test_bredrle("Set Secure Connections Only on - Success 1",
12679 &set_sc_only_on_success_test_1,
12680 NULL, test_command_generic);
12681 test_bredrle("Set Secure Connections Only on - Success 2",
12682 &set_sc_only_on_success_test_2,
12683 NULL, test_command_generic);
12685 test_hs("Set High Speed on - Success",
12686 &set_hs_on_success_test,
12687 NULL, test_command_generic);
12688 test_hs("Set High Speed on - Invalid parameters 1",
12689 &set_hs_on_invalid_param_test_1,
12690 NULL, test_command_generic);
12691 test_hs("Set High Speed on - Invalid parameters 2",
12692 &set_hs_on_invalid_param_test_2,
12693 NULL, test_command_generic);
12694 test_hs("Set High Speed on - Invalid parameters 3",
12695 &set_hs_on_invalid_param_test_3,
12696 NULL, test_command_generic);
12697 test_hs("Set High Speed on - Invalid index",
12698 &set_hs_on_invalid_index_test,
12699 NULL, test_command_generic);
12701 test_bredrle("Set Low Energy on - Success 1",
12702 &set_le_on_success_test_1,
12703 NULL, test_command_generic);
12704 test_bredrle("Set Low Energy on - Success 2",
12705 &set_le_on_success_test_2,
12706 NULL, test_command_generic);
12707 test_bredrle("Set Low Energy on - Success 3",
12708 &set_le_on_success_test_3,
12709 NULL, test_command_generic);
12710 test_bredrle("Set Low Energy on - Invalid parameters 1",
12711 &set_le_on_invalid_param_test_1,
12712 NULL, test_command_generic);
12713 test_bredrle("Set Low Energy on - Invalid parameters 2",
12714 &set_le_on_invalid_param_test_2,
12715 NULL, test_command_generic);
12716 test_bredrle("Set Low Energy on - Invalid parameters 3",
12717 &set_le_on_invalid_param_test_3,
12718 NULL, test_command_generic);
12719 test_bredrle("Set Low Energy on - Invalid index",
12720 &set_le_on_invalid_index_test,
12721 NULL, test_command_generic);
12723 test_bredrle("Set Advertising on - Success 1",
12724 &set_adv_on_success_test_1,
12725 NULL, test_command_generic);
12726 test_bredrle("Set Advertising on - Success 2",
12727 &set_adv_on_success_test_2,
12728 NULL, test_command_generic);
12729 test_bredrle("Set Advertising on - Rejected 1",
12730 &set_adv_on_rejected_test_1,
12731 NULL, test_command_generic);
12733 test_bredrle("Set Advertising on - Appearance 1",
12734 &set_adv_on_appearance_test_1,
12735 setup_command_generic, test_command_generic);
12737 test_bredrle("Set Advertising on - Local name 1",
12738 &set_adv_on_local_name_test_1,
12739 setup_command_generic, test_command_generic);
12741 test_bredrle("Set Advertising on - Name + Appear 1",
12742 &set_adv_on_local_name_appear_test_1,
12743 setup_command_generic, test_command_generic);
12745 test_bredrle("Set BR/EDR off - Success 1",
12746 &set_bredr_off_success_test_1,
12747 NULL, test_command_generic);
12748 test_bredrle("Set BR/EDR on - Success 1",
12749 &set_bredr_on_success_test_1,
12750 NULL, test_command_generic);
12751 test_bredrle("Set BR/EDR on - Success 2",
12752 &set_bredr_on_success_test_2,
12753 NULL, test_command_generic);
12754 test_bredr("Set BR/EDR off - Not Supported 1",
12755 &set_bredr_off_notsupp_test,
12756 NULL, test_command_generic);
12757 test_le("Set BR/EDR off - Not Supported 2",
12758 &set_bredr_off_notsupp_test,
12759 NULL, test_command_generic);
12760 test_bredrle("Set BR/EDR off - Rejected 1",
12761 &set_bredr_off_failure_test_1,
12762 NULL, test_command_generic);
12763 test_bredrle("Set BR/EDR off - Rejected 2",
12764 &set_bredr_off_failure_test_2,
12765 NULL, test_command_generic);
12766 test_bredrle("Set BR/EDR off - Invalid Parameters 1",
12767 &set_bredr_off_failure_test_3,
12768 NULL, test_command_generic);
12770 test_bredr("Set Local Name - Success 1",
12771 &set_local_name_test_1,
12772 NULL, test_command_generic);
12773 test_bredr("Set Local Name - Success 2",
12774 &set_local_name_test_2,
12775 NULL, test_command_generic);
12776 test_bredr("Set Local Name - Success 3",
12777 &set_local_name_test_3,
12778 NULL, test_command_generic);
12780 test_bredrle("Start Discovery - Not powered 1",
12781 &start_discovery_not_powered_test_1,
12782 NULL, test_command_generic);
12783 test_bredrle("Start Discovery - Invalid parameters 1",
12784 &start_discovery_invalid_param_test_1,
12785 NULL, test_command_generic);
12786 test_bredrle("Start Discovery - Not supported 1",
12787 &start_discovery_not_supported_test_1,
12788 NULL, test_command_generic);
12789 test_bredrle("Start Discovery - Success 1",
12790 &start_discovery_valid_param_test_1,
12791 NULL, test_command_generic);
12792 test_le("Start Discovery - Success 2",
12793 &start_discovery_valid_param_test_2,
12794 NULL, test_command_generic);
12795 test_bredrle("Start Discovery - Power Off 1",
12796 &start_discovery_valid_param_power_off_1,
12797 NULL, test_command_generic);
12799 test_bredrle("Stop Discovery - Success 1",
12800 &stop_discovery_success_test_1,
12801 setup_start_discovery, test_command_generic);
12802 test_bredr("Stop Discovery - BR/EDR (Inquiry) Success 1",
12803 &stop_discovery_bredr_success_test_1,
12804 setup_start_discovery, test_command_generic);
12805 test_bredrle("Stop Discovery - Rejected 1",
12806 &stop_discovery_rejected_test_1,
12807 NULL, test_command_generic);
12808 test_bredrle("Stop Discovery - Invalid parameters 1",
12809 &stop_discovery_invalid_param_test_1,
12810 setup_start_discovery, test_command_generic);
12812 test_bredrle("Start Service Discovery - Not powered 1",
12813 &start_service_discovery_not_powered_test_1,
12814 NULL, test_command_generic);
12815 test_bredrle("Start Service Discovery - Invalid parameters 1",
12816 &start_service_discovery_invalid_param_test_1,
12817 NULL, test_command_generic);
12818 test_bredrle("Start Service Discovery - Not supported 1",
12819 &start_service_discovery_not_supported_test_1,
12820 NULL, test_command_generic);
12821 test_bredrle("Start Service Discovery - Success 1",
12822 &start_service_discovery_valid_param_test_1,
12823 NULL, test_command_generic);
12824 test_le("Start Service Discovery - Success 2",
12825 &start_service_discovery_valid_param_test_2,
12826 NULL, test_command_generic);
12828 test_bredrle("Set Device Class - Success 1",
12829 &set_dev_class_valid_param_test_1,
12830 NULL, test_command_generic);
12831 test_bredrle("Set Device Class - Success 2",
12832 &set_dev_class_valid_param_test_2,
12833 NULL, test_command_generic);
12834 test_bredrle("Set Device Class - Invalid parameters 1",
12835 &set_dev_class_invalid_param_test_1,
12836 NULL, test_command_generic);
12838 test_bredrle("Add UUID - UUID-16 1",
12839 &add_uuid16_test_1,
12840 NULL, test_command_generic);
12841 test_bredrle("Add UUID - UUID-16 multiple 1",
12842 &add_multi_uuid16_test_1,
12843 setup_multi_uuid16, test_command_generic);
12844 test_bredrle("Add UUID - UUID-16 partial 1",
12845 &add_multi_uuid16_test_2,
12846 setup_multi_uuid16_2, test_command_generic);
12847 test_bredrle("Add UUID - UUID-32 1",
12848 &add_uuid32_test_1,
12849 NULL, test_command_generic);
12850 test_bredrle("Add UUID - UUID-32 multiple 1",
12851 &add_uuid32_multi_test_1,
12852 setup_multi_uuid32, test_command_generic);
12853 test_bredrle("Add UUID - UUID-32 partial 1",
12854 &add_uuid32_multi_test_2,
12855 setup_multi_uuid32_2, test_command_generic);
12856 test_bredrle("Add UUID - UUID-128 1",
12857 &add_uuid128_test_1,
12858 NULL, test_command_generic);
12859 test_bredrle("Add UUID - UUID-128 multiple 1",
12860 &add_uuid128_multi_test_1,
12861 setup_multi_uuid128, test_command_generic);
12862 test_bredrle("Add UUID - UUID-128 partial 1",
12863 &add_uuid128_multi_test_2,
12864 setup_multi_uuid128_2, test_command_generic);
12865 test_bredrle("Add UUID - UUID mix",
12866 &add_uuid_mix_test_1,
12867 setup_uuid_mix, test_command_generic);
12869 /* MGMT_OP_REMOVE_UUID
12870 * Remove existing UUID.
12872 test_bredrle("Remove UUID - Success 1",
12873 &remove_uuid_success_1,
12874 setup_multi_uuid16, test_command_generic);
12875 /* MGMT_OP_REMOVE_UUID
12876 * Remove all UUID by sending zero filled UUID
12878 test_bredrle("Remove UUID - All UUID - Success 2",
12879 &remove_uuid_all_success_2,
12880 setup_multi_uuid16, test_command_generic);
12881 /* MGMT_OP_REMOVE_UUID
12882 * Remove UUID while powering off
12883 * Expect the 0x000000 for the class of device
12885 test_bredrle("Remove UUID - Power Off - Success 3",
12886 &remove_uuid_power_off_success_3,
12887 setup_multi_uuid16_power_off,
12888 test_command_generic);
12889 /* MGMT_OP_REMOVE_UUID
12890 * Remove UUID while powering off and then powering on
12892 test_bredrle("Remove UUID - Power Off and On - Success 4",
12893 &remove_uuid_power_off_on_success_4,
12894 setup_multi_uuid16_power_off_remove,
12895 test_command_generic);
12896 /* MGMT_OP_REMOVE_UUID
12897 * Remove UUID doesn't exist - Invalid parameter
12899 test_bredrle("Remove UUID - Not Exist - Invalid Params 1",
12900 &remove_uuid_invalid_params_1,
12901 setup_multi_uuid16, test_command_generic);
12903 test_bredrle("Load Link Keys - Empty List Success 1",
12904 &load_link_keys_success_test_1,
12905 NULL, test_command_generic);
12906 test_bredrle("Load Link Keys - Empty List Success 2",
12907 &load_link_keys_success_test_2,
12908 NULL, test_command_generic);
12909 test_bredrle("Load Link Keys - Invalid Parameters 1",
12910 &load_link_keys_invalid_params_test_1,
12911 NULL, test_command_generic);
12912 test_bredrle("Load Link Keys - Invalid Parameters 2",
12913 &load_link_keys_invalid_params_test_2,
12914 NULL, test_command_generic);
12915 test_bredrle("Load Link Keys - Invalid Parameters 3",
12916 &load_link_keys_invalid_params_test_3,
12917 NULL, test_command_generic);
12919 test_bredrle("Load Long Term Keys - Success 1",
12920 &load_ltks_success_test_1,
12921 NULL, test_command_generic);
12922 test_bredrle("Load Long Term Keys - Success 2",
12923 &load_ltks_success_test_2,
12924 NULL, test_command_generic);
12925 test_bredrle("Load Long Term Keys - Success 3 (20 with count 1)",
12926 &load_ltks_success_test_3,
12927 setup_load_ltks_20_by_1, test_command_generic);
12928 test_bredrle("Load Long Term Keys - Success 4 (20 with count 20)",
12929 &load_ltks_success_test_4,
12930 NULL, test_command_generic);
12931 test_bredrle("Load Long Term Keys - Success 5 (Power On and 20 keys)",
12932 &load_ltks_success_test_5,
12933 NULL, test_command_generic);
12934 test_bredrle("Load Long Term Keys - Invalid Parameters 1",
12935 &load_ltks_invalid_params_test_1,
12936 NULL, test_command_generic);
12937 test_bredrle("Load Long Term Keys - Invalid Parameters 2",
12938 &load_ltks_invalid_params_test_2,
12939 NULL, test_command_generic);
12940 test_bredrle("Load Long Term Keys - Invalid Parameters 3",
12941 &load_ltks_invalid_params_test_3,
12942 NULL, test_command_generic);
12943 test_bredrle("Load Long Term Keys - Invalid Parameters 4",
12944 &load_ltks_invalid_params_test_4,
12945 NULL, test_command_generic);
12947 test_bredrle("Set IO Capability - Invalid Params 1",
12948 &set_io_cap_invalid_param_test_1,
12949 NULL, test_command_generic);
12951 test_bredrle("Pair Device - Not Powered 1",
12952 &pair_device_not_powered_test_1,
12953 NULL, test_command_generic);
12954 test_bredrle("Pair Device - Power off 1",
12955 &pair_device_power_off_test_1,
12956 NULL, test_command_generic);
12957 test_le("Pair Device - Incorrect transport reject 1",
12958 &pair_device_not_supported_test_1,
12959 NULL, test_command_generic);
12960 test_bredr("Pair Device - Incorrect transport reject 2",
12961 &pair_device_not_supported_test_2,
12962 NULL, test_command_generic);
12963 test_bredrle("Pair Device - Reject on not enabled transport 1",
12964 &pair_device_reject_transport_not_enabled_1,
12965 NULL, test_command_generic);
12966 test_bredrle("Pair Device - Reject on not enabled transport 2",
12967 &pair_device_reject_transport_not_enabled_2,
12968 NULL, test_command_generic);
12969 test_bredrle("Pair Device - Invalid Parameters 1",
12970 &pair_device_invalid_param_test_1,
12971 NULL, test_command_generic);
12972 test_bredrle("Pair Device - Invalid Parameters 2",
12973 &pair_device_invalid_param_test_2,
12974 NULL, test_command_generic);
12975 test_bredrle("Pair Device - Legacy Success 1",
12976 &pair_device_success_test_1,
12977 NULL, test_command_generic);
12978 test_bredrle("Pair Device - Legacy Non-bondable 1",
12979 &pair_device_legacy_nonbondable_1,
12980 NULL, test_command_generic);
12981 test_bredrle("Pair Device - Sec Mode 3 Success 1",
12982 &pair_device_success_test_2,
12983 NULL, test_command_generic);
12984 test_bredrle("Pair Device - Legacy Reject 1",
12985 &pair_device_reject_test_1,
12986 NULL, test_command_generic);
12987 test_bredrle("Pair Device - Legacy Reject 2",
12988 &pair_device_reject_test_2,
12989 NULL, test_command_generic);
12990 test_bredrle("Pair Device - Sec Mode 3 Reject 1",
12991 &pair_device_reject_test_3,
12992 NULL, test_command_generic);
12993 test_bredrle("Pair Device - Sec Mode 3 Reject 2",
12994 &pair_device_reject_test_4,
12995 NULL, test_command_generic);
12996 test_bredrle("Pair Device - SSP Just-Works Success 1",
12997 &pair_device_ssp_test_1,
12998 NULL, test_command_generic);
12999 test_bredrle("Pair Device - SSP Just-Works Success 2",
13000 &pair_device_ssp_test_2,
13001 NULL, test_command_generic);
13002 test_bredrle("Pair Device - SSP Just-Works Success 3",
13003 &pair_device_ssp_test_3,
13004 NULL, test_command_generic);
13005 test_bredrle("Pair Device - SSP Confirm Success 1",
13006 &pair_device_ssp_test_4,
13007 NULL, test_command_generic);
13008 test_bredrle("Pair Device - SSP Confirm Success 2",
13009 &pair_device_ssp_test_5,
13010 NULL, test_command_generic);
13011 test_bredrle("Pair Device - SSP Confirm Success 3",
13012 &pair_device_ssp_test_6,
13013 NULL, test_command_generic);
13014 test_bredrle("Pair Device - SSP Confirm Reject 1",
13015 &pair_device_ssp_reject_1,
13016 NULL, test_command_generic);
13017 test_bredrle("Pair Device - SSP Confirm Reject 2",
13018 &pair_device_ssp_reject_2,
13019 NULL, test_command_generic);
13020 test_bredrle("Pair Device - SSP Non-bondable 1",
13021 &pair_device_ssp_nonbondable_1,
13022 NULL, test_command_generic);
13023 test_bredrle("Pair Device - SMP over BR/EDR Success 1",
13024 &pair_device_smp_bredr_test_1,
13025 NULL, test_command_generic);
13026 test_bredrle("Pair Device - SMP over BR/EDR Success 2",
13027 &pair_device_smp_bredr_test_2,
13028 NULL, test_command_generic);
13029 test_le("Pair Device - LE Success 1",
13030 &pair_device_le_success_test_1,
13031 NULL, test_command_generic);
13032 test_le("Pair Device - LE Success 2",
13033 &pair_device_le_success_test_2,
13034 NULL, test_command_generic);
13035 test_le("Pair Device - LE Reject 1",
13036 &pair_device_le_reject_test_1,
13037 NULL, test_command_generic);
13038 test_le("Pair Device - LE SC Legacy 1",
13039 &pair_device_le_sc_legacy_test_1,
13040 NULL, test_command_generic);
13041 test_le("Pair Device - LE SC Success 1",
13042 &pair_device_le_sc_success_test_1,
13043 NULL, test_command_generic);
13044 test_le("Pair Device - LE SC Success 2",
13045 &pair_device_le_sc_success_test_2,
13046 NULL, test_command_generic);
13047 test_bredrle("Pair Device - LE SC Success 3",
13048 &pair_device_le_sc_success_test_3,
13049 NULL, test_command_generic);
13051 test_bredrle("Pairing Acceptor - Legacy 1",
13052 &pairing_acceptor_legacy_1, NULL,
13053 test_pairing_acceptor);
13054 test_bredrle("Pairing Acceptor - Legacy 2",
13055 &pairing_acceptor_legacy_2, NULL,
13056 test_pairing_acceptor);
13057 test_bredrle("Pairing Acceptor - Legacy 3",
13058 &pairing_acceptor_legacy_3, NULL,
13059 test_pairing_acceptor);
13060 test_bredrle("Pairing Acceptor - Link Sec 1",
13061 &pairing_acceptor_linksec_1, NULL,
13062 test_pairing_acceptor);
13063 test_bredrle("Pairing Acceptor - Link Sec 2",
13064 &pairing_acceptor_linksec_2, NULL,
13065 test_pairing_acceptor);
13066 test_bredrle("Pairing Acceptor - SSP 1",
13067 &pairing_acceptor_ssp_1, setup_pairing_acceptor,
13068 test_pairing_acceptor);
13069 test_bredrle("Pairing Acceptor - SSP 2",
13070 &pairing_acceptor_ssp_2, setup_pairing_acceptor,
13071 test_pairing_acceptor);
13072 test_bredrle("Pairing Acceptor - SSP 3",
13073 &pairing_acceptor_ssp_3, setup_pairing_acceptor,
13074 test_pairing_acceptor);
13075 test_bredrle("Pairing Acceptor - SSP 4",
13076 &pairing_acceptor_ssp_4, setup_pairing_acceptor,
13077 test_pairing_acceptor);
13078 test_bredrle("Pairing Acceptor - SMP over BR/EDR 1",
13079 &pairing_acceptor_smp_bredr_1,
13080 setup_pairing_acceptor, test_pairing_acceptor);
13081 test_bredrle("Pairing Acceptor - SMP over BR/EDR 2",
13082 &pairing_acceptor_smp_bredr_2,
13083 setup_pairing_acceptor, test_pairing_acceptor);
13084 test_le("Pairing Acceptor - LE 1",
13085 &pairing_acceptor_le_1, setup_pairing_acceptor,
13086 test_pairing_acceptor);
13087 test_le("Pairing Acceptor - LE 2",
13088 &pairing_acceptor_le_2, setup_pairing_acceptor,
13089 test_pairing_acceptor);
13090 test_le("Pairing Acceptor - LE 3",
13091 &pairing_acceptor_le_3, setup_pairing_acceptor,
13092 test_pairing_acceptor);
13093 test_le("Pairing Acceptor - LE 4",
13094 &pairing_acceptor_le_4, setup_pairing_acceptor,
13095 test_pairing_acceptor);
13096 test_le("Pairing Acceptor - LE 5",
13097 &pairing_acceptor_le_5, setup_pairing_acceptor,
13098 test_pairing_acceptor);
13100 test_bredrle("Unpair Device - Not Powered 1",
13101 &unpair_device_not_powered_test_1,
13102 NULL, test_command_generic);
13103 test_bredrle("Unpair Device - Invalid Parameters 1",
13104 &unpair_device_invalid_param_test_1,
13105 NULL, test_command_generic);
13106 test_bredrle("Unpair Device - Invalid Parameters 2",
13107 &unpair_device_invalid_param_test_2,
13108 NULL, test_command_generic);
13110 test_bredrle("Disconnect - Invalid Parameters 1",
13111 &disconnect_invalid_param_test_1,
13112 NULL, test_command_generic);
13114 test_bredrle("Block Device - Invalid Parameters 1",
13115 &block_device_invalid_param_test_1,
13116 NULL, test_command_generic);
13118 test_bredrle("Unblock Device - Invalid Parameters 1",
13119 &unblock_device_invalid_param_test_1,
13120 NULL, test_command_generic);
13122 test_le("Set Static Address - Success 1",
13123 &set_static_addr_success_test,
13124 NULL, test_command_generic);
13125 test_bredrle("Set Static Address - Success 2",
13126 &set_static_addr_success_test_2,
13127 NULL, test_command_generic);
13128 test_bredrle("Set Static Address - Failure 1",
13129 &set_static_addr_failure_test,
13130 NULL, test_command_generic);
13131 test_bredr("Set Static Address - Failure 2",
13132 &set_static_addr_failure_test_2,
13133 NULL, test_command_generic);
13135 test_bredrle("Set Scan Parameters - Success",
13136 &set_scan_params_success_test,
13137 NULL, test_command_generic);
13139 test_bredrle("Load IRKs - Success 1",
13140 &load_irks_success1_test,
13141 NULL, test_command_generic);
13142 test_bredrle("Load IRKs - Success 2",
13143 &load_irks_success2_test,
13144 NULL, test_command_generic);
13145 test_bredrle("Load IRKs - Invalid Parameters 1",
13146 &load_irks_nval_param1_test,
13147 NULL, test_command_generic);
13148 test_bredrle("Load IRKs - Invalid Parameters 2",
13149 &load_irks_nval_param2_test,
13150 NULL, test_command_generic);
13151 test_bredrle("Load IRKs - Invalid Parameters 3",
13152 &load_irks_nval_param3_test,
13153 NULL, test_command_generic);
13154 test_bredr("Load IRKs - Not Supported",
13155 &load_irks_not_supported_test,
13156 NULL, test_command_generic);
13158 test_bredrle("Set Privacy - Success 1",
13159 &set_privacy_success_1_test,
13160 NULL, test_command_generic);
13161 test_bredrle("Set Privacy - Success 2 (Device Mode)",
13162 &set_privacy_success_2_test,
13163 NULL, test_command_generic);
13164 test_bredrle("Set Privacy - Rejected",
13165 &set_privacy_powered_test,
13166 NULL, test_command_generic);
13167 test_bredrle("Set Privacy - Invalid Parameters",
13168 &set_privacy_nval_param_test,
13169 NULL, test_command_generic);
13171 test_bredrle("Get Clock Info - Success",
13172 &get_clock_info_succes1_test, NULL,
13173 test_command_generic_connect);
13174 test_bredrle("Get Clock Info - Fail (Power Off)",
13175 &get_clock_info_fail1_test, NULL,
13176 test_command_generic);
13178 test_bredrle("Get Conn Info - Success",
13179 &get_conn_info_succes1_test, NULL,
13180 test_command_generic_connect);
13181 test_bredrle("Get Conn Info - Not Connected",
13182 &get_conn_info_ncon_test, NULL,
13183 test_command_generic);
13184 test_bredrle("Get Conn Info - Power off",
13185 &get_conn_info_power_off_test, NULL,
13186 test_command_generic_connect);
13188 test_bredrle("Load Connection Parameters - Invalid Params 1",
13189 &load_conn_params_fail_1,
13190 NULL, test_command_generic);
13192 test_bredrle("Add Device - Invalid Params 1",
13193 &add_device_fail_1,
13194 NULL, test_command_generic);
13195 test_bredrle("Add Device - Invalid Params 2",
13196 &add_device_fail_2,
13197 NULL, test_command_generic);
13198 test_bredrle("Add Device - Invalid Params 3",
13199 &add_device_fail_3,
13200 NULL, test_command_generic);
13201 test_bredrle("Add Device - Invalid Params 4",
13202 &add_device_fail_4,
13203 NULL, test_command_generic);
13204 test_bredrle("Add Device - Success 1",
13205 &add_device_success_1,
13206 NULL, test_command_generic);
13207 test_bredrle("Add Device - Success 2",
13208 &add_device_success_2,
13209 NULL, test_command_generic);
13210 test_bredrle("Add Device - Success 3",
13211 &add_device_success_3,
13212 NULL, test_command_generic);
13213 test_bredrle("Add Device - Success 4",
13214 &add_device_success_4,
13215 NULL, test_command_generic);
13216 test_bredrle("Add Device - Success 5",
13217 &add_device_success_5,
13218 NULL, test_command_generic);
13220 test_bredrle("Remove Device - Invalid Params 1",
13221 &remove_device_fail_1,
13222 NULL, test_command_generic);
13223 test_bredrle("Remove Device - Invalid Params 2",
13224 &remove_device_fail_2,
13225 NULL, test_command_generic);
13226 test_bredrle("Remove Device - Invalid Params 3",
13227 &remove_device_fail_3,
13228 NULL, test_command_generic);
13229 test_bredrle("Remove Device - Success 1",
13230 &remove_device_success_1,
13231 setup_add_device, test_command_generic);
13232 test_bredrle("Remove Device - Success 2",
13233 &remove_device_success_2,
13234 setup_add_device, test_command_generic);
13235 test_bredrle("Remove Device - Success 3",
13236 &remove_device_success_3,
13237 setup_add_device, test_remove_device);
13238 test_le("Remove Device - Success 4",
13239 &remove_device_success_4,
13240 setup_add_device, test_remove_device);
13241 test_le("Remove Device - Success 5",
13242 &remove_device_success_5,
13243 setup_add_device, test_remove_device);
13244 /* MGMT_OP_REMOVE_DEVICE
13245 * Remove all devices
13247 test_bredrle50("Remove Device - Success 6 - All Devices",
13248 &remove_device_success_6,
13249 setup_add_device, test_remove_device);
13251 test_bredrle("Read Advertising Features - Invalid parameters",
13252 &read_adv_features_invalid_param_test,
13253 NULL, test_command_generic);
13254 test_bredrle("Read Advertising Features - Invalid index",
13255 &read_adv_features_invalid_index_test,
13256 NULL, test_command_generic);
13257 test_bredrle("Read Advertising Features - Success 1 (No instance)",
13258 &read_adv_features_success_1,
13259 NULL, test_command_generic);
13260 test_bredrle("Read Advertising Features - Success 2 (One instance)",
13261 &read_adv_features_success_2,
13262 setup_add_advertising,
13263 test_command_generic);
13265 test_bredrle("Add Advertising - Failure: LE off",
13266 &add_advertising_fail_1,
13267 NULL, test_command_generic);
13268 test_bredrle("Add Advertising - Invalid Params 1 (AD too long)",
13269 &add_advertising_fail_2,
13270 NULL, test_command_generic);
13271 test_bredrle("Add Advertising - Invalid Params 2 (Malformed len)",
13272 &add_advertising_fail_3,
13273 NULL, test_command_generic);
13274 test_bredrle("Add Advertising - Invalid Params 3 (Malformed len)",
13275 &add_advertising_fail_4,
13276 NULL, test_command_generic);
13277 test_bredrle("Add Advertising - Invalid Params 4 (Malformed len)",
13278 &add_advertising_fail_5,
13279 NULL, test_command_generic);
13280 test_le("Add Advertising - Invalid Params 5 (AD too long)",
13281 &add_advertising_fail_6,
13282 NULL, test_command_generic);
13283 test_bredrle("Add Advertising - Invalid Params 6 (ScRsp too long)",
13284 &add_advertising_fail_7,
13285 NULL, test_command_generic);
13286 test_bredrle("Add Advertising - Invalid Params 7 (Malformed len)",
13287 &add_advertising_fail_8,
13288 NULL, test_command_generic);
13289 test_bredrle("Add Advertising - Invalid Params 8 (Malformed len)",
13290 &add_advertising_fail_9,
13291 NULL, test_command_generic);
13292 test_bredrle("Add Advertising - Invalid Params 9 (Malformed len)",
13293 &add_advertising_fail_10,
13294 NULL, test_command_generic);
13295 test_le("Add Advertising - Invalid Params 10 (ScRsp too long)",
13296 &add_advertising_fail_11,
13297 NULL, test_command_generic);
13298 test_bredrle("Add Advertising - Rejected (Timeout, !Powered)",
13299 &add_advertising_fail_12,
13300 NULL, test_command_generic);
13301 test_bredrle("Add Advertising - Success 1 (Powered, Add Adv Inst)",
13302 &add_advertising_success_1,
13303 NULL, test_command_generic);
13304 test_bredrle("Add Advertising - Success 2 (!Powered, Add Adv Inst)",
13305 &add_advertising_success_pwron_data,
13306 setup_add_advertising_not_powered,
13307 test_command_generic);
13308 test_bredrle("Add Advertising - Success 3 (!Powered, Adv Enable)",
13309 &add_advertising_success_pwron_enabled,
13310 setup_add_advertising_not_powered,
13311 test_command_generic);
13312 test_bredrle("Add Advertising - Success 4 (Set Adv on override)",
13313 &add_advertising_success_4,
13314 setup_add_advertising,
13315 test_command_generic);
13316 test_bredrle("Add Advertising - Success 5 (Set Adv off override)",
13317 &add_advertising_success_5,
13318 setup_set_and_add_advertising,
13319 test_command_generic);
13320 test_bredrle("Add Advertising - Success 6 (Scan Rsp Dta, Adv ok)",
13321 &add_advertising_success_6,
13322 NULL, test_command_generic);
13323 test_bredrle("Add Advertising - Success 7 (Scan Rsp Dta, Scan ok) ",
13324 &add_advertising_success_7,
13325 NULL, test_command_generic);
13326 test_bredrle("Add Advertising - Success 8 (Connectable Flag)",
13327 &add_advertising_success_8,
13328 NULL, test_command_generic);
13329 test_bredrle("Add Advertising - Success 9 (General Discov Flag)",
13330 &add_advertising_success_9,
13331 NULL, test_command_generic);
13332 test_bredrle("Add Advertising - Success 10 (Limited Discov Flag)",
13333 &add_advertising_success_10,
13334 NULL, test_command_generic);
13335 test_bredrle("Add Advertising - Success 11 (Managed Flags)",
13336 &add_advertising_success_11,
13337 NULL, test_command_generic);
13338 test_bredrle("Add Advertising - Success 12 (TX Power Flag)",
13339 &add_advertising_success_12,
13340 NULL, test_command_generic);
13341 test_bredrle("Add Advertising - Success 13 (ADV_SCAN_IND)",
13342 &add_advertising_success_13,
13343 NULL, test_command_generic);
13344 test_bredrle("Add Advertising - Success 14 (ADV_NONCONN_IND)",
13345 &add_advertising_success_14,
13346 NULL, test_command_generic);
13347 test_bredrle("Add Advertising - Success 15 (ADV_IND)",
13348 &add_advertising_success_15,
13349 NULL, test_command_generic);
13350 test_bredrle("Add Advertising - Success 16 (Connectable -> on)",
13351 &add_advertising_success_16,
13352 setup_add_advertising,
13353 test_command_generic);
13354 test_bredrle("Add Advertising - Success 17 (Connectable -> off)",
13355 &add_advertising_success_17,
13356 setup_add_advertising_connectable,
13357 test_command_generic);
13358 /* Adv instances with a timeout do NOT survive a power cycle. */
13359 test_bredrle("Add Advertising - Success 18 (Power -> off, Remove)",
13360 &add_advertising_power_off,
13361 setup_add_advertising_timeout,
13362 test_command_generic);
13363 /* Adv instances without timeout survive a power cycle. */
13364 test_bredrle("Add Advertising - Success 19 (Power -> off, Keep)",
13365 &add_advertising_success_pwron_data,
13366 setup_add_advertising_power_cycle,
13367 test_command_generic);
13368 /* Changing an advertising instance while it is still being
13369 * advertised will immediately update the advertised data if
13370 * there is no other instance to switch to.
13372 test_bredrle("Add Advertising - Success 20 (Add Adv override)",
13373 &add_advertising_success_18,
13374 setup_add_advertising,
13375 test_command_generic);
13376 /* An instance should be removed when its timeout has been reached.
13377 * Advertising will also be disabled if this was the last instance.
13379 test_bredrle_full("Add Advertising - Success 21 (Timeout expires)",
13380 &add_advertising_timeout_expired,
13381 setup_add_advertising_timeout,
13382 test_command_generic, 3);
13383 /* LE off will clear (remove) all instances. */
13384 test_bredrle("Add Advertising - Success 22 (LE -> off, Remove)",
13385 &add_advertising_le_off,
13386 setup_add_advertising,
13387 test_command_generic);
13389 test_bredrle("Add Advertising - Success (Empty ScRsp)",
13390 &add_advertising_empty_scrsp,
13391 setup_command_generic,
13392 test_command_generic);
13394 test_bredrle("Add Advertising - Success (ScRsp only)",
13395 &add_advertising_scrsp_data_only_ok,
13396 NULL, test_command_generic);
13398 test_bredrle("Add Advertising - Invalid Params (ScRsp too long)",
13399 &add_advertising_scrsp_data_only_too_long,
13400 NULL, test_command_generic);
13402 test_bredrle("Add Advertising - Success (ScRsp appear)",
13403 &add_advertising_scrsp_appear_data_ok,
13404 setup_command_generic, test_command_generic);
13406 test_bredrle("Add Advertising - Invalid Params (ScRsp appear long)",
13407 &add_advertising_scrsp_appear_data_too_long,
13408 setup_command_generic, test_command_generic);
13410 test_bredrle("Add Advertising - Success (Appear is null)",
13411 &add_advertising_scrsp_appear_null,
13412 NULL, test_command_generic);
13414 test_bredrle("Add Advertising - Success (Name is null)",
13415 &add_advertising_no_name_set,
13416 NULL, test_command_generic);
13418 test_bredrle("Add Advertising - Success (Complete name)",
13419 &add_advertising_name_fits_in_scrsp,
13420 setup_command_generic,
13421 test_command_generic);
13423 test_bredrle("Add Advertising - Success (Shortened name)",
13424 &add_advertising_shortened_name_in_scrsp,
13425 setup_command_generic,
13426 test_command_generic);
13428 test_bredrle("Add Advertising - Success (Short name)",
13429 &add_advertising_short_name_in_scrsp,
13430 setup_command_generic,
13431 test_command_generic);
13433 test_bredrle("Add Advertising - Success (Name + data)",
13434 &add_advertising_name_data_ok,
13435 setup_command_generic,
13436 test_command_generic);
13438 test_bredrle("Add Advertising - Invalid Params (Name + data)",
13439 &add_advertising_name_data_inv,
13440 setup_command_generic,
13441 test_command_generic);
13443 test_bredrle("Add Advertising - Success (Name+data+appear)",
13444 &add_advertising_name_data_appear,
13445 setup_command_generic,
13446 test_command_generic);
13448 test_le_full("Adv. connectable & connected (peripheral) - Success",
13449 &conn_peripheral_adv_connectable_test,
13450 setup_advertise_while_connected,
13451 test_connected_and_advertising, 10);
13453 test_le_full("Adv. non-connectable & connected (peripheral) - Success",
13454 &conn_peripheral_adv_non_connectable_test,
13455 setup_advertise_while_connected,
13456 test_connected_and_advertising, 10);
13458 test_le_full("Adv. connectable & connected (central) - Success",
13459 &conn_central_adv_connectable_test,
13460 setup_advertise_while_connected,
13461 test_connected_and_advertising, 10);
13463 test_le_full("Adv. non-connectable & connected (central) - Success",
13464 &conn_central_adv_non_connectable_test,
13465 setup_advertise_while_connected,
13466 test_connected_and_advertising, 10);
13468 test_bredrle("Remove Advertising - Invalid Params 1",
13469 &remove_advertising_fail_1,
13470 NULL, test_command_generic);
13472 test_bredrle("Remove Advertising - Success 1",
13473 &remove_advertising_success_1,
13474 setup_add_advertising,
13475 test_command_generic);
13476 test_bredrle("Remove Advertising - Success 2",
13477 &remove_advertising_success_2,
13478 setup_add_advertising,
13479 test_command_generic);
13481 /* When advertising two instances, the instances should be
13482 * advertised in a round-robin fashion.
13484 test_bredrle("Multi Advertising - Success 1 (Instance Switch)",
13485 &multi_advertising_switch,
13487 test_command_generic);
13488 /* Adding a new instance when one is already being advertised
13489 * will switch to the new instance after the first has reached
13490 * its duration. A long timeout has been set to
13492 test_bredrle_full("Multi Advertising - Success 2 (Add Second Inst)",
13493 &multi_advertising_add_second,
13494 setup_add_advertising_duration,
13495 test_command_generic, 3);
13497 test_bredr("Set appearance - BR/EDR only",
13498 &set_appearance_not_supported,
13500 test_command_generic);
13502 test_bredrle("Set appearance - BR/EDR LE",
13503 &set_appearance_success,
13505 test_command_generic);
13507 test_le("Set appearance - LE only",
13508 &set_appearance_success,
13510 test_command_generic);
13512 test_bredrle("Read Ext Controller Info 1",
13513 &read_ext_ctrl_info1,
13514 NULL, test_command_generic);
13516 test_bredrle("Read Ext Controller Info 2",
13517 &read_ext_ctrl_info2,
13518 setup_command_generic, test_command_generic);
13520 test_bredrle("Read Ext Controller Info 3",
13521 &read_ext_ctrl_info3,
13522 setup_command_generic, test_command_generic);
13524 test_bredrle("Read Ext Controller Info 4",
13525 &read_ext_ctrl_info4,
13526 setup_command_generic, test_command_generic);
13528 test_bredrle("Read Ext Controller Info 5",
13529 &read_ext_ctrl_info5,
13530 setup_command_generic, test_command_generic);
13532 test_bredrle("Read Local OOB Data - Not powered",
13533 &read_local_oob_not_powered_test,
13534 NULL, test_command_generic);
13535 test_bredrle("Read Local OOB Data - Invalid parameters",
13536 &read_local_oob_invalid_param_test,
13537 NULL, test_command_generic);
13538 test_bredrle("Read Local OOB Data - Invalid index",
13539 &read_local_oob_invalid_index_test,
13540 NULL, test_command_generic);
13541 test_bredr20("Read Local OOB Data - Legacy pairing",
13542 &read_local_oob_legacy_pairing_test,
13543 NULL, test_command_generic);
13544 test_bredrle("Read Local OOB Data - Success SSP",
13545 &read_local_oob_success_ssp_test,
13546 NULL, test_command_generic);
13547 test_bredrle("Read Local OOB Data - Success SC",
13548 &read_local_oob_success_sc_test,
13549 NULL, test_command_generic);
13550 test_bredrle("Read Local OOB Ext Data - Invalid index",
13551 &read_local_oob_ext_invalid_index_test,
13552 NULL, test_command_generic);
13553 test_bredr20("Read Local OOB Ext Data - Legacy pairing",
13554 &read_local_oob_ext_legacy_pairing_test,
13555 NULL, test_command_generic);
13556 test_bredrle("Read Local OOB Ext Data - Success SSP",
13557 &read_local_oob_ext_success_ssp_test,
13558 NULL, test_command_generic);
13559 test_bredrle("Read Local OOB Ext Data - Success SC",
13560 &read_local_oob_ext_success_sc_test,
13561 NULL, test_command_generic);
13563 test_bredrle("Device Found - Advertising data - Zero padded",
13564 &device_found_gtag,
13565 NULL, test_device_found);
13566 test_bredrle("Device Found - Advertising data - Invalid field",
13567 &device_found_invalid_field,
13568 NULL, test_device_found);
13570 test_bredrle50("Read Ext Advertising Features - Success 3 (PHY flags)",
13571 &read_adv_features_success_3,
13572 NULL, test_command_generic);
13574 test_bredrle50("Add Ext Advertising - Invalid Params 1 (Multiple Phys)",
13575 &add_ext_advertising_fail_1,
13576 NULL, test_command_generic);
13578 test_bredrle50("Add Ext Advertising - Invalid Params 2 (Multiple PHYs)",
13579 &add_ext_advertising_fail_2,
13580 NULL, test_command_generic);
13582 test_bredrle50("Add Ext Advertising - Invalid Params 3 (Multiple PHYs)",
13583 &add_ext_advertising_fail_3,
13584 NULL, test_command_generic);
13586 test_bredrle50("Add Ext Advertising - Invalid Params 4 (Multiple PHYs)",
13587 &add_ext_advertising_fail_4,
13588 NULL, test_command_generic);
13590 test_bredrle50("Add Ext Advertising - Success 1 (Powered, Add Adv Inst)",
13591 &add_ext_advertising_success_1,
13592 NULL, test_command_generic);
13595 test_bredrle50("Add Ext Advertising - Success 2 (!Powered, Add Adv Inst)",
13596 &add_ext_advertising_success_pwron_data,
13597 setup_add_advertising_not_powered,
13598 test_command_generic);
13600 test_bredrle50("Add Ext Advertising - Success 3 (!Powered, Adv Enable)",
13601 &add_ext_advertising_success_pwron_enabled,
13602 setup_add_advertising_not_powered,
13603 test_command_generic);
13605 test_bredrle50("Add Ext Advertising - Success 4 (Set Adv on override)",
13606 &add_ext_advertising_success_4,
13607 setup_add_advertising,
13608 test_command_generic);
13610 test_bredrle50("Add Ext Advertising - Success 5 (Set Adv off override)",
13611 &add_ext_advertising_success_5,
13612 setup_set_and_add_advertising,
13613 test_command_generic);
13615 test_bredrle50("Add Ext Advertising - Success 6 (Scan Rsp Dta, Adv ok)",
13616 &add_ext_advertising_success_6,
13617 NULL, test_command_generic);
13619 test_bredrle50("Add Ext Advertising - Success 7 (Scan Rsp Dta, Scan ok) ",
13620 &add_ext_advertising_success_7,
13621 NULL, test_command_generic);
13622 test_bredrle50("Add Ext Advertising - Success 8 (Connectable Flag)",
13623 &add_ext_advertising_success_8,
13624 NULL, test_command_generic);
13626 test_bredrle50("Add Ext Advertising - Success 9 (General Discov Flag)",
13627 &add_ext_advertising_success_9,
13628 NULL, test_command_generic);
13630 test_bredrle50("Add Ext Advertising - Success 10 (Limited Discov Flag)",
13631 &add_ext_advertising_success_10,
13632 NULL, test_command_generic);
13634 test_bredrle50("Add Ext Advertising - Success 11 (Managed Flags)",
13635 &add_ext_advertising_success_11,
13636 NULL, test_command_generic);
13638 test_bredrle50("Add Ext Advertising - Success 12 (TX Power Flag)",
13639 &add_ext_advertising_success_12,
13640 NULL, test_command_generic);
13642 test_bredrle50("Add Ext Advertising - Success 13 (ADV_SCAN_IND)",
13643 &add_ext_advertising_success_13,
13644 NULL, test_command_generic);
13646 test_bredrle50("Add Ext Advertising - Success 14 (ADV_NONCONN_IND)",
13647 &add_ext_advertising_success_14,
13648 NULL, test_command_generic);
13650 test_bredrle50("Add Ext Advertising - Success 15 (ADV_IND)",
13651 &add_ext_advertising_success_15,
13652 NULL, test_command_generic);
13654 test_bredrle50("Add Ext Advertising - Success 16 (Connectable -> on)",
13655 &add_ext_advertising_success_16,
13656 setup_add_advertising,
13657 test_command_generic);
13659 test_bredrle50("Add Ext Advertising - Success 17 (Connectable -> off)",
13660 &add_ext_advertising_success_17,
13661 setup_add_advertising_connectable,
13662 test_command_generic);
13664 /* Changing an advertising instance while it is still being
13665 * advertised will immediately update the advertised data if
13666 * there is no other instance to switch to.
13668 test_bredrle50("Add Ext Advertising - Success 20 (Add Adv override)",
13669 &add_ext_advertising_success_18,
13670 setup_add_advertising,
13671 test_command_generic);
13673 /* An instance should be removed when its timeout has been reached.
13674 * Advertising will also be disabled if this was the last instance.
13676 test_bredrle50_full("Add Ext Advertising - Success 21 (Timeout expires)",
13677 &add_ext_advertising_timeout_expired,
13678 setup_add_advertising_timeout,
13679 test_command_generic, 3);
13681 /* LE off will clear (remove) all instances. */
13682 test_bredrle50("Add Ext Advertising - Success 22 (LE -> off, Remove)",
13683 &add_ext_advertising_le_off,
13684 setup_add_advertising,
13685 test_command_generic);
13687 test_bredrle50("Add Ext Advertising - Success (Empty ScRsp)",
13688 &add_ext_advertising_empty_scrsp,
13689 setup_command_generic,
13690 test_command_generic);
13692 test_bredrle50("Add Ext Advertising - Success (ScRsp only)",
13693 &add_ext_advertising_scrsp_data_only_ok,
13694 NULL, test_command_generic);
13696 test_bredrle50("Add Ext Advertising - Invalid Params (ScRsp too long)",
13697 &add_ext_advertising_scrsp_data_only_too_long,
13698 NULL, test_command_generic);
13700 test_bredrle50("Add Ext Advertising - Success (ScRsp appear)",
13701 &add_ext_advertising_scrsp_appear_data_ok,
13702 setup_command_generic, test_command_generic);
13704 test_bredrle50("Add Ext Advertising - Invalid Params (ScRsp appear long)",
13705 &add_ext_advertising_scrsp_appear_data_too_long,
13706 setup_command_generic, test_command_generic);
13708 test_bredrle50("Add Ext Advertising - Success (Appear is null)",
13709 &add_ext_advertising_scrsp_appear_null,
13710 NULL, test_command_generic);
13712 test_bredrle50("Add Ext Advertising - Success (Name is null)",
13713 &add_ext_advertising_no_name_set,
13714 NULL, test_command_generic);
13716 test_bredrle50("Add Ext Advertising - Success (Complete name)",
13717 &add_ext_advertising_name_fits_in_scrsp,
13718 setup_command_generic,
13719 test_command_generic);
13721 test_bredrle50("Add Ext Advertising - Success (Shortened name)",
13722 &add_ext_advertising_shortened_name_in_scrsp,
13723 setup_command_generic,
13724 test_command_generic);
13726 test_bredrle50("Add Ext Advertising - Success (Short name)",
13727 &add_ext_advertising_shortened_name_in_scrsp,
13728 setup_command_generic,
13729 test_command_generic);
13731 test_bredrle50("Add Ext Advertising - Success (Name + data)",
13732 &add_ext_advertising_name_data_ok,
13733 setup_command_generic,
13734 test_command_generic);
13736 test_bredrle50("Add Ext Advertising - Invalid Params (Name + data)",
13737 &add_ext_advertising_name_data_inv,
13738 setup_command_generic,
13739 test_command_generic);
13741 test_bredrle50("Add Ext Advertising - Success (Name+data+appear)",
13742 &add_ext_advertising_name_data_appear,
13743 setup_command_generic,
13744 test_command_generic);
13746 test_bredrle50("Add Ext Advertising - Success (PHY -> 1M)",
13747 &add_ext_advertising_success_1m,
13748 NULL, test_command_generic);
13750 test_bredrle50("Add Ext Advertising - Success (PHY -> 2M)",
13751 &add_ext_advertising_success_2m,
13752 NULL, test_command_generic);
13754 test_bredrle50("Add Ext Advertising - Success (PHY -> Coded)",
13755 &add_ext_advertising_success_coded,
13756 NULL, test_command_generic);
13758 test_bredrle50("Add Ext Advertising - Success (Ext Pdu Scannable)",
13759 &add_ext_advertising_success_scannable,
13760 NULL, test_command_generic);
13762 test_bredrle50("Add Ext Advertising - Success (Ext Pdu Connectable)",
13763 &add_ext_advertising_success_connectable,
13764 NULL, test_command_generic);
13766 /* In Ext pdu it shall not be both scannable and connectable */
13767 test_bredrle50("Add Ext Advertising - Success (Ext Pdu Conn Scan)",
13768 &add_ext_advertising_success_conn_scan,
13769 NULL, test_command_generic);
13771 test_bredrle50("Add Ext Advertising - Success (1m Connectable -> on)",
13772 &add_ext_advertising_conn_on_1m,
13773 setup_add_advertising_1m,
13774 test_command_generic);
13776 test_bredrle50("Add Ext Advertising - Success (1m Connectable -> off)",
13777 &add_ext_advertising_conn_off_1m,
13778 setup_add_advertising_connectable_1m,
13779 test_command_generic);
13781 test_bredrle50("Remove Ext Advertising - Invalid Params 1",
13782 &remove_ext_advertising_fail_1,
13783 NULL, test_command_generic);
13785 test_bredrle50("Remove Ext Advertising - Success 1",
13786 &remove_ext_advertising_success_1,
13787 setup_add_advertising,
13788 test_command_generic);
13790 test_bredrle50("Remove Ext Advertising - Success 2",
13791 &remove_ext_advertising_success_2,
13792 setup_add_advertising,
13793 test_command_generic);
13795 /* When advertising two instances, the instances should be
13796 * advertised in a round-robin fashion.
13798 test_bredrle50("Multi Ext Advertising - Success 1",
13799 &multi_ext_advertising,
13801 test_command_generic);
13803 /* Adding a new instance when one is already being advertised
13804 * will switch to the new instance after the first has reached
13805 * its duration. A long timeout has been set to
13807 test_bredrle50_full("Multi Ext Advertising - Success 2 (Add Second Inst)",
13808 &multi_ext_advertising_add_second,
13809 setup_add_advertising_duration,
13810 test_command_generic, 3);
13811 /* Multi Ext Advertising
13812 * Setup: Power on and the first ext advertising
13813 * Run: Add the second ext advertising
13814 * Expect: The second ext advertising is added.
13816 test_bredrle50("Multi Ext Advertising - Success 3 (Add 2 Advs)",
13817 &multi_ext_advertising_add_second_2,
13818 setup_add_advertising,
13819 test_command_generic);
13821 /* Multi Ext Advertising
13822 * Setup: Power on and add two ext advertising
13823 * Run: Remove the advertising
13824 * Expect: Received the removed event
13826 test_bredrle50("Multi Ext Advertising - Success 4 (Remove Adv)",
13827 &multi_ext_advertising_remove,
13828 setup_add_2_advertisings,
13829 test_command_generic);
13831 /* Multi Ext Advertising
13832 * Setup: Power on and add max advertisings
13833 * Run: Remove all advertisings
13836 test_bredrle50("Multi Ext Advertising - Success 5 (Remove all)",
13837 &multi_ext_advertising_remove_all,
13838 setup_add_2_advertisings,
13839 test_command_generic);
13841 /* Multi Ext Advertising
13842 * Setup: Add multiple advertising before power on
13844 * Expect: All advertising are set
13846 test_bredrle50("Multi Ext Advertising - Success 6 (Add w/o power on)",
13847 &multi_ext_advertising_add_no_power,
13848 setup_add_2_advertisings_no_power,
13849 test_command_generic);
13851 /* Multi Ext Advertising
13852 * Setup: Power on and add max advertisings
13853 * Run: Add another advertising
13854 * Expect: Received error - Invalid Parameter
13856 test_bredrle50("Multi Ext Advertising - Fail (Add MAX)",
13857 &multi_ext_advertising_add_adv_4,
13858 setup_add_2_advertisings,
13859 test_command_generic);
13861 test_bredrle50("Get PHY Success", &get_phy_success,
13862 NULL, test_command_generic);
13864 test_bredrle50("Set PHY 2m Success", &set_phy_2m_success,
13865 NULL, test_command_generic);
13867 test_bredrle50("Set PHY coded Succcess", &set_phy_coded_success,
13868 NULL, test_command_generic);
13870 test_bredrle50("Set PHY 1m 2m coded Succcess", &set_phy_all_success,
13871 NULL, test_command_generic);
13873 test_bredrle50("Set PHY 2m tx success", &set_phy_2m_tx_success,
13874 NULL, test_command_generic);
13876 test_bredrle50("Set PHY 2m rx success", &set_phy_2m_rx_success,
13877 NULL, test_command_generic);
13879 test_bredrle50("Set PHY Invalid Param", &set_phy_invalid_param,
13880 NULL, test_command_generic);
13882 test_bredrle50("Start Discovery BREDR LE - (Ext Scan Enable)",
13883 &start_discovery_bredrle_ext_scan_enable,
13885 test_command_generic);
13887 test_bredrle50("Start Discovery LE - (Ext Scan Enable)",
13888 &start_discovery_le_ext_scan_enable,
13890 test_command_generic);
13892 test_bredrle50("Start Discovery LE - (Ext Scan Param)",
13893 &start_discovery_le_ext_scan_param,
13895 test_command_generic);
13897 test_bredrle50("Stop Discovery - (Ext Scan Disable)",
13898 &stop_discovery_le_ext_scan_disable,
13899 setup_start_discovery, test_command_generic);
13901 test_bredrle50("Start Discovery - (2m, Scan Param)",
13902 &start_discovery_le_2m_scan_param,
13903 setup_phy_configuration, test_command_generic);
13905 test_bredrle50("Start Discovery - (coded, Scan Param)",
13906 &start_discovery_le_coded_scan_param,
13907 setup_phy_configuration, test_command_generic);
13909 test_bredrle50("Start Discovery - (1m, 2m, coded, Scan Param)",
13910 &start_discovery_le_1m_coded_scan_param,
13911 setup_phy_configuration, test_command_generic);
13913 test_bredrle50("Ext Device Found - Advertising data - Zero padded",
13914 &device_found_gtag,
13915 NULL, test_device_found);
13917 test_bredrle50("Ext Device Found - Advertising data - Invalid field",
13918 &device_found_invalid_field,
13919 NULL, test_device_found);
13921 test_bredrle50_full("Ext Adv. connectable & connected (peripheral)",
13922 &conn_peripheral_adv_connectable_test,
13923 setup_advertise_while_connected,
13924 test_connected_and_advertising, 10);
13926 test_bredrle50_full("Ext Adv. non-connectable & connected (peripheral)",
13927 &conn_peripheral_adv_non_connectable_test,
13928 setup_advertise_while_connected,
13929 test_connected_and_advertising, 10);
13931 test_bredrle50_full("Ext Adv. connectable & connected (central)",
13932 &conn_central_adv_connectable_test,
13933 setup_advertise_while_connected,
13934 test_connected_and_advertising, 10);
13936 test_bredrle50_full("Ext Adv. non-connectable & connected (central)",
13937 &conn_central_adv_non_connectable_test,
13938 setup_advertise_while_connected,
13939 test_connected_and_advertising, 10);
13941 test_bredrle("Read Controller Capabilities - Invalid parameters",
13942 &read_controller_cap_invalid_param_test,
13943 NULL, test_command_generic);
13945 test_bredrle50("Read Controller Capabilities - (5.0) Success",
13946 &read_controller_cap_success,
13947 NULL, test_50_controller_cap_response);
13949 test_bredrle("Ext Adv MGMT Params - Unpowered",
13950 &adv_params_fail_unpowered,
13951 setup_ext_adv_not_powered,
13952 test_command_generic);
13954 test_bredrle("Ext Adv MGMT Params - Invalid parameters",
13955 &adv_params_fail_invalid_params,
13956 NULL, test_command_generic);
13958 test_bredrle("Ext Adv MGMT Params - Success",
13959 &adv_params_success,
13960 NULL, test_command_generic);
13962 test_bredrle50("Ext Adv MGMT Params - (5.0) Success",
13963 &adv_params_success_50,
13964 NULL, test_command_generic);
13966 test_bredrle("Ext Adv MGMT - Data set without Params",
13967 &adv_data_fail_no_params,
13968 NULL, test_command_generic);
13970 test_bredrle50("Ext Adv MGMT - AD Data (5.0) Invalid parameters",
13971 &adv_data_invalid_params,
13972 setup_ext_adv_params,
13973 test_command_generic);
13975 test_bredrle50("Ext Adv MGMT - AD Data (5.0) Success",
13977 setup_ext_adv_params,
13978 test_command_generic);
13980 test_bredrle50("zxcv Ext Adv MGMT - AD Scan Response (5.0) Success",
13981 &adv_scan_rsp_success,
13982 setup_ext_adv_params,
13983 test_command_generic);
13985 /* MGMT_OP_SET_DEVICE_ID
13986 * Using Bluetooth SIG for source.
13988 test_bredrle50("Set Device ID - Success 1",
13989 &set_dev_id_success_1,
13991 test_command_generic);
13993 /* MGMT_OP_SET_DEVICE_ID
13994 * Using SB Implementer's Forum for source.
13996 test_bredrle50("Set Device ID - Success 2",
13997 &set_dev_id_success_2,
13999 test_command_generic);
14001 /* MGMT_OP_SET_DEVICE_ID
14002 * Disable DID with disable flag for source.
14004 test_bredrle50("Set Device ID - Disable",
14005 &set_dev_id_disable,
14007 test_command_generic);
14009 /* MGMT_OP_SET_DEVICE_ID
14010 * Power off, set device id, and power on.
14011 * Expect Write_Extended_Inquiry with device id when power on.
14013 test_bredrle50("Set Device ID - Power off and Power on",
14014 &set_dev_id_power_off_on,
14015 setup_command_generic,
14016 test_command_generic);
14018 /* MGMT_OP_SET_DEVICE_ID
14019 * SSP off, set device id, and SSP on.
14020 * Expect Write_Extended_Inquiry with device id when SSP on.
14022 test_bredrle50("Set Device ID - SSP off and Power on",
14023 &set_dev_id_ssp_off_on,
14024 setup_command_generic,
14025 test_command_generic);
14027 /* MGMT_OP_SET_DEVICE_ID
14028 * Invalid parameter
14030 test_bredrle50("Set Device ID - Invalid Parameter",
14031 &set_dev_id_invalid_param,
14033 test_command_generic);
14035 /* MGMT_OP_GET_DEVICE_FLAGS
14038 test_bredrle50("Get Device Flags - Success",
14039 &get_dev_flags_success,
14040 setup_get_dev_flags,
14041 test_command_generic);
14043 /* MGMT_OP_GET_DEVICE_FLAGS
14044 * Fail - Invalid parameter
14046 test_bredrle50("Get Device Flags - Invalid Parameter",
14047 &get_dev_flags_fail_1,
14048 setup_get_dev_flags,
14049 test_command_generic);
14051 /* MGMT_OP_SET_DEVICE_FLAGS
14054 test_bredrle50("Set Device Flags - Success",
14055 &set_dev_flags_success,
14056 setup_get_dev_flags,
14057 test_command_generic);
14059 /* MGMT_OP_SET_DEVICE_FLAGS
14060 * Invalid Parameter - Missing parameter
14062 test_bredrle50("Set Device Flags - Invalid Parameter 1",
14063 &set_dev_flags_fail_1,
14064 setup_get_dev_flags,
14065 test_command_generic);
14067 /* MGMT_OP_SET_DEVICE_FLAGS
14068 * Invalid Parameter - Not supported value
14070 test_bredrle50("Set Device Flags - Invalid Parameter 2",
14071 &set_dev_flags_fail_2,
14072 setup_get_dev_flags,
14073 test_command_generic);
14075 /* MGMT_OP_SET_DEVICE_FLAGS
14078 test_bredrle50("Set Device Flags - Device not found",
14079 &set_dev_flags_fail_3,
14080 setup_get_dev_flags,
14081 test_command_generic);
14084 * Setup : Power on and register Suspend Event
14085 * Run: Enable suspend via force_suspend
14086 * Expect: Receive the Suspend Event
14088 test_bredrle50("Suspend - Success 1",
14089 &suspend_resume_success_1,
14090 NULL, test_suspend_resume_success_1);
14093 * Setup : Power on and register Suspend Event
14094 * Run: Enable suspend, and then resume via force_suspend
14095 * Expect: Receive the Resume Event
14097 test_bredrle50("Resume - Success 2",
14098 &suspend_resume_success_2,
14099 NULL, test_suspend_resume_success_2);
14102 * Setup: Enable LL Privacy and power on
14103 * Run: Add new device, and enable suspend.
14104 * Expect: Receive the Suspend Event
14106 test_bredrle50("Suspend - Success 3 (Device in WL)",
14107 &suspend_resume_success_3,
14108 setup_suspend_resume_success_3,
14109 test_suspend_resume_success_3);
14112 * Setup: Start advertising and power on.
14113 * Run: Enable suspend
14114 * Expect: Receive the Suspend Event
14116 test_bredrle50("Suspend - Success 4 (Advertising)",
14117 &suspend_resume_success_4,
14118 setup_suspend_resume_success_4,
14119 test_suspend_resume_success_4);
14123 * Run: Enable suspend
14124 * Expect: Receive the Suspend Event
14126 test_bredrle("Suspend - Success 5 (Pairing - Legacy)",
14127 &suspend_resume_success_5, NULL,
14128 test_suspend_resume_success_5);
14132 * Run: Enable suspend
14133 * Expect: Receive the Suspend Event
14135 test_bredrle("Suspend - Success 6 (Pairing - SSP)",
14136 &suspend_resume_success_6,
14137 setup_pairing_acceptor,
14138 test_suspend_resume_success_5);
14141 * Setup : Power on and register Suspend Event
14142 * Run: Enable suspend via force_suspend
14143 * Expect: Receive the Suspend Event
14145 test_bredrle50("Suspend - Success 7 (Suspend/Force Wakeup)",
14146 &suspend_resume_success_7,
14147 NULL, test_suspend_resume_success_7);
14151 * Run: Start discover and enable suspend
14152 * Expect: Receive the Suspend Event
14154 test_bredrle50_full("Suspend - Success 8 (Discovery/Suspend)",
14155 &suspend_resume_success_8,
14156 NULL, test_suspend_resume_success_8, 4);
14159 * Setup : Power on, start discovery
14160 * Run: Start discover, enable suspend and resume.
14161 * Expect: Receive the Resume Event
14163 test_bredrle50_full("Resume - Success 9 (Discovery/Suspend/Resume)",
14164 &suspend_resume_success_9,
14165 setup_suspend_resume_success_9,
14166 test_suspend_resume_success_9, 4);
14170 * Run: Suspend, Resume, Suspend, and Resume
14173 test_bredrle50_full("Resume - Success 10 (Multiple Suspend/Resume)",
14174 &suspend_resume_success_10,
14175 setup_suspend_resume_success_10,
14176 test_suspend_resume_success_10, 6);
14178 /* MGMT_OP_READ_EXP_FEATURE
14179 * Read Experimental features - success
14181 test_bredrle50("Read Exp Feature - Success",
14182 &read_exp_feat_success,
14183 NULL, test_command_generic);
14185 /* MGMT_OP_READ_EXP_FEATURE
14186 * Read Experimental features - success (Index None)
14188 test_bredrle50("Read Exp Feature - Success (Index None)",
14189 &read_exp_feat_success_index_none,
14190 NULL, test_command_generic);
14192 /* MGMT_OP_SET_EXP_FEATURE
14193 * Enable LL Privacy
14195 test_bredrle50("Set Exp Feature - Enable LL Privacy",
14196 &set_exp_feat_enable_ll_privacy,
14197 setup_set_exp_feature_alt,
14198 test_command_generic);
14200 /* MGMT_OP_SET_EXP_FEATURE
14203 test_bredrle50("Set Exp Feature - Offload Codec",
14204 &set_exp_feat_offload_codec,
14205 setup_set_exp_feature_alt,
14206 test_command_generic);
14208 /* MGMT_OP_SET_EXP_FEATURE
14209 * Disable all features by sending zero UUID
14211 test_bredrle50("Set Exp Feature - Disable all",
14212 &set_exp_feat_disable,
14213 NULL, test_command_generic);
14215 /* MGMT_OP_SET_EXP_FEATURE
14216 * Rejected - If the power is on, the command should be rejected
14218 test_bredrle50("Set Exp Feature - Rejected",
14219 &set_exp_feat_rejected,
14220 NULL, test_command_generic);
14222 /* MGMT_OP_SET_EXP_FEATURE
14223 * Invalid parameter
14225 test_bredrle50("Set Exp Feature - Invalid params",
14226 &set_exp_feat_invalid,
14227 NULL, test_command_generic);
14230 /* MGMT_OP_SET_EXP_FEATURE
14231 * Not Supported UUID
14233 test_bredrle50("Set Exp Feature - Unknown feature",
14234 &set_exp_feat_unknown,
14235 NULL, test_command_generic);
14238 * Setup: Enable LE and Power On
14239 * Run: Add new device
14240 * Expect: Device is added to the accept list
14242 test_bredrle50("LL Privacy - Add Device 1 (Add to AL)",
14243 &ll_privacy_add_device_1,
14244 NULL, test_command_generic);
14247 * Setup: Enable LL Privacy and add IRK of new device
14248 * Run: Add new device
14249 * Expect: Device is added to the resolving list
14251 test_bredrle50("LL Privacy - Add Device 2 (Add to RL)",
14252 &ll_privacy_add_device_2,
14253 setup_ll_privacy_with_irk1,
14254 test_command_generic);
14256 * Setup: Enable LL Privacy and add IRK of new device
14257 * Run: Add new device
14258 * Expect: Device is added to the resolving list and resolving list
14261 test_bredrle50("LL Privacy - Add Device 3 (Enable RL)",
14262 &ll_privacy_add_device_3,
14263 setup_ll_privacy_with_irk1,
14264 test_command_generic);
14267 * Setup: Enable LL Privacy, add device1 with IRK, and add IRK of
14269 * Run: Add new device2
14270 * Expect: Device2 is added to the accept list
14272 test_bredrle50("LL Privacy - Add Device 4 (2 Devices to AL)",
14273 &ll_privacy_add_device_4,
14274 setup_ll_privacy_dev1_and_irk2,
14275 test_command_generic);
14278 * Setup: Enable LL Privacy, add device1 with IRK, and add IRK of
14280 * Run: Add new device2
14281 * Expect: Device2 is added to the resolv list
14283 test_bredrle50("LL Privacy - Add Device 5 (2 Devices to RL)",
14284 &ll_privacy_add_device_5,
14285 setup_ll_privacy_dev1_and_irk2,
14286 test_command_generic);
14289 * Setup: Enable LL Privacy, add 3 devices with IRKs, and add IRK of
14291 * Run: Add new device4
14292 * Expect: Device4 is added but failed to add to resolv list because
14293 * btdev resolv list is full.
14295 test_bredrle50("LL Privacy - Add Device 6 (RL is full)",
14296 &ll_privacy_add_device_6,
14297 setup_ll_privacy_2_devices_extra_rl,
14298 test_command_generic);
14301 * Setup: Enable LL Privacy, add 2 devices with IRKs and 1 device
14302 * without IRK, and add IRK for device4
14303 * Run: Add new device4
14304 * Expect: Device4 is added but failed to add to accept list, and it
14305 * is removed from the resolv list.
14307 test_bredrle50("LL Privacy - Add Device 7 (AL is full)",
14308 &ll_privacy_add_device_7,
14309 setup_ll_privacy_2_devices_extra_al,
14310 test_command_generic);
14313 * Setup: Enable LL Privacy, and add advertising
14314 * Run: Add new device
14315 * Expect: Disable the advertising before adding new device to the
14316 * accept list and resolving list
14318 test_bredrle50("LL Privacy - Add Device 8 (Disable Adv)",
14319 &ll_privacy_add_device_8,
14320 setup_ll_privacy_adv, test_command_generic);
14323 * Setup: Enable LL Privacy, and add 2 advertisings
14324 * Run: Add new device
14325 * Expect: Disable the advertising before adding new device to the
14326 * accept list and resolving list
14328 test_bredrle50("LL Privacy - Add Device 9 (Multi Adv)",
14329 &ll_privacy_add_device_9,
14330 setup_ll_privacy_2_advs, test_command_generic);
14333 * Setup: Enable LL Privacy, and add 1 device and add 2 advertisings
14334 * Run: Add new device
14335 * Expect: Disable the advertising before adding new device to the
14336 * accept list and resolving list
14338 test_bredrle50("LL Privacy - Add Device 10 (Multi Dev and Multi Adv)",
14339 &ll_privacy_add_device_9,
14340 setup_ll_privacy_dev_2_advs,
14341 test_command_generic);
14344 * Setup: Enable LL Privacy and add 2 devices and its IRK
14345 * Run: Remove one of devices
14346 * Expect: The device is removed from the accept list
14348 test_bredrle50("LL Privacy - Remove Device 1 (Remove from AL)",
14349 &ll_privacy_remove_device_1,
14350 setup_ll_privacy_3_devices,
14351 test_command_generic);
14353 * Setup: Enable LL Privacy and add 2 devices and its IRK
14354 * Run: Remove one of devices
14355 * Expect: The device is removed from the resolving list
14357 test_bredrle50("LL Privacy - Remove Device 2 (Remove from RL)",
14358 &ll_privacy_remove_device_2,
14359 setup_ll_privacy_3_devices,
14360 test_command_generic);
14363 * Setup: Enable LL Privacy and add a device and its IRK
14364 * Run: Remove device
14365 * Expect: Device is removed and disable the resolving list before
14366 * removing the device from the list.
14368 test_bredrle50("LL Privacy - Remove Device 3 (Disable RL)",
14369 &ll_privacy_remove_device_3,
14370 setup_ll_privacy_3_devices,
14371 test_command_generic);
14374 * Setup: Enable LL Privacy, add advertising and add device
14375 * Run: Remove the device
14376 * Expect: Disable the advertising before removing the device from the
14377 * accept list and resolving list
14379 test_bredrle50("LL Privacy - Remove Device 4 (Disable Adv)",
14380 &ll_privacy_remove_device_4,
14381 setup_ll_privacy_adv_3_devices,
14382 test_command_generic);
14385 * Setup: Enable LL Privacy, add advertisings and add device
14386 * Run: Remove the device
14387 * Expect: Disable the advertising before removing the device from the
14388 * accept list and resolving list
14390 test_bredrle50("LL Privacy - Remove Device 5 (Multi Adv)",
14391 &ll_privacy_remove_device_5,
14392 setup_ll_privacy_adv_1_device_2_advs,
14393 test_command_generic);
14396 * Setup: Enable LL Privacy
14397 * Check if the resolving list is disabled before the scan parameter is
14400 test_bredrle50("LL Privacy - Start Discovery 1 (Disable RL)",
14401 &ll_privacy_start_discovery_ll_privacy_1,
14402 setup_ll_privacy_dev1_and_irk2,
14403 test_command_generic);
14406 * Setup: Enable LL Privacy, Add 2 devices with IRKs and remove one of
14408 * Run: Start Discovery
14409 * Expect: Resolving list is disabled.
14411 test_bredrle50("LL Privacy - Start Discovery 2 (Disable RL)",
14412 &ll_privacy_start_discovery_ll_privacy_2,
14413 setup_ll_privacy_device2_discovry,
14414 test_command_generic);
14417 * Setup: Enable Privacy, LL Privacy, and enable advertising
14418 * Run: bthost scan the advertising
14419 * Expect: bthost receives the advertising with random address
14421 test_bredrle50("LL Privacy - Advertising 1 (Scan Result)",
14422 &ll_privacy_advertising_1,
14423 setup_ll_privacy_enable_powered,
14424 test_ll_privacy_bthost_scan_report);
14427 * Setup: Enable Privacy, LL Privacy, and enable advertising
14428 * Run: Connect from bthost
14429 * Expect: Pair success
14431 test_bredrle50("LL Privacy - Acceptor 1",
14432 &ll_privacy_acceptor_1,
14433 setup_ll_privacy_add_adv,
14434 test_pairing_acceptor_ll_privacy_le_random);
14437 * Setup: Enable Privacy, LL Privacy, and enable advertising
14438 * Run: Connect from bthost
14439 * Expect: Pair success
14441 test_bredrle50("LL Privacy - Acceptor 2",
14442 &ll_privacy_acceptor_2,
14443 setup_ll_privacy_add_adv,
14444 test_pairing_acceptor_ll_privacy_le_random);
14447 * Setup: Enable Privacy, LL Privacy
14449 * Expect: Pair success
14451 test_bredrle50("LL Privacy - Pair 1",
14452 &ll_privacy_pair_1,
14454 test_command_generic);
14457 * Setup: Enable Privacy, LL Privacy
14459 * Expect: The device is added to Accept List
14461 test_bredrle50("LL Privacy - Pair 2 (Add to AL)",
14462 &ll_privacy_pair_2,
14464 test_ll_privacy_pair_2);
14467 * Setup: Enable Privacy, LL Privacy
14468 * Run: Pair device, wait for New Key Event and unpair.
14469 * Expect: Receive Unpair event
14471 test_bredrle50("LL Privacy - Unpair 1",
14472 &ll_privacy_unpair_1,
14474 test_ll_privacy_unpair);
14477 * Setup: Enable Privacy, LL Privacy
14478 * Run: Pair device, disconnect, add device, add 2nd device, and
14479 * remove the client, then unpair.
14480 * Expect: Expect the clinet is removed from the Accept List.
14482 test_bredrle50_full("LL Privacy - Unpair 2 (Remove from AL)",
14483 &ll_privacy_unpair_2,
14485 test_ll_privacy_unpair_2, 5);
14488 * Setup: Enable LL Privacy, add IRK of new device, Add Device
14489 * Run: Set Device Flags
14490 * Expect: Device Privacy Mode is set.
14492 test_bredrle50("LL Privacy - Set Device Flag 1 (Device Privacy)",
14493 &ll_privacy_set_device_flag_1,
14494 setup_ll_privacy_add_device,
14495 test_command_generic);
14497 return tester_run();