* [PATCH 6.6.y] Bluetooth: HCI: Set extended advertising data synchronously
[not found] <2025070625-wafer-speed-20c1@gregkh>
@ 2025-07-07 8:02 ` Christian Eggers
2025-07-07 8:11 ` Greg KH
2025-07-07 8:24 ` [6.6.y] " bluez.test.bot
2025-07-07 8:13 ` [PATCH 6.6.y] " Christian Eggers
2025-07-09 9:05 ` [PATCH 6.6.y v2] " Christian Eggers
2 siblings, 2 replies; 10+ messages in thread
From: Christian Eggers @ 2025-07-07 8:02 UTC (permalink / raw)
To: stable; +Cc: linux-bluetooth, Christian Eggers, Luiz Augusto von Dentz
Currently, for controllers with extended advertising, the advertising
data is set in the asynchronous response handler for extended
adverstising params. As most advertising settings are performed in a
synchronous context, the (asynchronous) setting of the advertising data
is done too late (after enabling the advertising).
Move setting of adverstising data from asynchronous response handler
into synchronous context to fix ordering of HCI commands.
Signed-off-by: Christian Eggers <ceggers@arri.de>
Fixes: a0fb3726ba55 ("Bluetooth: Use Set ext adv/scan rsp data if controller supports")
Cc: stable@vger.kernel.org
v2: https://lore.kernel.org/linux-bluetooth/20250626115209.17839-1-ceggers@arri.de/
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
---
net/bluetooth/hci_event.c | 36 -------
net/bluetooth/hci_sync.c | 213 ++++++++++++++++++++++++--------------
2 files changed, 133 insertions(+), 116 deletions(-)
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 008d14b3d8b8..147766458a6c 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -2139,40 +2139,6 @@ static u8 hci_cc_set_adv_param(struct hci_dev *hdev, void *data,
return rp->status;
}
-static u8 hci_cc_set_ext_adv_param(struct hci_dev *hdev, void *data,
- struct sk_buff *skb)
-{
- struct hci_rp_le_set_ext_adv_params *rp = data;
- struct hci_cp_le_set_ext_adv_params *cp;
- struct adv_info *adv_instance;
-
- bt_dev_dbg(hdev, "status 0x%2.2x", rp->status);
-
- if (rp->status)
- return rp->status;
-
- cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS);
- if (!cp)
- return rp->status;
-
- hci_dev_lock(hdev);
- hdev->adv_addr_type = cp->own_addr_type;
- if (!cp->handle) {
- /* Store in hdev for instance 0 */
- hdev->adv_tx_power = rp->tx_power;
- } else {
- adv_instance = hci_find_adv_instance(hdev, cp->handle);
- if (adv_instance)
- adv_instance->tx_power = rp->tx_power;
- }
- /* Update adv data as tx power is known now */
- hci_update_adv_data(hdev, cp->handle);
-
- hci_dev_unlock(hdev);
-
- return rp->status;
-}
-
static u8 hci_cc_read_rssi(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{
@@ -4153,8 +4119,6 @@ static const struct hci_cc {
HCI_CC(HCI_OP_LE_READ_NUM_SUPPORTED_ADV_SETS,
hci_cc_le_read_num_adv_sets,
sizeof(struct hci_rp_le_read_num_supported_adv_sets)),
- HCI_CC(HCI_OP_LE_SET_EXT_ADV_PARAMS, hci_cc_set_ext_adv_param,
- sizeof(struct hci_rp_le_set_ext_adv_params)),
HCI_CC_STATUS(HCI_OP_LE_SET_EXT_ADV_ENABLE,
hci_cc_le_set_ext_adv_enable),
HCI_CC_STATUS(HCI_OP_LE_SET_ADV_SET_RAND_ADDR,
diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c
index e92bc4ceb5ad..7b6c8f53e334 100644
--- a/net/bluetooth/hci_sync.c
+++ b/net/bluetooth/hci_sync.c
@@ -1224,9 +1224,129 @@ static int hci_set_adv_set_random_addr_sync(struct hci_dev *hdev, u8 instance,
sizeof(cp), &cp, HCI_CMD_TIMEOUT);
}
+static int
+hci_set_ext_adv_params_sync(struct hci_dev *hdev, struct adv_info *adv,
+ const struct hci_cp_le_set_ext_adv_params *cp,
+ struct hci_rp_le_set_ext_adv_params *rp)
+{
+ struct sk_buff *skb;
+
+ skb = __hci_cmd_sync(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS, sizeof(*cp),
+ cp, HCI_CMD_TIMEOUT);
+
+ /* If command return a status event, skb will be set to -ENODATA */
+ if (skb == ERR_PTR(-ENODATA))
+ return 0;
+
+ if (IS_ERR(skb)) {
+ bt_dev_err(hdev, "Opcode 0x%4.4x failed: %ld",
+ HCI_OP_LE_SET_EXT_ADV_PARAMS, PTR_ERR(skb));
+ return PTR_ERR(skb);
+ }
+
+ if (skb->len != sizeof(*rp)) {
+ bt_dev_err(hdev, "Invalid response length for 0x%4.4x: %u",
+ HCI_OP_LE_SET_EXT_ADV_PARAMS, skb->len);
+ kfree_skb(skb);
+ return -EIO;
+ }
+
+ memcpy(rp, skb->data, sizeof(*rp));
+ kfree_skb(skb);
+
+ if (!rp->status) {
+ hdev->adv_addr_type = cp->own_addr_type;
+ if (!cp->handle) {
+ /* Store in hdev for instance 0 */
+ hdev->adv_tx_power = rp->tx_power;
+ } else if (adv) {
+ adv->tx_power = rp->tx_power;
+ }
+ }
+
+ return rp->status;
+}
+
+static int hci_set_ext_adv_data_sync(struct hci_dev *hdev, u8 instance)
+{
+ struct {
+ struct hci_cp_le_set_ext_adv_data cp;
+ u8 data[HCI_MAX_EXT_AD_LENGTH];
+ } pdu;
+ u8 len;
+ struct adv_info *adv = NULL;
+ int err;
+
+ memset(&pdu, 0, sizeof(pdu));
+
+ if (instance) {
+ adv = hci_find_adv_instance(hdev, instance);
+ if (!adv || !adv->adv_data_changed)
+ return 0;
+ }
+
+ len = eir_create_adv_data(hdev, instance, pdu.data);
+
+ pdu.cp.length = len;
+ pdu.cp.handle = instance;
+ pdu.cp.operation = LE_SET_ADV_DATA_OP_COMPLETE;
+ pdu.cp.frag_pref = LE_SET_ADV_DATA_NO_FRAG;
+
+ err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_DATA,
+ sizeof(pdu.cp) + len, &pdu.cp,
+ HCI_CMD_TIMEOUT);
+ if (err)
+ return err;
+
+ /* Update data if the command succeed */
+ if (adv) {
+ adv->adv_data_changed = false;
+ } else {
+ memcpy(hdev->adv_data, pdu.data, len);
+ hdev->adv_data_len = len;
+ }
+
+ return 0;
+}
+
+static int hci_set_adv_data_sync(struct hci_dev *hdev, u8 instance)
+{
+ struct hci_cp_le_set_adv_data cp;
+ u8 len;
+
+ memset(&cp, 0, sizeof(cp));
+
+ len = eir_create_adv_data(hdev, instance, cp.data);
+
+ /* There's nothing to do if the data hasn't changed */
+ if (hdev->adv_data_len == len &&
+ memcmp(cp.data, hdev->adv_data, len) == 0)
+ return 0;
+
+ memcpy(hdev->adv_data, cp.data, sizeof(cp.data));
+ hdev->adv_data_len = len;
+
+ cp.length = len;
+
+ return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_ADV_DATA,
+ sizeof(cp), &cp, HCI_CMD_TIMEOUT);
+}
+
+int hci_update_adv_data_sync(struct hci_dev *hdev, u8 instance)
+{
+ if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
+ return 0;
+
+ if (ext_adv_capable(hdev))
+ return hci_set_ext_adv_data_sync(hdev, instance);
+
+ return hci_set_adv_data_sync(hdev, instance);
+}
+
int hci_setup_ext_adv_instance_sync(struct hci_dev *hdev, u8 instance)
{
struct hci_cp_le_set_ext_adv_params cp;
+ struct hci_rp_le_set_ext_adv_params rp;
bool connectable;
u32 flags;
bdaddr_t random_addr;
@@ -1333,8 +1453,12 @@ int hci_setup_ext_adv_instance_sync(struct hci_dev *hdev, u8 instance)
cp.secondary_phy = HCI_ADV_PHY_1M;
}
- err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS,
- sizeof(cp), &cp, HCI_CMD_TIMEOUT);
+ err = hci_set_ext_adv_params_sync(hdev, adv, &cp, &rp);
+ if (err)
+ return err;
+
+ /* Update adv data as tx power is known now */
+ err = hci_set_ext_adv_data_sync(hdev, cp.handle);
if (err)
return err;
@@ -1859,82 +1983,6 @@ int hci_le_terminate_big_sync(struct hci_dev *hdev, u8 handle, u8 reason)
sizeof(cp), &cp, HCI_CMD_TIMEOUT);
}
-static int hci_set_ext_adv_data_sync(struct hci_dev *hdev, u8 instance)
-{
- struct {
- struct hci_cp_le_set_ext_adv_data cp;
- u8 data[HCI_MAX_EXT_AD_LENGTH];
- } pdu;
- u8 len;
- struct adv_info *adv = NULL;
- int err;
-
- memset(&pdu, 0, sizeof(pdu));
-
- if (instance) {
- adv = hci_find_adv_instance(hdev, instance);
- if (!adv || !adv->adv_data_changed)
- return 0;
- }
-
- len = eir_create_adv_data(hdev, instance, pdu.data);
-
- pdu.cp.length = len;
- pdu.cp.handle = instance;
- pdu.cp.operation = LE_SET_ADV_DATA_OP_COMPLETE;
- pdu.cp.frag_pref = LE_SET_ADV_DATA_NO_FRAG;
-
- err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_DATA,
- sizeof(pdu.cp) + len, &pdu.cp,
- HCI_CMD_TIMEOUT);
- if (err)
- return err;
-
- /* Update data if the command succeed */
- if (adv) {
- adv->adv_data_changed = false;
- } else {
- memcpy(hdev->adv_data, pdu.data, len);
- hdev->adv_data_len = len;
- }
-
- return 0;
-}
-
-static int hci_set_adv_data_sync(struct hci_dev *hdev, u8 instance)
-{
- struct hci_cp_le_set_adv_data cp;
- u8 len;
-
- memset(&cp, 0, sizeof(cp));
-
- len = eir_create_adv_data(hdev, instance, cp.data);
-
- /* There's nothing to do if the data hasn't changed */
- if (hdev->adv_data_len == len &&
- memcmp(cp.data, hdev->adv_data, len) == 0)
- return 0;
-
- memcpy(hdev->adv_data, cp.data, sizeof(cp.data));
- hdev->adv_data_len = len;
-
- cp.length = len;
-
- return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_ADV_DATA,
- sizeof(cp), &cp, HCI_CMD_TIMEOUT);
-}
-
-int hci_update_adv_data_sync(struct hci_dev *hdev, u8 instance)
-{
- if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
- return 0;
-
- if (ext_adv_capable(hdev))
- return hci_set_ext_adv_data_sync(hdev, instance);
-
- return hci_set_adv_data_sync(hdev, instance);
-}
-
int hci_schedule_adv_instance_sync(struct hci_dev *hdev, u8 instance,
bool force)
{
@@ -6257,6 +6305,7 @@ static int hci_le_ext_directed_advertising_sync(struct hci_dev *hdev,
struct hci_conn *conn)
{
struct hci_cp_le_set_ext_adv_params cp;
+ struct hci_rp_le_set_ext_adv_params rp;
int err;
bdaddr_t random_addr;
u8 own_addr_type;
@@ -6298,8 +6347,12 @@ static int hci_le_ext_directed_advertising_sync(struct hci_dev *hdev,
if (err)
return err;
- err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS,
- sizeof(cp), &cp, HCI_CMD_TIMEOUT);
+ err = hci_set_ext_adv_params_sync(hdev, NULL, &cp, &rp);
+ if (err)
+ return err;
+
+ /* Update adv data as tx power is known now */
+ err = hci_set_ext_adv_data_sync(hdev, cp.handle);
if (err)
return err;
--
Hi Greg,
I've backported this patch for 6.6. There were some trivial merge
conflicts due to moved coded sections.
Please try it also for older trees. If I get any FAILED notices,
I'll try to prepare patches for specific trees.
regards,
Christian
2.43.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 6.6.y] Bluetooth: HCI: Set extended advertising data synchronously
2025-07-07 8:02 ` [PATCH 6.6.y] Bluetooth: HCI: Set extended advertising data synchronously Christian Eggers
@ 2025-07-07 8:11 ` Greg KH
2025-07-07 8:24 ` [6.6.y] " bluez.test.bot
1 sibling, 0 replies; 10+ messages in thread
From: Greg KH @ 2025-07-07 8:11 UTC (permalink / raw)
To: Christian Eggers; +Cc: stable, linux-bluetooth, Luiz Augusto von Dentz
On Mon, Jul 07, 2025 at 10:02:05AM +0200, Christian Eggers wrote:
> Currently, for controllers with extended advertising, the advertising
> data is set in the asynchronous response handler for extended
> adverstising params. As most advertising settings are performed in a
> synchronous context, the (asynchronous) setting of the advertising data
> is done too late (after enabling the advertising).
>
> Move setting of adverstising data from asynchronous response handler
> into synchronous context to fix ordering of HCI commands.
>
> Signed-off-by: Christian Eggers <ceggers@arri.de>
> Fixes: a0fb3726ba55 ("Bluetooth: Use Set ext adv/scan rsp data if controller supports")
> Cc: stable@vger.kernel.org
> v2: https://lore.kernel.org/linux-bluetooth/20250626115209.17839-1-ceggers@arri.de/
> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
> ---
> net/bluetooth/hci_event.c | 36 -------
> net/bluetooth/hci_sync.c | 213 ++++++++++++++++++++++++--------------
> 2 files changed, 133 insertions(+), 116 deletions(-)
<formletter>
This is not the correct way to submit patches for inclusion in the
stable kernel tree. Please read:
https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
for how to do this properly.
</formletter>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 6.6.y] Bluetooth: HCI: Set extended advertising data synchronously
[not found] <2025070625-wafer-speed-20c1@gregkh>
2025-07-07 8:02 ` [PATCH 6.6.y] Bluetooth: HCI: Set extended advertising data synchronously Christian Eggers
@ 2025-07-07 8:13 ` Christian Eggers
2025-07-08 15:36 ` Greg KH
2025-07-09 9:05 ` [PATCH 6.6.y v2] " Christian Eggers
2 siblings, 1 reply; 10+ messages in thread
From: Christian Eggers @ 2025-07-07 8:13 UTC (permalink / raw)
To: stable; +Cc: linux-bluetooth, Christian Eggers, Luiz Augusto von Dentz
Upstream commit 89fb8acc38852116d38d721ad394aad7f2871670
Currently, for controllers with extended advertising, the advertising
data is set in the asynchronous response handler for extended
adverstising params. As most advertising settings are performed in a
synchronous context, the (asynchronous) setting of the advertising data
is done too late (after enabling the advertising).
Move setting of adverstising data from asynchronous response handler
into synchronous context to fix ordering of HCI commands.
Signed-off-by: Christian Eggers <ceggers@arri.de>
Fixes: a0fb3726ba55 ("Bluetooth: Use Set ext adv/scan rsp data if controller supports")
Cc: stable@vger.kernel.org
v2: https://lore.kernel.org/linux-bluetooth/20250626115209.17839-1-ceggers@arri.de/
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
---
net/bluetooth/hci_event.c | 36 -------
net/bluetooth/hci_sync.c | 213 ++++++++++++++++++++++++--------------
2 files changed, 133 insertions(+), 116 deletions(-)
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 008d14b3d8b8..147766458a6c 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -2139,40 +2139,6 @@ static u8 hci_cc_set_adv_param(struct hci_dev *hdev, void *data,
return rp->status;
}
-static u8 hci_cc_set_ext_adv_param(struct hci_dev *hdev, void *data,
- struct sk_buff *skb)
-{
- struct hci_rp_le_set_ext_adv_params *rp = data;
- struct hci_cp_le_set_ext_adv_params *cp;
- struct adv_info *adv_instance;
-
- bt_dev_dbg(hdev, "status 0x%2.2x", rp->status);
-
- if (rp->status)
- return rp->status;
-
- cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS);
- if (!cp)
- return rp->status;
-
- hci_dev_lock(hdev);
- hdev->adv_addr_type = cp->own_addr_type;
- if (!cp->handle) {
- /* Store in hdev for instance 0 */
- hdev->adv_tx_power = rp->tx_power;
- } else {
- adv_instance = hci_find_adv_instance(hdev, cp->handle);
- if (adv_instance)
- adv_instance->tx_power = rp->tx_power;
- }
- /* Update adv data as tx power is known now */
- hci_update_adv_data(hdev, cp->handle);
-
- hci_dev_unlock(hdev);
-
- return rp->status;
-}
-
static u8 hci_cc_read_rssi(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{
@@ -4153,8 +4119,6 @@ static const struct hci_cc {
HCI_CC(HCI_OP_LE_READ_NUM_SUPPORTED_ADV_SETS,
hci_cc_le_read_num_adv_sets,
sizeof(struct hci_rp_le_read_num_supported_adv_sets)),
- HCI_CC(HCI_OP_LE_SET_EXT_ADV_PARAMS, hci_cc_set_ext_adv_param,
- sizeof(struct hci_rp_le_set_ext_adv_params)),
HCI_CC_STATUS(HCI_OP_LE_SET_EXT_ADV_ENABLE,
hci_cc_le_set_ext_adv_enable),
HCI_CC_STATUS(HCI_OP_LE_SET_ADV_SET_RAND_ADDR,
diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c
index e92bc4ceb5ad..7b6c8f53e334 100644
--- a/net/bluetooth/hci_sync.c
+++ b/net/bluetooth/hci_sync.c
@@ -1224,9 +1224,129 @@ static int hci_set_adv_set_random_addr_sync(struct hci_dev *hdev, u8 instance,
sizeof(cp), &cp, HCI_CMD_TIMEOUT);
}
+static int
+hci_set_ext_adv_params_sync(struct hci_dev *hdev, struct adv_info *adv,
+ const struct hci_cp_le_set_ext_adv_params *cp,
+ struct hci_rp_le_set_ext_adv_params *rp)
+{
+ struct sk_buff *skb;
+
+ skb = __hci_cmd_sync(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS, sizeof(*cp),
+ cp, HCI_CMD_TIMEOUT);
+
+ /* If command return a status event, skb will be set to -ENODATA */
+ if (skb == ERR_PTR(-ENODATA))
+ return 0;
+
+ if (IS_ERR(skb)) {
+ bt_dev_err(hdev, "Opcode 0x%4.4x failed: %ld",
+ HCI_OP_LE_SET_EXT_ADV_PARAMS, PTR_ERR(skb));
+ return PTR_ERR(skb);
+ }
+
+ if (skb->len != sizeof(*rp)) {
+ bt_dev_err(hdev, "Invalid response length for 0x%4.4x: %u",
+ HCI_OP_LE_SET_EXT_ADV_PARAMS, skb->len);
+ kfree_skb(skb);
+ return -EIO;
+ }
+
+ memcpy(rp, skb->data, sizeof(*rp));
+ kfree_skb(skb);
+
+ if (!rp->status) {
+ hdev->adv_addr_type = cp->own_addr_type;
+ if (!cp->handle) {
+ /* Store in hdev for instance 0 */
+ hdev->adv_tx_power = rp->tx_power;
+ } else if (adv) {
+ adv->tx_power = rp->tx_power;
+ }
+ }
+
+ return rp->status;
+}
+
+static int hci_set_ext_adv_data_sync(struct hci_dev *hdev, u8 instance)
+{
+ struct {
+ struct hci_cp_le_set_ext_adv_data cp;
+ u8 data[HCI_MAX_EXT_AD_LENGTH];
+ } pdu;
+ u8 len;
+ struct adv_info *adv = NULL;
+ int err;
+
+ memset(&pdu, 0, sizeof(pdu));
+
+ if (instance) {
+ adv = hci_find_adv_instance(hdev, instance);
+ if (!adv || !adv->adv_data_changed)
+ return 0;
+ }
+
+ len = eir_create_adv_data(hdev, instance, pdu.data);
+
+ pdu.cp.length = len;
+ pdu.cp.handle = instance;
+ pdu.cp.operation = LE_SET_ADV_DATA_OP_COMPLETE;
+ pdu.cp.frag_pref = LE_SET_ADV_DATA_NO_FRAG;
+
+ err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_DATA,
+ sizeof(pdu.cp) + len, &pdu.cp,
+ HCI_CMD_TIMEOUT);
+ if (err)
+ return err;
+
+ /* Update data if the command succeed */
+ if (adv) {
+ adv->adv_data_changed = false;
+ } else {
+ memcpy(hdev->adv_data, pdu.data, len);
+ hdev->adv_data_len = len;
+ }
+
+ return 0;
+}
+
+static int hci_set_adv_data_sync(struct hci_dev *hdev, u8 instance)
+{
+ struct hci_cp_le_set_adv_data cp;
+ u8 len;
+
+ memset(&cp, 0, sizeof(cp));
+
+ len = eir_create_adv_data(hdev, instance, cp.data);
+
+ /* There's nothing to do if the data hasn't changed */
+ if (hdev->adv_data_len == len &&
+ memcmp(cp.data, hdev->adv_data, len) == 0)
+ return 0;
+
+ memcpy(hdev->adv_data, cp.data, sizeof(cp.data));
+ hdev->adv_data_len = len;
+
+ cp.length = len;
+
+ return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_ADV_DATA,
+ sizeof(cp), &cp, HCI_CMD_TIMEOUT);
+}
+
+int hci_update_adv_data_sync(struct hci_dev *hdev, u8 instance)
+{
+ if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
+ return 0;
+
+ if (ext_adv_capable(hdev))
+ return hci_set_ext_adv_data_sync(hdev, instance);
+
+ return hci_set_adv_data_sync(hdev, instance);
+}
+
int hci_setup_ext_adv_instance_sync(struct hci_dev *hdev, u8 instance)
{
struct hci_cp_le_set_ext_adv_params cp;
+ struct hci_rp_le_set_ext_adv_params rp;
bool connectable;
u32 flags;
bdaddr_t random_addr;
@@ -1333,8 +1453,12 @@ int hci_setup_ext_adv_instance_sync(struct hci_dev *hdev, u8 instance)
cp.secondary_phy = HCI_ADV_PHY_1M;
}
- err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS,
- sizeof(cp), &cp, HCI_CMD_TIMEOUT);
+ err = hci_set_ext_adv_params_sync(hdev, adv, &cp, &rp);
+ if (err)
+ return err;
+
+ /* Update adv data as tx power is known now */
+ err = hci_set_ext_adv_data_sync(hdev, cp.handle);
if (err)
return err;
@@ -1859,82 +1983,6 @@ int hci_le_terminate_big_sync(struct hci_dev *hdev, u8 handle, u8 reason)
sizeof(cp), &cp, HCI_CMD_TIMEOUT);
}
-static int hci_set_ext_adv_data_sync(struct hci_dev *hdev, u8 instance)
-{
- struct {
- struct hci_cp_le_set_ext_adv_data cp;
- u8 data[HCI_MAX_EXT_AD_LENGTH];
- } pdu;
- u8 len;
- struct adv_info *adv = NULL;
- int err;
-
- memset(&pdu, 0, sizeof(pdu));
-
- if (instance) {
- adv = hci_find_adv_instance(hdev, instance);
- if (!adv || !adv->adv_data_changed)
- return 0;
- }
-
- len = eir_create_adv_data(hdev, instance, pdu.data);
-
- pdu.cp.length = len;
- pdu.cp.handle = instance;
- pdu.cp.operation = LE_SET_ADV_DATA_OP_COMPLETE;
- pdu.cp.frag_pref = LE_SET_ADV_DATA_NO_FRAG;
-
- err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_DATA,
- sizeof(pdu.cp) + len, &pdu.cp,
- HCI_CMD_TIMEOUT);
- if (err)
- return err;
-
- /* Update data if the command succeed */
- if (adv) {
- adv->adv_data_changed = false;
- } else {
- memcpy(hdev->adv_data, pdu.data, len);
- hdev->adv_data_len = len;
- }
-
- return 0;
-}
-
-static int hci_set_adv_data_sync(struct hci_dev *hdev, u8 instance)
-{
- struct hci_cp_le_set_adv_data cp;
- u8 len;
-
- memset(&cp, 0, sizeof(cp));
-
- len = eir_create_adv_data(hdev, instance, cp.data);
-
- /* There's nothing to do if the data hasn't changed */
- if (hdev->adv_data_len == len &&
- memcmp(cp.data, hdev->adv_data, len) == 0)
- return 0;
-
- memcpy(hdev->adv_data, cp.data, sizeof(cp.data));
- hdev->adv_data_len = len;
-
- cp.length = len;
-
- return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_ADV_DATA,
- sizeof(cp), &cp, HCI_CMD_TIMEOUT);
-}
-
-int hci_update_adv_data_sync(struct hci_dev *hdev, u8 instance)
-{
- if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
- return 0;
-
- if (ext_adv_capable(hdev))
- return hci_set_ext_adv_data_sync(hdev, instance);
-
- return hci_set_adv_data_sync(hdev, instance);
-}
-
int hci_schedule_adv_instance_sync(struct hci_dev *hdev, u8 instance,
bool force)
{
@@ -6257,6 +6305,7 @@ static int hci_le_ext_directed_advertising_sync(struct hci_dev *hdev,
struct hci_conn *conn)
{
struct hci_cp_le_set_ext_adv_params cp;
+ struct hci_rp_le_set_ext_adv_params rp;
int err;
bdaddr_t random_addr;
u8 own_addr_type;
@@ -6298,8 +6347,12 @@ static int hci_le_ext_directed_advertising_sync(struct hci_dev *hdev,
if (err)
return err;
- err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS,
- sizeof(cp), &cp, HCI_CMD_TIMEOUT);
+ err = hci_set_ext_adv_params_sync(hdev, NULL, &cp, &rp);
+ if (err)
+ return err;
+
+ /* Update adv data as tx power is known now */
+ err = hci_set_ext_adv_data_sync(hdev, cp.handle);
if (err)
return err;
--
[Resend, upstream commit id was missing]
Hi Greg,
I've backported this patch for 6.6. There were some trivial merge
conflicts due to moved coded sections.
Please try it also for older trees. If I get any FAILED notices,
I'll try to prepare patches for specific trees.
regards,
Christian
2.43.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* RE: [6.6.y] Bluetooth: HCI: Set extended advertising data synchronously
2025-07-07 8:02 ` [PATCH 6.6.y] Bluetooth: HCI: Set extended advertising data synchronously Christian Eggers
2025-07-07 8:11 ` Greg KH
@ 2025-07-07 8:24 ` bluez.test.bot
1 sibling, 0 replies; 10+ messages in thread
From: bluez.test.bot @ 2025-07-07 8:24 UTC (permalink / raw)
To: linux-bluetooth, ceggers
[-- Attachment #1: Type: text/plain, Size: 658 bytes --]
This is an automated email and please do not reply to this email.
Dear Submitter,
Thank you for submitting the patches to the linux bluetooth mailing list.
While preparing the CI tests, the patches you submitted couldn't be applied to the current HEAD of the repository.
----- Output -----
error: patch failed: net/bluetooth/hci_event.c:2139
error: net/bluetooth/hci_event.c: patch does not apply
error: patch failed: net/bluetooth/hci_sync.c:1224
error: net/bluetooth/hci_sync.c: patch does not apply
hint: Use 'git am --show-current-patch' to see the failed patch
Please resolve the issue and submit the patches again.
---
Regards,
Linux Bluetooth
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 6.6.y] Bluetooth: HCI: Set extended advertising data synchronously
2025-07-07 8:13 ` [PATCH 6.6.y] " Christian Eggers
@ 2025-07-08 15:36 ` Greg KH
2025-07-08 15:56 ` Luiz Augusto von Dentz
0 siblings, 1 reply; 10+ messages in thread
From: Greg KH @ 2025-07-08 15:36 UTC (permalink / raw)
To: Christian Eggers; +Cc: stable, linux-bluetooth, Luiz Augusto von Dentz
On Mon, Jul 07, 2025 at 10:13:07AM +0200, Christian Eggers wrote:
> Upstream commit 89fb8acc38852116d38d721ad394aad7f2871670
>
> Currently, for controllers with extended advertising, the advertising
> data is set in the asynchronous response handler for extended
> adverstising params. As most advertising settings are performed in a
> synchronous context, the (asynchronous) setting of the advertising data
> is done too late (after enabling the advertising).
>
> Move setting of adverstising data from asynchronous response handler
> into synchronous context to fix ordering of HCI commands.
>
> Signed-off-by: Christian Eggers <ceggers@arri.de>
> Fixes: a0fb3726ba55 ("Bluetooth: Use Set ext adv/scan rsp data if controller supports")
> Cc: stable@vger.kernel.org
> v2: https://lore.kernel.org/linux-bluetooth/20250626115209.17839-1-ceggers@arri.de/
> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
> ---
> net/bluetooth/hci_event.c | 36 -------
> net/bluetooth/hci_sync.c | 213 ++++++++++++++++++++++++--------------
> 2 files changed, 133 insertions(+), 116 deletions(-)
>
> diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
> index 008d14b3d8b8..147766458a6c 100644
> --- a/net/bluetooth/hci_event.c
> +++ b/net/bluetooth/hci_event.c
> @@ -2139,40 +2139,6 @@ static u8 hci_cc_set_adv_param(struct hci_dev *hdev, void *data,
> return rp->status;
> }
>
> -static u8 hci_cc_set_ext_adv_param(struct hci_dev *hdev, void *data,
> - struct sk_buff *skb)
> -{
> - struct hci_rp_le_set_ext_adv_params *rp = data;
> - struct hci_cp_le_set_ext_adv_params *cp;
> - struct adv_info *adv_instance;
> -
> - bt_dev_dbg(hdev, "status 0x%2.2x", rp->status);
> -
> - if (rp->status)
> - return rp->status;
> -
> - cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS);
> - if (!cp)
> - return rp->status;
> -
> - hci_dev_lock(hdev);
> - hdev->adv_addr_type = cp->own_addr_type;
> - if (!cp->handle) {
> - /* Store in hdev for instance 0 */
> - hdev->adv_tx_power = rp->tx_power;
> - } else {
> - adv_instance = hci_find_adv_instance(hdev, cp->handle);
> - if (adv_instance)
> - adv_instance->tx_power = rp->tx_power;
> - }
> - /* Update adv data as tx power is known now */
> - hci_update_adv_data(hdev, cp->handle);
> -
> - hci_dev_unlock(hdev);
> -
> - return rp->status;
> -}
> -
> static u8 hci_cc_read_rssi(struct hci_dev *hdev, void *data,
> struct sk_buff *skb)
> {
> @@ -4153,8 +4119,6 @@ static const struct hci_cc {
> HCI_CC(HCI_OP_LE_READ_NUM_SUPPORTED_ADV_SETS,
> hci_cc_le_read_num_adv_sets,
> sizeof(struct hci_rp_le_read_num_supported_adv_sets)),
> - HCI_CC(HCI_OP_LE_SET_EXT_ADV_PARAMS, hci_cc_set_ext_adv_param,
> - sizeof(struct hci_rp_le_set_ext_adv_params)),
> HCI_CC_STATUS(HCI_OP_LE_SET_EXT_ADV_ENABLE,
> hci_cc_le_set_ext_adv_enable),
> HCI_CC_STATUS(HCI_OP_LE_SET_ADV_SET_RAND_ADDR,
> diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c
> index e92bc4ceb5ad..7b6c8f53e334 100644
> --- a/net/bluetooth/hci_sync.c
> +++ b/net/bluetooth/hci_sync.c
> @@ -1224,9 +1224,129 @@ static int hci_set_adv_set_random_addr_sync(struct hci_dev *hdev, u8 instance,
> sizeof(cp), &cp, HCI_CMD_TIMEOUT);
> }
>
> +static int
> +hci_set_ext_adv_params_sync(struct hci_dev *hdev, struct adv_info *adv,
> + const struct hci_cp_le_set_ext_adv_params *cp,
> + struct hci_rp_le_set_ext_adv_params *rp)
> +{
> + struct sk_buff *skb;
> +
> + skb = __hci_cmd_sync(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS, sizeof(*cp),
> + cp, HCI_CMD_TIMEOUT);
> +
> + /* If command return a status event, skb will be set to -ENODATA */
> + if (skb == ERR_PTR(-ENODATA))
> + return 0;
> +
> + if (IS_ERR(skb)) {
> + bt_dev_err(hdev, "Opcode 0x%4.4x failed: %ld",
> + HCI_OP_LE_SET_EXT_ADV_PARAMS, PTR_ERR(skb));
> + return PTR_ERR(skb);
> + }
> +
> + if (skb->len != sizeof(*rp)) {
> + bt_dev_err(hdev, "Invalid response length for 0x%4.4x: %u",
> + HCI_OP_LE_SET_EXT_ADV_PARAMS, skb->len);
> + kfree_skb(skb);
> + return -EIO;
> + }
> +
> + memcpy(rp, skb->data, sizeof(*rp));
> + kfree_skb(skb);
> +
> + if (!rp->status) {
> + hdev->adv_addr_type = cp->own_addr_type;
> + if (!cp->handle) {
> + /* Store in hdev for instance 0 */
> + hdev->adv_tx_power = rp->tx_power;
> + } else if (adv) {
> + adv->tx_power = rp->tx_power;
> + }
> + }
> +
> + return rp->status;
> +}
> +
> +static int hci_set_ext_adv_data_sync(struct hci_dev *hdev, u8 instance)
> +{
> + struct {
> + struct hci_cp_le_set_ext_adv_data cp;
> + u8 data[HCI_MAX_EXT_AD_LENGTH];
> + } pdu;
> + u8 len;
> + struct adv_info *adv = NULL;
> + int err;
> +
> + memset(&pdu, 0, sizeof(pdu));
> +
> + if (instance) {
> + adv = hci_find_adv_instance(hdev, instance);
> + if (!adv || !adv->adv_data_changed)
> + return 0;
> + }
> +
> + len = eir_create_adv_data(hdev, instance, pdu.data);
> +
> + pdu.cp.length = len;
> + pdu.cp.handle = instance;
> + pdu.cp.operation = LE_SET_ADV_DATA_OP_COMPLETE;
> + pdu.cp.frag_pref = LE_SET_ADV_DATA_NO_FRAG;
> +
> + err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_DATA,
> + sizeof(pdu.cp) + len, &pdu.cp,
> + HCI_CMD_TIMEOUT);
> + if (err)
> + return err;
> +
> + /* Update data if the command succeed */
> + if (adv) {
> + adv->adv_data_changed = false;
> + } else {
> + memcpy(hdev->adv_data, pdu.data, len);
> + hdev->adv_data_len = len;
> + }
> +
> + return 0;
> +}
> +
> +static int hci_set_adv_data_sync(struct hci_dev *hdev, u8 instance)
> +{
> + struct hci_cp_le_set_adv_data cp;
> + u8 len;
> +
> + memset(&cp, 0, sizeof(cp));
> +
> + len = eir_create_adv_data(hdev, instance, cp.data);
> +
> + /* There's nothing to do if the data hasn't changed */
> + if (hdev->adv_data_len == len &&
> + memcmp(cp.data, hdev->adv_data, len) == 0)
> + return 0;
> +
> + memcpy(hdev->adv_data, cp.data, sizeof(cp.data));
> + hdev->adv_data_len = len;
> +
> + cp.length = len;
> +
> + return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_ADV_DATA,
> + sizeof(cp), &cp, HCI_CMD_TIMEOUT);
> +}
> +
> +int hci_update_adv_data_sync(struct hci_dev *hdev, u8 instance)
> +{
> + if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
> + return 0;
> +
> + if (ext_adv_capable(hdev))
> + return hci_set_ext_adv_data_sync(hdev, instance);
> +
> + return hci_set_adv_data_sync(hdev, instance);
> +}
> +
> int hci_setup_ext_adv_instance_sync(struct hci_dev *hdev, u8 instance)
> {
> struct hci_cp_le_set_ext_adv_params cp;
> + struct hci_rp_le_set_ext_adv_params rp;
> bool connectable;
> u32 flags;
> bdaddr_t random_addr;
> @@ -1333,8 +1453,12 @@ int hci_setup_ext_adv_instance_sync(struct hci_dev *hdev, u8 instance)
> cp.secondary_phy = HCI_ADV_PHY_1M;
> }
>
> - err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS,
> - sizeof(cp), &cp, HCI_CMD_TIMEOUT);
> + err = hci_set_ext_adv_params_sync(hdev, adv, &cp, &rp);
> + if (err)
> + return err;
> +
> + /* Update adv data as tx power is known now */
> + err = hci_set_ext_adv_data_sync(hdev, cp.handle);
> if (err)
> return err;
>
> @@ -1859,82 +1983,6 @@ int hci_le_terminate_big_sync(struct hci_dev *hdev, u8 handle, u8 reason)
> sizeof(cp), &cp, HCI_CMD_TIMEOUT);
> }
>
> -static int hci_set_ext_adv_data_sync(struct hci_dev *hdev, u8 instance)
> -{
> - struct {
> - struct hci_cp_le_set_ext_adv_data cp;
> - u8 data[HCI_MAX_EXT_AD_LENGTH];
> - } pdu;
> - u8 len;
> - struct adv_info *adv = NULL;
> - int err;
> -
> - memset(&pdu, 0, sizeof(pdu));
> -
> - if (instance) {
> - adv = hci_find_adv_instance(hdev, instance);
> - if (!adv || !adv->adv_data_changed)
> - return 0;
> - }
> -
> - len = eir_create_adv_data(hdev, instance, pdu.data);
> -
> - pdu.cp.length = len;
> - pdu.cp.handle = instance;
> - pdu.cp.operation = LE_SET_ADV_DATA_OP_COMPLETE;
> - pdu.cp.frag_pref = LE_SET_ADV_DATA_NO_FRAG;
> -
> - err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_DATA,
> - sizeof(pdu.cp) + len, &pdu.cp,
> - HCI_CMD_TIMEOUT);
> - if (err)
> - return err;
> -
> - /* Update data if the command succeed */
> - if (adv) {
> - adv->adv_data_changed = false;
> - } else {
> - memcpy(hdev->adv_data, pdu.data, len);
> - hdev->adv_data_len = len;
> - }
> -
> - return 0;
> -}
> -
> -static int hci_set_adv_data_sync(struct hci_dev *hdev, u8 instance)
> -{
> - struct hci_cp_le_set_adv_data cp;
> - u8 len;
> -
> - memset(&cp, 0, sizeof(cp));
> -
> - len = eir_create_adv_data(hdev, instance, cp.data);
> -
> - /* There's nothing to do if the data hasn't changed */
> - if (hdev->adv_data_len == len &&
> - memcmp(cp.data, hdev->adv_data, len) == 0)
> - return 0;
> -
> - memcpy(hdev->adv_data, cp.data, sizeof(cp.data));
> - hdev->adv_data_len = len;
> -
> - cp.length = len;
> -
> - return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_ADV_DATA,
> - sizeof(cp), &cp, HCI_CMD_TIMEOUT);
> -}
> -
> -int hci_update_adv_data_sync(struct hci_dev *hdev, u8 instance)
> -{
> - if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
> - return 0;
> -
> - if (ext_adv_capable(hdev))
> - return hci_set_ext_adv_data_sync(hdev, instance);
> -
> - return hci_set_adv_data_sync(hdev, instance);
> -}
> -
> int hci_schedule_adv_instance_sync(struct hci_dev *hdev, u8 instance,
> bool force)
> {
> @@ -6257,6 +6305,7 @@ static int hci_le_ext_directed_advertising_sync(struct hci_dev *hdev,
> struct hci_conn *conn)
> {
> struct hci_cp_le_set_ext_adv_params cp;
> + struct hci_rp_le_set_ext_adv_params rp;
> int err;
> bdaddr_t random_addr;
> u8 own_addr_type;
> @@ -6298,8 +6347,12 @@ static int hci_le_ext_directed_advertising_sync(struct hci_dev *hdev,
> if (err)
> return err;
>
> - err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS,
> - sizeof(cp), &cp, HCI_CMD_TIMEOUT);
> + err = hci_set_ext_adv_params_sync(hdev, NULL, &cp, &rp);
> + if (err)
> + return err;
> +
> + /* Update adv data as tx power is known now */
> + err = hci_set_ext_adv_data_sync(hdev, cp.handle);
> if (err)
> return err;
>
> --
> [Resend, upstream commit id was missing]
>
> Hi Greg,
>
> I've backported this patch for 6.6. There were some trivial merge
> conflicts due to moved coded sections.
>
> Please try it also for older trees. If I get any FAILED notices,
> I'll try to prepare patches for specific trees.
You made major changes here from the upstream version, PLEASE document
them properly in the changelog. Also, can you test it to verify that it
works and doesn't blow up the stack like I'm guessing it might?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 6.6.y] Bluetooth: HCI: Set extended advertising data synchronously
2025-07-08 15:36 ` Greg KH
@ 2025-07-08 15:56 ` Luiz Augusto von Dentz
2025-07-08 21:14 ` Christian Eggers
0 siblings, 1 reply; 10+ messages in thread
From: Luiz Augusto von Dentz @ 2025-07-08 15:56 UTC (permalink / raw)
To: Greg KH; +Cc: Christian Eggers, stable, linux-bluetooth, Luiz Augusto von Dentz
Hi Christian,
On Tue, Jul 8, 2025 at 11:39 AM Greg KH <gregkh@linuxfoundation.org> wrote:
>
> On Mon, Jul 07, 2025 at 10:13:07AM +0200, Christian Eggers wrote:
> > Upstream commit 89fb8acc38852116d38d721ad394aad7f2871670
> >
> > Currently, for controllers with extended advertising, the advertising
> > data is set in the asynchronous response handler for extended
> > adverstising params. As most advertising settings are performed in a
> > synchronous context, the (asynchronous) setting of the advertising data
> > is done too late (after enabling the advertising).
> >
> > Move setting of adverstising data from asynchronous response handler
> > into synchronous context to fix ordering of HCI commands.
> >
> > Signed-off-by: Christian Eggers <ceggers@arri.de>
> > Fixes: a0fb3726ba55 ("Bluetooth: Use Set ext adv/scan rsp data if controller supports")
> > Cc: stable@vger.kernel.org
> > v2: https://lore.kernel.org/linux-bluetooth/20250626115209.17839-1-ceggers@arri.de/
> > Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
> > ---
> > net/bluetooth/hci_event.c | 36 -------
> > net/bluetooth/hci_sync.c | 213 ++++++++++++++++++++++++--------------
> > 2 files changed, 133 insertions(+), 116 deletions(-)
> >
> > diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
> > index 008d14b3d8b8..147766458a6c 100644
> > --- a/net/bluetooth/hci_event.c
> > +++ b/net/bluetooth/hci_event.c
> > @@ -2139,40 +2139,6 @@ static u8 hci_cc_set_adv_param(struct hci_dev *hdev, void *data,
> > return rp->status;
> > }
> >
> > -static u8 hci_cc_set_ext_adv_param(struct hci_dev *hdev, void *data,
> > - struct sk_buff *skb)
> > -{
> > - struct hci_rp_le_set_ext_adv_params *rp = data;
> > - struct hci_cp_le_set_ext_adv_params *cp;
> > - struct adv_info *adv_instance;
> > -
> > - bt_dev_dbg(hdev, "status 0x%2.2x", rp->status);
> > -
> > - if (rp->status)
> > - return rp->status;
> > -
> > - cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS);
> > - if (!cp)
> > - return rp->status;
> > -
> > - hci_dev_lock(hdev);
> > - hdev->adv_addr_type = cp->own_addr_type;
> > - if (!cp->handle) {
> > - /* Store in hdev for instance 0 */
> > - hdev->adv_tx_power = rp->tx_power;
> > - } else {
> > - adv_instance = hci_find_adv_instance(hdev, cp->handle);
> > - if (adv_instance)
> > - adv_instance->tx_power = rp->tx_power;
> > - }
> > - /* Update adv data as tx power is known now */
> > - hci_update_adv_data(hdev, cp->handle);
> > -
> > - hci_dev_unlock(hdev);
> > -
> > - return rp->status;
> > -}
> > -
> > static u8 hci_cc_read_rssi(struct hci_dev *hdev, void *data,
> > struct sk_buff *skb)
> > {
> > @@ -4153,8 +4119,6 @@ static const struct hci_cc {
> > HCI_CC(HCI_OP_LE_READ_NUM_SUPPORTED_ADV_SETS,
> > hci_cc_le_read_num_adv_sets,
> > sizeof(struct hci_rp_le_read_num_supported_adv_sets)),
> > - HCI_CC(HCI_OP_LE_SET_EXT_ADV_PARAMS, hci_cc_set_ext_adv_param,
> > - sizeof(struct hci_rp_le_set_ext_adv_params)),
> > HCI_CC_STATUS(HCI_OP_LE_SET_EXT_ADV_ENABLE,
> > hci_cc_le_set_ext_adv_enable),
> > HCI_CC_STATUS(HCI_OP_LE_SET_ADV_SET_RAND_ADDR,
> > diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c
> > index e92bc4ceb5ad..7b6c8f53e334 100644
> > --- a/net/bluetooth/hci_sync.c
> > +++ b/net/bluetooth/hci_sync.c
> > @@ -1224,9 +1224,129 @@ static int hci_set_adv_set_random_addr_sync(struct hci_dev *hdev, u8 instance,
> > sizeof(cp), &cp, HCI_CMD_TIMEOUT);
> > }
> >
> > +static int
> > +hci_set_ext_adv_params_sync(struct hci_dev *hdev, struct adv_info *adv,
> > + const struct hci_cp_le_set_ext_adv_params *cp,
> > + struct hci_rp_le_set_ext_adv_params *rp)
> > +{
> > + struct sk_buff *skb;
> > +
> > + skb = __hci_cmd_sync(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS, sizeof(*cp),
> > + cp, HCI_CMD_TIMEOUT);
> > +
> > + /* If command return a status event, skb will be set to -ENODATA */
> > + if (skb == ERR_PTR(-ENODATA))
> > + return 0;
> > +
> > + if (IS_ERR(skb)) {
> > + bt_dev_err(hdev, "Opcode 0x%4.4x failed: %ld",
> > + HCI_OP_LE_SET_EXT_ADV_PARAMS, PTR_ERR(skb));
> > + return PTR_ERR(skb);
> > + }
> > +
> > + if (skb->len != sizeof(*rp)) {
> > + bt_dev_err(hdev, "Invalid response length for 0x%4.4x: %u",
> > + HCI_OP_LE_SET_EXT_ADV_PARAMS, skb->len);
> > + kfree_skb(skb);
> > + return -EIO;
> > + }
> > +
> > + memcpy(rp, skb->data, sizeof(*rp));
> > + kfree_skb(skb);
> > +
> > + if (!rp->status) {
> > + hdev->adv_addr_type = cp->own_addr_type;
> > + if (!cp->handle) {
> > + /* Store in hdev for instance 0 */
> > + hdev->adv_tx_power = rp->tx_power;
> > + } else if (adv) {
> > + adv->tx_power = rp->tx_power;
> > + }
> > + }
> > +
> > + return rp->status;
> > +}
> > +
> > +static int hci_set_ext_adv_data_sync(struct hci_dev *hdev, u8 instance)
> > +{
> > + struct {
> > + struct hci_cp_le_set_ext_adv_data cp;
> > + u8 data[HCI_MAX_EXT_AD_LENGTH];
> > + } pdu;
> > + u8 len;
> > + struct adv_info *adv = NULL;
> > + int err;
> > +
> > + memset(&pdu, 0, sizeof(pdu));
> > +
> > + if (instance) {
> > + adv = hci_find_adv_instance(hdev, instance);
> > + if (!adv || !adv->adv_data_changed)
> > + return 0;
> > + }
> > +
> > + len = eir_create_adv_data(hdev, instance, pdu.data);
> > +
> > + pdu.cp.length = len;
> > + pdu.cp.handle = instance;
> > + pdu.cp.operation = LE_SET_ADV_DATA_OP_COMPLETE;
> > + pdu.cp.frag_pref = LE_SET_ADV_DATA_NO_FRAG;
> > +
> > + err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_DATA,
> > + sizeof(pdu.cp) + len, &pdu.cp,
> > + HCI_CMD_TIMEOUT);
> > + if (err)
> > + return err;
> > +
> > + /* Update data if the command succeed */
> > + if (adv) {
> > + adv->adv_data_changed = false;
> > + } else {
> > + memcpy(hdev->adv_data, pdu.data, len);
> > + hdev->adv_data_len = len;
> > + }
> > +
> > + return 0;
> > +}
> > +
> > +static int hci_set_adv_data_sync(struct hci_dev *hdev, u8 instance)
> > +{
> > + struct hci_cp_le_set_adv_data cp;
> > + u8 len;
> > +
> > + memset(&cp, 0, sizeof(cp));
> > +
> > + len = eir_create_adv_data(hdev, instance, cp.data);
> > +
> > + /* There's nothing to do if the data hasn't changed */
> > + if (hdev->adv_data_len == len &&
> > + memcmp(cp.data, hdev->adv_data, len) == 0)
> > + return 0;
> > +
> > + memcpy(hdev->adv_data, cp.data, sizeof(cp.data));
> > + hdev->adv_data_len = len;
> > +
> > + cp.length = len;
> > +
> > + return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_ADV_DATA,
> > + sizeof(cp), &cp, HCI_CMD_TIMEOUT);
> > +}
> > +
> > +int hci_update_adv_data_sync(struct hci_dev *hdev, u8 instance)
> > +{
> > + if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
> > + return 0;
> > +
> > + if (ext_adv_capable(hdev))
> > + return hci_set_ext_adv_data_sync(hdev, instance);
> > +
> > + return hci_set_adv_data_sync(hdev, instance);
> > +}
> > +
> > int hci_setup_ext_adv_instance_sync(struct hci_dev *hdev, u8 instance)
> > {
> > struct hci_cp_le_set_ext_adv_params cp;
> > + struct hci_rp_le_set_ext_adv_params rp;
> > bool connectable;
> > u32 flags;
> > bdaddr_t random_addr;
> > @@ -1333,8 +1453,12 @@ int hci_setup_ext_adv_instance_sync(struct hci_dev *hdev, u8 instance)
> > cp.secondary_phy = HCI_ADV_PHY_1M;
> > }
> >
> > - err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS,
> > - sizeof(cp), &cp, HCI_CMD_TIMEOUT);
> > + err = hci_set_ext_adv_params_sync(hdev, adv, &cp, &rp);
> > + if (err)
> > + return err;
> > +
> > + /* Update adv data as tx power is known now */
> > + err = hci_set_ext_adv_data_sync(hdev, cp.handle);
> > if (err)
> > return err;
> >
> > @@ -1859,82 +1983,6 @@ int hci_le_terminate_big_sync(struct hci_dev *hdev, u8 handle, u8 reason)
> > sizeof(cp), &cp, HCI_CMD_TIMEOUT);
> > }
> >
> > -static int hci_set_ext_adv_data_sync(struct hci_dev *hdev, u8 instance)
> > -{
> > - struct {
> > - struct hci_cp_le_set_ext_adv_data cp;
> > - u8 data[HCI_MAX_EXT_AD_LENGTH];
> > - } pdu;
> > - u8 len;
> > - struct adv_info *adv = NULL;
> > - int err;
> > -
> > - memset(&pdu, 0, sizeof(pdu));
> > -
> > - if (instance) {
> > - adv = hci_find_adv_instance(hdev, instance);
> > - if (!adv || !adv->adv_data_changed)
> > - return 0;
> > - }
> > -
> > - len = eir_create_adv_data(hdev, instance, pdu.data);
> > -
> > - pdu.cp.length = len;
> > - pdu.cp.handle = instance;
> > - pdu.cp.operation = LE_SET_ADV_DATA_OP_COMPLETE;
> > - pdu.cp.frag_pref = LE_SET_ADV_DATA_NO_FRAG;
> > -
> > - err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_DATA,
> > - sizeof(pdu.cp) + len, &pdu.cp,
> > - HCI_CMD_TIMEOUT);
> > - if (err)
> > - return err;
> > -
> > - /* Update data if the command succeed */
> > - if (adv) {
> > - adv->adv_data_changed = false;
> > - } else {
> > - memcpy(hdev->adv_data, pdu.data, len);
> > - hdev->adv_data_len = len;
> > - }
> > -
> > - return 0;
> > -}
> > -
> > -static int hci_set_adv_data_sync(struct hci_dev *hdev, u8 instance)
> > -{
> > - struct hci_cp_le_set_adv_data cp;
> > - u8 len;
> > -
> > - memset(&cp, 0, sizeof(cp));
> > -
> > - len = eir_create_adv_data(hdev, instance, cp.data);
> > -
> > - /* There's nothing to do if the data hasn't changed */
> > - if (hdev->adv_data_len == len &&
> > - memcmp(cp.data, hdev->adv_data, len) == 0)
> > - return 0;
> > -
> > - memcpy(hdev->adv_data, cp.data, sizeof(cp.data));
> > - hdev->adv_data_len = len;
> > -
> > - cp.length = len;
> > -
> > - return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_ADV_DATA,
> > - sizeof(cp), &cp, HCI_CMD_TIMEOUT);
> > -}
> > -
> > -int hci_update_adv_data_sync(struct hci_dev *hdev, u8 instance)
> > -{
> > - if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
> > - return 0;
> > -
> > - if (ext_adv_capable(hdev))
> > - return hci_set_ext_adv_data_sync(hdev, instance);
> > -
> > - return hci_set_adv_data_sync(hdev, instance);
> > -}
> > -
> > int hci_schedule_adv_instance_sync(struct hci_dev *hdev, u8 instance,
> > bool force)
> > {
> > @@ -6257,6 +6305,7 @@ static int hci_le_ext_directed_advertising_sync(struct hci_dev *hdev,
> > struct hci_conn *conn)
> > {
> > struct hci_cp_le_set_ext_adv_params cp;
> > + struct hci_rp_le_set_ext_adv_params rp;
> > int err;
> > bdaddr_t random_addr;
> > u8 own_addr_type;
> > @@ -6298,8 +6347,12 @@ static int hci_le_ext_directed_advertising_sync(struct hci_dev *hdev,
> > if (err)
> > return err;
> >
> > - err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS,
> > - sizeof(cp), &cp, HCI_CMD_TIMEOUT);
> > + err = hci_set_ext_adv_params_sync(hdev, NULL, &cp, &rp);
> > + if (err)
> > + return err;
> > +
> > + /* Update adv data as tx power is known now */
> > + err = hci_set_ext_adv_data_sync(hdev, cp.handle);
> > if (err)
> > return err;
> >
> > --
> > [Resend, upstream commit id was missing]
> >
> > Hi Greg,
> >
> > I've backported this patch for 6.6. There were some trivial merge
> > conflicts due to moved coded sections.
> >
> > Please try it also for older trees. If I get any FAILED notices,
> > I'll try to prepare patches for specific trees.
>
> You made major changes here from the upstream version, PLEASE document
> them properly in the changelog. Also, can you test it to verify that it
> works and doesn't blow up the stack like I'm guessing it might?
@Christian Eggers try running resulting image with mgmt-tester and the
following tests:
Add Ext Advertising - Invalid Params 1 (Multiple Phys)
Add Ext Advertising - Invalid Params 2 (Multiple PHYs)
Add Ext Advertising - Invalid Params 3 (Multiple PHYs)
Add Ext Advertising - Invalid Params 4 (Multiple PHYs)
Add Ext Advertising - Success 1 (Powered, Add Adv Inst)
Add Ext Advertising - Success 2 (!Powered, Add Adv Inst)
Add Ext Advertising - Success 3 (!Powered, Adv Enable)
Add Ext Advertising - Success 4 (Set Adv on override)
Add Ext Advertising - Success 5 (Set Adv off override)
Add Ext Advertising - Success 6 (Scan Rsp Dta, Adv ok)
Add Ext Advertising - Success 7 (Scan Rsp Dta, Scan ok)
Add Ext Advertising - Success 8 (Connectable Flag)
Add Ext Advertising - Success 9 (General Discov Flag)
Add Ext Advertising - Success 10 (Limited Discov Flag)
Add Ext Advertising - Success 11 (Managed Flags)
Add Ext Advertising - Success 12 (TX Power Flag)
Add Ext Advertising - Success 13 (ADV_SCAN_IND)
Add Ext Advertising - Success 14 (ADV_NONCONN_IND)
Add Ext Advertising - Success 15 (ADV_IND)
Add Ext Advertising - Success 16 (Connectable -> on)
Add Ext Advertising - Success 17 (Connectable -> off)
Add Ext Advertising - Success 20 (Add Adv override)
Add Ext Advertising - Success 21 (Timeout expires)
Add Ext Advertising - Success 22 (LE -> off, Remove)
Add Ext Advertising - Success (Empty ScRsp)
Add Ext Advertising - Success (ScRsp only)
Add Ext Advertising - Invalid Params (ScRsp too long)
Add Ext Advertising - Success (ScRsp appear)
Add Ext Advertising - Invalid Params (ScRsp appear long)
Add Ext Advertising - Success (Appear is null)
Add Ext Advertising - Success (Name is null)
Add Ext Advertising - Success (Complete name)
Add Ext Advertising - Success (Shortened name)
Add Ext Advertising - Success (Short name)
Add Ext Advertising - Success (Name + data)
Add Ext Advertising - Invalid Params (Name + data)
Add Ext Advertising - Success (Name+data+appear)
Add Ext Advertising - Success (PHY -> 1M)
Add Ext Advertising - Success (PHY -> 2M)
Add Ext Advertising - Success (PHY -> Coded)
Add Ext Advertising - Success (Ext Pdu Scannable)
Add Ext Advertising - Success (Ext Pdu Connectable)
Add Ext Advertising - Success (Ext Pdu Conn Scan)
Add Ext Advertising - Success (1m Connectable -> on)
Add Ext Advertising - Success (1m Connectable -> off)
This should exercise the code you are changing, I assume they should
all pass with 6.6.y but perhaps you can discard if there were
something not passing since it can be the result of mgmt-tester
changes that are not backward compatible.
> thanks,
>
> greg k-h
>
--
Luiz Augusto von Dentz
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 6.6.y] Bluetooth: HCI: Set extended advertising data synchronously
2025-07-08 15:56 ` Luiz Augusto von Dentz
@ 2025-07-08 21:14 ` Christian Eggers
2025-07-09 6:19 ` Greg KH
0 siblings, 1 reply; 10+ messages in thread
From: Christian Eggers @ 2025-07-08 21:14 UTC (permalink / raw)
To: Greg KH, Luiz Augusto von Dentz, linux-bluetooth; +Cc: stable
Hi Luiz, hi Greg,
On Tuesday, 8 July 2025, 17:56:07 CEST, Luiz Augusto von Dentz wrote:
> Hi Christian,
>
> On Tue, Jul 8, 2025 at 11:39 AM Greg KH <gregkh@linuxfoundation.org> wrote:
> >
> > On Mon, Jul 07, 2025 at 10:13:07AM +0200, Christian Eggers wrote:
> > > Upstream commit 89fb8acc38852116d38d721ad394aad7f2871670
> > >
> > > Currently, for controllers with extended advertising, the advertising
> > > data is set in the asynchronous response handler for extended
> > > adverstising params. As most advertising settings are performed in a
> > > synchronous context, the (asynchronous) setting of the advertising data
> > > is done too late (after enabling the advertising).
> > >
> > > Move setting of adverstising data from asynchronous response handler
> > > into synchronous context to fix ordering of HCI commands.
> > >
> > > Signed-off-by: Christian Eggers <ceggers@arri.de>
> > > Fixes: a0fb3726ba55 ("Bluetooth: Use Set ext adv/scan rsp data if controller supports")
> > > Cc: stable@vger.kernel.org
> > > v2: https://lore.kernel.org/linux-bluetooth/20250626115209.17839-1-ceggers@arri.de/
> > > Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
> > > ---
> > > net/bluetooth/hci_event.c | 36 -------
> > > net/bluetooth/hci_sync.c | 213 ++++++++++++++++++++++++--------------
> > > 2 files changed, 133 insertions(+), 116 deletions(-)
> > >
> > > diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
> > > index 008d14b3d8b8..147766458a6c 100644
> > > --- a/net/bluetooth/hci_event.c
> > > +++ b/net/bluetooth/hci_event.c
> > > @@ -2139,40 +2139,6 @@ static u8 hci_cc_set_adv_param(struct hci_dev *hdev, void *data,
> > > return rp->status;
> > > }
> > >
> > > -static u8 hci_cc_set_ext_adv_param(struct hci_dev *hdev, void *data,
> > > - struct sk_buff *skb)
> > > -{
> > > - struct hci_rp_le_set_ext_adv_params *rp = data;
> > > - struct hci_cp_le_set_ext_adv_params *cp;
> > > - struct adv_info *adv_instance;
> > > -
> > > - bt_dev_dbg(hdev, "status 0x%2.2x", rp->status);
> > > -
> > > - if (rp->status)
> > > - return rp->status;
> > > -
> > > - cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS);
> > > - if (!cp)
> > > - return rp->status;
> > > -
> > > - hci_dev_lock(hdev);
> > > - hdev->adv_addr_type = cp->own_addr_type;
> > > - if (!cp->handle) {
> > > - /* Store in hdev for instance 0 */
> > > - hdev->adv_tx_power = rp->tx_power;
> > > - } else {
> > > - adv_instance = hci_find_adv_instance(hdev, cp->handle);
> > > - if (adv_instance)
> > > - adv_instance->tx_power = rp->tx_power;
> > > - }
> > > - /* Update adv data as tx power is known now */
> > > - hci_update_adv_data(hdev, cp->handle);
> > > -
> > > - hci_dev_unlock(hdev);
> > > -
> > > - return rp->status;
> > > -}
> > > -
> > > static u8 hci_cc_read_rssi(struct hci_dev *hdev, void *data,
> > > struct sk_buff *skb)
> > > {
> > > @@ -4153,8 +4119,6 @@ static const struct hci_cc {
> > > HCI_CC(HCI_OP_LE_READ_NUM_SUPPORTED_ADV_SETS,
> > > hci_cc_le_read_num_adv_sets,
> > > sizeof(struct hci_rp_le_read_num_supported_adv_sets)),
> > > - HCI_CC(HCI_OP_LE_SET_EXT_ADV_PARAMS, hci_cc_set_ext_adv_param,
> > > - sizeof(struct hci_rp_le_set_ext_adv_params)),
> > > HCI_CC_STATUS(HCI_OP_LE_SET_EXT_ADV_ENABLE,
> > > hci_cc_le_set_ext_adv_enable),
> > > HCI_CC_STATUS(HCI_OP_LE_SET_ADV_SET_RAND_ADDR,
> > > diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c
> > > index e92bc4ceb5ad..7b6c8f53e334 100644
> > > --- a/net/bluetooth/hci_sync.c
> > > +++ b/net/bluetooth/hci_sync.c
> > > @@ -1224,9 +1224,129 @@ static int hci_set_adv_set_random_addr_sync(struct hci_dev *hdev, u8 instance,
> > > sizeof(cp), &cp, HCI_CMD_TIMEOUT);
> > > }
> > >
> > > +static int
> > > +hci_set_ext_adv_params_sync(struct hci_dev *hdev, struct adv_info *adv,
> > > + const struct hci_cp_le_set_ext_adv_params *cp,
> > > + struct hci_rp_le_set_ext_adv_params *rp)
> > > +{
> > > + struct sk_buff *skb;
> > > +
> > > + skb = __hci_cmd_sync(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS, sizeof(*cp),
> > > + cp, HCI_CMD_TIMEOUT);
> > > +
> > > + /* If command return a status event, skb will be set to -ENODATA */
> > > + if (skb == ERR_PTR(-ENODATA))
> > > + return 0;
> > > +
> > > + if (IS_ERR(skb)) {
> > > + bt_dev_err(hdev, "Opcode 0x%4.4x failed: %ld",
> > > + HCI_OP_LE_SET_EXT_ADV_PARAMS, PTR_ERR(skb));
> > > + return PTR_ERR(skb);
> > > + }
> > > +
> > > + if (skb->len != sizeof(*rp)) {
> > > + bt_dev_err(hdev, "Invalid response length for 0x%4.4x: %u",
> > > + HCI_OP_LE_SET_EXT_ADV_PARAMS, skb->len);
> > > + kfree_skb(skb);
> > > + return -EIO;
> > > + }
> > > +
> > > + memcpy(rp, skb->data, sizeof(*rp));
> > > + kfree_skb(skb);
> > > +
> > > + if (!rp->status) {
> > > + hdev->adv_addr_type = cp->own_addr_type;
> > > + if (!cp->handle) {
> > > + /* Store in hdev for instance 0 */
> > > + hdev->adv_tx_power = rp->tx_power;
> > > + } else if (adv) {
> > > + adv->tx_power = rp->tx_power;
> > > + }
> > > + }
> > > +
> > > + return rp->status;
> > > +}
> > > +
> > > +static int hci_set_ext_adv_data_sync(struct hci_dev *hdev, u8 instance)
> > > +{
> > > + struct {
> > > + struct hci_cp_le_set_ext_adv_data cp;
> > > + u8 data[HCI_MAX_EXT_AD_LENGTH];
> > > + } pdu;
> > > + u8 len;
> > > + struct adv_info *adv = NULL;
> > > + int err;
> > > +
> > > + memset(&pdu, 0, sizeof(pdu));
> > > +
> > > + if (instance) {
> > > + adv = hci_find_adv_instance(hdev, instance);
> > > + if (!adv || !adv->adv_data_changed)
> > > + return 0;
> > > + }
> > > +
> > > + len = eir_create_adv_data(hdev, instance, pdu.data);
> > > +
> > > + pdu.cp.length = len;
> > > + pdu.cp.handle = instance;
> > > + pdu.cp.operation = LE_SET_ADV_DATA_OP_COMPLETE;
> > > + pdu.cp.frag_pref = LE_SET_ADV_DATA_NO_FRAG;
> > > +
> > > + err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_DATA,
> > > + sizeof(pdu.cp) + len, &pdu.cp,
> > > + HCI_CMD_TIMEOUT);
> > > + if (err)
> > > + return err;
> > > +
> > > + /* Update data if the command succeed */
> > > + if (adv) {
> > > + adv->adv_data_changed = false;
> > > + } else {
> > > + memcpy(hdev->adv_data, pdu.data, len);
> > > + hdev->adv_data_len = len;
> > > + }
> > > +
> > > + return 0;
> > > +}
> > > +
> > > +static int hci_set_adv_data_sync(struct hci_dev *hdev, u8 instance)
> > > +{
> > > + struct hci_cp_le_set_adv_data cp;
> > > + u8 len;
> > > +
> > > + memset(&cp, 0, sizeof(cp));
> > > +
> > > + len = eir_create_adv_data(hdev, instance, cp.data);
> > > +
> > > + /* There's nothing to do if the data hasn't changed */
> > > + if (hdev->adv_data_len == len &&
> > > + memcmp(cp.data, hdev->adv_data, len) == 0)
> > > + return 0;
> > > +
> > > + memcpy(hdev->adv_data, cp.data, sizeof(cp.data));
> > > + hdev->adv_data_len = len;
> > > +
> > > + cp.length = len;
> > > +
> > > + return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_ADV_DATA,
> > > + sizeof(cp), &cp, HCI_CMD_TIMEOUT);
> > > +}
> > > +
> > > +int hci_update_adv_data_sync(struct hci_dev *hdev, u8 instance)
> > > +{
> > > + if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
> > > + return 0;
> > > +
> > > + if (ext_adv_capable(hdev))
> > > + return hci_set_ext_adv_data_sync(hdev, instance);
> > > +
> > > + return hci_set_adv_data_sync(hdev, instance);
> > > +}
> > > +
> > > int hci_setup_ext_adv_instance_sync(struct hci_dev *hdev, u8 instance)
> > > {
> > > struct hci_cp_le_set_ext_adv_params cp;
> > > + struct hci_rp_le_set_ext_adv_params rp;
> > > bool connectable;
> > > u32 flags;
> > > bdaddr_t random_addr;
> > > @@ -1333,8 +1453,12 @@ int hci_setup_ext_adv_instance_sync(struct hci_dev *hdev, u8 instance)
> > > cp.secondary_phy = HCI_ADV_PHY_1M;
> > > }
> > >
> > > - err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS,
> > > - sizeof(cp), &cp, HCI_CMD_TIMEOUT);
> > > + err = hci_set_ext_adv_params_sync(hdev, adv, &cp, &rp);
> > > + if (err)
> > > + return err;
> > > +
> > > + /* Update adv data as tx power is known now */
> > > + err = hci_set_ext_adv_data_sync(hdev, cp.handle);
> > > if (err)
> > > return err;
> > >
> > > @@ -1859,82 +1983,6 @@ int hci_le_terminate_big_sync(struct hci_dev *hdev, u8 handle, u8 reason)
> > > sizeof(cp), &cp, HCI_CMD_TIMEOUT);
> > > }
> > >
> > > -static int hci_set_ext_adv_data_sync(struct hci_dev *hdev, u8 instance)
> > > -{
> > > - struct {
> > > - struct hci_cp_le_set_ext_adv_data cp;
> > > - u8 data[HCI_MAX_EXT_AD_LENGTH];
> > > - } pdu;
> > > - u8 len;
> > > - struct adv_info *adv = NULL;
> > > - int err;
> > > -
> > > - memset(&pdu, 0, sizeof(pdu));
> > > -
> > > - if (instance) {
> > > - adv = hci_find_adv_instance(hdev, instance);
> > > - if (!adv || !adv->adv_data_changed)
> > > - return 0;
> > > - }
> > > -
> > > - len = eir_create_adv_data(hdev, instance, pdu.data);
> > > -
> > > - pdu.cp.length = len;
> > > - pdu.cp.handle = instance;
> > > - pdu.cp.operation = LE_SET_ADV_DATA_OP_COMPLETE;
> > > - pdu.cp.frag_pref = LE_SET_ADV_DATA_NO_FRAG;
> > > -
> > > - err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_DATA,
> > > - sizeof(pdu.cp) + len, &pdu.cp,
> > > - HCI_CMD_TIMEOUT);
> > > - if (err)
> > > - return err;
> > > -
> > > - /* Update data if the command succeed */
> > > - if (adv) {
> > > - adv->adv_data_changed = false;
> > > - } else {
> > > - memcpy(hdev->adv_data, pdu.data, len);
> > > - hdev->adv_data_len = len;
> > > - }
> > > -
> > > - return 0;
> > > -}
> > > -
> > > -static int hci_set_adv_data_sync(struct hci_dev *hdev, u8 instance)
> > > -{
> > > - struct hci_cp_le_set_adv_data cp;
> > > - u8 len;
> > > -
> > > - memset(&cp, 0, sizeof(cp));
> > > -
> > > - len = eir_create_adv_data(hdev, instance, cp.data);
> > > -
> > > - /* There's nothing to do if the data hasn't changed */
> > > - if (hdev->adv_data_len == len &&
> > > - memcmp(cp.data, hdev->adv_data, len) == 0)
> > > - return 0;
> > > -
> > > - memcpy(hdev->adv_data, cp.data, sizeof(cp.data));
> > > - hdev->adv_data_len = len;
> > > -
> > > - cp.length = len;
> > > -
> > > - return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_ADV_DATA,
> > > - sizeof(cp), &cp, HCI_CMD_TIMEOUT);
> > > -}
> > > -
> > > -int hci_update_adv_data_sync(struct hci_dev *hdev, u8 instance)
> > > -{
> > > - if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
> > > - return 0;
> > > -
> > > - if (ext_adv_capable(hdev))
> > > - return hci_set_ext_adv_data_sync(hdev, instance);
> > > -
> > > - return hci_set_adv_data_sync(hdev, instance);
> > > -}
> > > -
> > > int hci_schedule_adv_instance_sync(struct hci_dev *hdev, u8 instance,
> > > bool force)
> > > {
> > > @@ -6257,6 +6305,7 @@ static int hci_le_ext_directed_advertising_sync(struct hci_dev *hdev,
> > > struct hci_conn *conn)
> > > {
> > > struct hci_cp_le_set_ext_adv_params cp;
> > > + struct hci_rp_le_set_ext_adv_params rp;
> > > int err;
> > > bdaddr_t random_addr;
> > > u8 own_addr_type;
> > > @@ -6298,8 +6347,12 @@ static int hci_le_ext_directed_advertising_sync(struct hci_dev *hdev,
> > > if (err)
> > > return err;
> > >
> > > - err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS,
> > > - sizeof(cp), &cp, HCI_CMD_TIMEOUT);
> > > + err = hci_set_ext_adv_params_sync(hdev, NULL, &cp, &rp);
> > > + if (err)
> > > + return err;
> > > +
> > > + /* Update adv data as tx power is known now */
> > > + err = hci_set_ext_adv_data_sync(hdev, cp.handle);
> > > if (err)
> > > return err;
> > >
> > > --
> > > [Resend, upstream commit id was missing]
> > >
> > > Hi Greg,
> > >
> > > I've backported this patch for 6.6. There were some trivial merge
> > > conflicts due to moved coded sections.
> > >
> > > Please try it also for older trees. If I get any FAILED notices,
> > > I'll try to prepare patches for specific trees.
> >
> > You made major changes here from the upstream version, PLEASE document
> > them properly in the changelog. Also, can you test it to verify that it
> > works and doesn't blow up the stack like I'm guessing it might?
@Greg: The only reason for the "differences" between the mainline and the 6.6
version of the patch is, that the existing code I had to move up within
hci_sync.c differs between these kernels. The actual modifications I made,
should be the same. Is this something I shall document in the changelog
(and resend the patch)?
I tested the patch by manually checking the output of the 'btmon' command
(Wireshark like utility for monitoring Bluetooth controller commands). I
compared the btmon output before and after my changes. Additionally I
(just) ran the mgmt-tester, as requested by Luiz (see below).
> @Christian Eggers try running resulting image with mgmt-tester and the
> following tests:
>
> Add Ext Advertising - Invalid Params 1 (Multiple Phys)
> Add Ext Advertising - Invalid Params 2 (Multiple PHYs)
> Add Ext Advertising - Invalid Params 3 (Multiple PHYs)
> Add Ext Advertising - Invalid Params 4 (Multiple PHYs)
> Add Ext Advertising - Success 1 (Powered, Add Adv Inst)
> Add Ext Advertising - Success 2 (!Powered, Add Adv Inst)
> Add Ext Advertising - Success 3 (!Powered, Adv Enable)
> Add Ext Advertising - Success 4 (Set Adv on override)
> Add Ext Advertising - Success 5 (Set Adv off override)
> Add Ext Advertising - Success 6 (Scan Rsp Dta, Adv ok)
> Add Ext Advertising - Success 7 (Scan Rsp Dta, Scan ok)
> Add Ext Advertising - Success 8 (Connectable Flag)
> Add Ext Advertising - Success 9 (General Discov Flag)
> Add Ext Advertising - Success 10 (Limited Discov Flag)
> Add Ext Advertising - Success 11 (Managed Flags)
> Add Ext Advertising - Success 12 (TX Power Flag)
> Add Ext Advertising - Success 13 (ADV_SCAN_IND)
> Add Ext Advertising - Success 14 (ADV_NONCONN_IND)
> Add Ext Advertising - Success 15 (ADV_IND)
> Add Ext Advertising - Success 16 (Connectable -> on)
> Add Ext Advertising - Success 17 (Connectable -> off)
> Add Ext Advertising - Success 20 (Add Adv override)
> Add Ext Advertising - Success 21 (Timeout expires)
> Add Ext Advertising - Success 22 (LE -> off, Remove)
> Add Ext Advertising - Success (Empty ScRsp)
> Add Ext Advertising - Success (ScRsp only)
> Add Ext Advertising - Invalid Params (ScRsp too long)
> Add Ext Advertising - Success (ScRsp appear)
> Add Ext Advertising - Invalid Params (ScRsp appear long)
> Add Ext Advertising - Success (Appear is null)
> Add Ext Advertising - Success (Name is null)
> Add Ext Advertising - Success (Complete name)
> Add Ext Advertising - Success (Shortened name)
> Add Ext Advertising - Success (Short name)
> Add Ext Advertising - Success (Name + data)
> Add Ext Advertising - Invalid Params (Name + data)
> Add Ext Advertising - Success (Name+data+appear)
> Add Ext Advertising - Success (PHY -> 1M)
> Add Ext Advertising - Success (PHY -> 2M)
> Add Ext Advertising - Success (PHY -> Coded)
> Add Ext Advertising - Success (Ext Pdu Scannable)
> Add Ext Advertising - Success (Ext Pdu Connectable)
> Add Ext Advertising - Success (Ext Pdu Conn Scan)
> Add Ext Advertising - Success (1m Connectable -> on)
> Add Ext Advertising - Success (1m Connectable -> off)
>
> This should exercise the code you are changing, I assume they should
> all pass with 6.6.y but perhaps you can discard if there were
> something not passing since it can be the result of mgmt-tester
> changes that are not backward compatible.
@Luiz: As this was the first time I used mgmt-tester, I had some fun learning
which kernel options need to be enabled and that using a debugger is not always
a good idea...
In order to run the test successfully, I had to revert bluez.git commit
122c9fcacfa9 ("mgmt-tester: Fix missing MGMT_SETTING_LL_PRIVACY")
(this commits requires newer kernels).
After that, the lists of tests you suggested ran successfully (see bottom
of this mail).
regards,
Christian
>
> > thanks,
> >
> > greg k-h
> >
>
>
>
Test run (all requested tests succeeded):
root@orbiter:~# while read TEST ; do echo "Test: $TEST"; mgmt-tester -s "$TEST"; done < tests.lst
Test: Add Ext Advertising - Invalid Params 1 (Multiple Phys)
Add Ext Advertising - Invalid Params 1 (Multiple Phys) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Invalid Params 1 (Multiple Phys) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Invalid Params 1 (Multiple Phys) - setup complete
Add Ext Advertising - Invalid Params 1 (Multiple Phys) - run
Sending Add Advertising (0x003e)
Test condition added, total 1
Add Advertising (0x003e): Invalid Parameters (0x0d)
Test condition complete, 0 left
Add Ext Advertising - Invalid Params 1 (Multiple Phys) - test passed
Add Ext Advertising - Invalid Params 1 (Multiple Phys) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Invalid Params 1 (Multiple Phys) - teardown complete
Add Ext Advertising - Invalid Params 1 (Multiple Phys) - done
Test Summary
------------
Add Ext Advertising - Invalid Params 1 (Multiple Phys) Passed 0.621 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 3.93 seconds
Test: Add Ext Advertising - Invalid Params 2 (Multiple PHYs)
Add Ext Advertising - Invalid Params 2 (Multiple PHYs) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Invalid Params 2 (Multiple PHYs) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Invalid Params 2 (Multiple PHYs) - setup complete
Add Ext Advertising - Invalid Params 2 (Multiple PHYs) - run
Sending Add Advertising (0x003e)
Test condition added, total 1
Add Advertising (0x003e): Invalid Parameters (0x0d)
Test condition complete, 0 left
Add Ext Advertising - Invalid Params 2 (Multiple PHYs) - test passed
Add Ext Advertising - Invalid Params 2 (Multiple PHYs) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Invalid Params 2 (Multiple PHYs) - teardown complete
Add Ext Advertising - Invalid Params 2 (Multiple PHYs) - done
Test Summary
------------
Add Ext Advertising - Invalid Params 2 (Multiple PHYs) Passed 0.038 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0385 seconds
Test: Add Ext Advertising - Invalid Params 3 (Multiple PHYs)
Add Ext Advertising - Invalid Params 3 (Multiple PHYs) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Invalid Params 3 (Multiple PHYs) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Invalid Params 3 (Multiple PHYs) - setup complete
Add Ext Advertising - Invalid Params 3 (Multiple PHYs) - run
Sending Add Advertising (0x003e)
Test condition added, total 1
Add Advertising (0x003e): Invalid Parameters (0x0d)
Test condition complete, 0 left
Add Ext Advertising - Invalid Params 3 (Multiple PHYs) - test passed
Add Ext Advertising - Invalid Params 3 (Multiple PHYs) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Invalid Params 3 (Multiple PHYs) - teardown complete
Add Ext Advertising - Invalid Params 3 (Multiple PHYs) - done
Test Summary
------------
Add Ext Advertising - Invalid Params 3 (Multiple PHYs) Passed 0.040 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0402 seconds
Test: Add Ext Advertising - Invalid Params 4 (Multiple PHYs)
Add Ext Advertising - Invalid Params 4 (Multiple PHYs) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Invalid Params 4 (Multiple PHYs) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Invalid Params 4 (Multiple PHYs) - setup complete
Add Ext Advertising - Invalid Params 4 (Multiple PHYs) - run
Sending Add Advertising (0x003e)
Test condition added, total 1
Add Advertising (0x003e): Invalid Parameters (0x0d)
Test condition complete, 0 left
Add Ext Advertising - Invalid Params 4 (Multiple PHYs) - test passed
Add Ext Advertising - Invalid Params 4 (Multiple PHYs) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Invalid Params 4 (Multiple PHYs) - teardown complete
Add Ext Advertising - Invalid Params 4 (Multiple PHYs) - done
Test Summary
------------
Add Ext Advertising - Invalid Params 4 (Multiple PHYs) Passed 0.039 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0393 seconds
Test: Add Ext Advertising - Success 1 (Powered, Add Adv Inst)
Add Ext Advertising - Success 1 (Powered, Add Adv Inst) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success 1 (Powered, Add Adv Inst) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success 1 (Powered, Add Adv Inst) - setup complete
Add Ext Advertising - Success 1 (Powered, Add Adv Inst) - run
Registering Advertising Added notification
Test condition added, total 1
Registering HCI command callback
Test condition added, total 2
Sending Add Advertising (0x003e)
Test condition added, total 3
New Advertising Added event received
Test condition complete, 2 left
HCI Command 0x2036 length 25
HCI Command 0x2037 length 13
Test condition complete, 1 left
HCI Command 0x2035 length 7
HCI Command 0x2039 length 6
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success 1 (Powered, Add Adv Inst) - test passed
Add Ext Advertising - Success 1 (Powered, Add Adv Inst) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success 1 (Powered, Add Adv Inst) - teardown complete
Add Ext Advertising - Success 1 (Powered, Add Adv Inst) - done
Test Summary
------------
Add Ext Advertising - Success 1 (Powered, Add Adv Inst) Passed 0.045 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0454 seconds
Test: Add Ext Advertising - Success 2 (!Powered, Add Adv Inst)
Add Ext Advertising - Success 2 (!Powered, Add Adv Inst) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success 2 (!Powered, Add Adv Inst) - setup
Adding advertising instance while unpowered
Add Advertising setup complete (instance 1)
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success 2 (!Powered, Add Adv Inst) - setup complete
Add Ext Advertising - Success 2 (!Powered, Add Adv Inst) - run
Registering HCI command callback
Test condition added, total 1
Sending Set Powered (0x0005)
Test condition added, total 2
HCI Command 0x0c6d length 2
HCI Command 0x2036 length 25
HCI Command 0x2037 length 11
Test condition complete, 1 left
HCI Command 0x2035 length 7
HCI Command 0x2039 length 6
HCI Command 0x0c13 length 248
Set Powered (0x0005): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success 2 (!Powered, Add Adv Inst) - test passed
Add Ext Advertising - Success 2 (!Powered, Add Adv Inst) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success 2 (!Powered, Add Adv Inst) - teardown complete
Add Ext Advertising - Success 2 (!Powered, Add Adv Inst) - done
Test Summary
------------
Add Ext Advertising - Success 2 (!Powered, Add Adv Inst) Passed 0.039 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0396 seconds
Test: Add Ext Advertising - Success 3 (!Powered, Adv Enable)
Add Ext Advertising - Success 3 (!Powered, Adv Enable) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success 3 (!Powered, Adv Enable) - setup
Adding advertising instance while unpowered
Add Advertising setup complete (instance 1)
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success 3 (!Powered, Adv Enable) - setup complete
Add Ext Advertising - Success 3 (!Powered, Adv Enable) - run
Registering HCI command callback
Test condition added, total 1
Sending Set Powered (0x0005)
Test condition added, total 2
HCI Command 0x0c6d length 2
HCI Command 0x2036 length 25
HCI Command 0x2037 length 11
HCI Command 0x2035 length 7
HCI Command 0x2039 length 6
Test condition complete, 1 left
HCI Command 0x0c13 length 248
Set Powered (0x0005): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success 3 (!Powered, Adv Enable) - test passed
Add Ext Advertising - Success 3 (!Powered, Adv Enable) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success 3 (!Powered, Adv Enable) - teardown complete
Add Ext Advertising - Success 3 (!Powered, Adv Enable) - done
Test Summary
------------
Add Ext Advertising - Success 3 (!Powered, Adv Enable) Passed 0.041 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0413 seconds
Test: Add Ext Advertising - Success 4 (Set Adv on override)
Add Ext Advertising - Success 4 (Set Adv on override) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success 4 (Set Adv on override) - setup
Adding advertising instance while powered
Add Advertising setup complete (instance 1)
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success 4 (Set Adv on override) - setup complete
Add Ext Advertising - Success 4 (Set Adv on override) - run
Registering HCI command callback
Test condition added, total 1
Sending Set Advertising (0x0029)
Test condition added, total 2
HCI Command 0x2036 length 25
HCI Command 0x2037 length 7
Test condition complete, 1 left
HCI Command 0x2035 length 7
HCI Command 0x2038 length 4
HCI Command 0x2039 length 6
Set Advertising (0x0029): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success 4 (Set Adv on override) - test passed
Add Ext Advertising - Success 4 (Set Adv on override) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success 4 (Set Adv on override) - teardown complete
Add Ext Advertising - Success 4 (Set Adv on override) - done
Test Summary
------------
Add Ext Advertising - Success 4 (Set Adv on override) Passed 0.042 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0425 seconds
Test: Add Ext Advertising - Success 5 (Set Adv off override)
Add Ext Advertising - Success 5 (Set Adv off override) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success 5 (Set Adv off override) - setup
Set and add advertising instance
Add Advertising setup complete (instance 1)
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success 5 (Set Adv off override) - setup complete
Add Ext Advertising - Success 5 (Set Adv off override) - run
Registering HCI command callback
Test condition added, total 1
Sending Set Advertising (0x0029)
Test condition added, total 2
HCI Command 0x2039 length 2
Set Advertising (0x0029): Success (0x00)
Test condition complete, 1 left
HCI Command 0x2036 length 25
HCI Command 0x2037 length 11
Test condition complete, 0 left
Add Ext Advertising - Success 5 (Set Adv off override) - test passed
HCI Command 0x2035 length 7
HCI Command 0x2039 length 6
Add Ext Advertising - Success 5 (Set Adv off override) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success 5 (Set Adv off override) - teardown complete
Add Ext Advertising - Success 5 (Set Adv off override) - done
Test Summary
------------
Add Ext Advertising - Success 5 (Set Adv off override) Passed 0.042 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0419 seconds
Test: Add Ext Advertising - Success 6 (Scan Rsp Dta, Adv ok)
Add Ext Advertising - Success 6 (Scan Rsp Dta, Adv ok) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success 6 (Scan Rsp Dta, Adv ok) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success 6 (Scan Rsp Dta, Adv ok) - setup complete
Add Ext Advertising - Success 6 (Scan Rsp Dta, Adv ok) - run
Registering Advertising Added notification
Test condition added, total 1
Registering HCI command callback
Test condition added, total 2
Sending Add Advertising (0x003e)
Test condition added, total 3
New Advertising Added event received
Test condition complete, 2 left
HCI Command 0x2036 length 25
HCI Command 0x2037 length 13
Test condition complete, 1 left
HCI Command 0x2035 length 7
HCI Command 0x2038 length 14
HCI Command 0x2039 length 6
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success 6 (Scan Rsp Dta, Adv ok) - test passed
Add Ext Advertising - Success 6 (Scan Rsp Dta, Adv ok) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success 6 (Scan Rsp Dta, Adv ok) - teardown complete
Add Ext Advertising - Success 6 (Scan Rsp Dta, Adv ok) - done
Test Summary
------------
Add Ext Advertising - Success 6 (Scan Rsp Dta, Adv ok) Passed 0.043 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0436 seconds
Test: Add Ext Advertising - Success 7 (Scan Rsp Dta, Scan ok)
Add Ext Advertising - Success 7 (Scan Rsp Dta, Scan ok) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success 7 (Scan Rsp Dta, Scan ok) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success 7 (Scan Rsp Dta, Scan ok) - setup complete
Add Ext Advertising - Success 7 (Scan Rsp Dta, Scan ok) - run
Registering Advertising Added notification
Test condition added, total 1
Registering HCI command callback
Test condition added, total 2
Sending Add Advertising (0x003e)
Test condition added, total 3
New Advertising Added event received
Test condition complete, 2 left
HCI Command 0x2036 length 25
HCI Command 0x2037 length 13
HCI Command 0x2035 length 7
HCI Command 0x2038 length 14
Test condition complete, 1 left
HCI Command 0x2039 length 6
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success 7 (Scan Rsp Dta, Scan ok) - test passed
Add Ext Advertising - Success 7 (Scan Rsp Dta, Scan ok) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success 7 (Scan Rsp Dta, Scan ok) - teardown complete
Add Ext Advertising - Success 7 (Scan Rsp Dta, Scan ok) - done
Test Summary
------------
Add Ext Advertising - Success 7 (Scan Rsp Dta, Scan ok) Passed 0.045 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0449 seconds
Test: Add Ext Advertising - Success 8 (Connectable Flag)
Add Ext Advertising - Success 8 (Connectable Flag) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success 8 (Connectable Flag) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success 8 (Connectable Flag) - setup complete
Add Ext Advertising - Success 8 (Connectable Flag) - run
Registering HCI command callback
Test condition added, total 1
Sending Add Advertising (0x003e)
Test condition added, total 2
HCI Command 0x2036 length 25
Test condition complete, 1 left
HCI Command 0x2037 length 13
HCI Command 0x2039 length 6
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success 8 (Connectable Flag) - test passed
Add Ext Advertising - Success 8 (Connectable Flag) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success 8 (Connectable Flag) - teardown complete
Add Ext Advertising - Success 8 (Connectable Flag) - done
Test Summary
------------
Add Ext Advertising - Success 8 (Connectable Flag) Passed 0.042 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0425 seconds
Test: Add Ext Advertising - Success 9 (General Discov Flag)
Add Ext Advertising - Success 9 (General Discov Flag) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success 9 (General Discov Flag) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success 9 (General Discov Flag) - setup complete
Add Ext Advertising - Success 9 (General Discov Flag) - run
Registering HCI command callback
Test condition added, total 1
Sending Add Advertising (0x003e)
Test condition added, total 2
HCI Command 0x2036 length 25
HCI Command 0x2037 length 16
Test condition complete, 1 left
HCI Command 0x2035 length 7
HCI Command 0x2039 length 6
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success 9 (General Discov Flag) - test passed
Add Ext Advertising - Success 9 (General Discov Flag) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success 9 (General Discov Flag) - teardown complete
Add Ext Advertising - Success 9 (General Discov Flag) - done
Test Summary
------------
Add Ext Advertising - Success 9 (General Discov Flag) Passed 0.039 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0405 seconds
Test: Add Ext Advertising - Success 10 (Limited Discov Flag)
Add Ext Advertising - Success 10 (Limited Discov Flag) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success 10 (Limited Discov Flag) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success 10 (Limited Discov Flag) - setup complete
Add Ext Advertising - Success 10 (Limited Discov Flag) - run
Registering HCI command callback
Test condition added, total 1
Sending Add Advertising (0x003e)
Test condition added, total 2
HCI Command 0x2036 length 25
HCI Command 0x2037 length 16
Test condition complete, 1 left
HCI Command 0x2035 length 7
HCI Command 0x2039 length 6
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success 10 (Limited Discov Flag) - test passed
Add Ext Advertising - Success 10 (Limited Discov Flag) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success 10 (Limited Discov Flag) - teardown complete
Add Ext Advertising - Success 10 (Limited Discov Flag) - done
Test Summary
------------
Add Ext Advertising - Success 10 (Limited Discov Flag) Passed 0.040 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.04 seconds
Test: Add Ext Advertising - Success 11 (Managed Flags)
Add Ext Advertising - Success 11 (Managed Flags) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success 11 (Managed Flags) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Connectable (0x0007)
Setup sending Set Powered (0x0005)
Setup sending Set Discoverable (0x0006)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success 11 (Managed Flags) - setup complete
Add Ext Advertising - Success 11 (Managed Flags) - run
Registering HCI command callback
Test condition added, total 1
Sending Add Advertising (0x003e)
Test condition added, total 2
HCI Command 0x2036 length 25
HCI Command 0x2037 length 16
Test condition complete, 1 left
HCI Command 0x2039 length 6
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success 11 (Managed Flags) - test passed
Add Ext Advertising - Success 11 (Managed Flags) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success 11 (Managed Flags) - teardown complete
Add Ext Advertising - Success 11 (Managed Flags) - done
Test Summary
------------
Add Ext Advertising - Success 11 (Managed Flags) Passed 0.040 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0408 seconds
Test: Add Ext Advertising - Success 12 (TX Power Flag)
Add Ext Advertising - Success 12 (TX Power Flag) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success 12 (TX Power Flag) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Connectable (0x0007)
Setup sending Set Powered (0x0005)
Setup sending Set Discoverable (0x0006)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success 12 (TX Power Flag) - setup complete
Add Ext Advertising - Success 12 (TX Power Flag) - run
Registering HCI command callback
Test condition added, total 1
Sending Add Advertising (0x003e)
Test condition added, total 2
HCI Command 0x2036 length 25
HCI Command 0x2037 length 16
Test condition complete, 1 left
HCI Command 0x2039 length 6
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success 12 (TX Power Flag) - test passed
Add Ext Advertising - Success 12 (TX Power Flag) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success 12 (TX Power Flag) - teardown complete
Add Ext Advertising - Success 12 (TX Power Flag) - done
Test Summary
------------
Add Ext Advertising - Success 12 (TX Power Flag) Passed 0.045 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0457 seconds
Test: Add Ext Advertising - Success 13 (ADV_SCAN_IND)
Add Ext Advertising - Success 13 (ADV_SCAN_IND) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success 13 (ADV_SCAN_IND) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success 13 (ADV_SCAN_IND) - setup complete
Add Ext Advertising - Success 13 (ADV_SCAN_IND) - run
Registering HCI command callback
Test condition added, total 1
Sending Add Advertising (0x003e)
Test condition added, total 2
HCI Command 0x2036 length 25
Test condition complete, 1 left
HCI Command 0x2037 length 13
HCI Command 0x2035 length 7
HCI Command 0x2038 length 14
HCI Command 0x2039 length 6
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success 13 (ADV_SCAN_IND) - test passed
Add Ext Advertising - Success 13 (ADV_SCAN_IND) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success 13 (ADV_SCAN_IND) - teardown complete
Add Ext Advertising - Success 13 (ADV_SCAN_IND) - done
Test Summary
------------
Add Ext Advertising - Success 13 (ADV_SCAN_IND) Passed 0.039 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0397 seconds
Test: Add Ext Advertising - Success 14 (ADV_NONCONN_IND)
Add Ext Advertising - Success 14 (ADV_NONCONN_IND) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success 14 (ADV_NONCONN_IND) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success 14 (ADV_NONCONN_IND) - setup complete
Add Ext Advertising - Success 14 (ADV_NONCONN_IND) - run
Registering HCI command callback
Test condition added, total 1
Sending Add Advertising (0x003e)
Test condition added, total 2
HCI Command 0x2036 length 25
Test condition complete, 1 left
HCI Command 0x2037 length 13
HCI Command 0x2035 length 7
HCI Command 0x2039 length 6
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success 14 (ADV_NONCONN_IND) - test passed
Add Ext Advertising - Success 14 (ADV_NONCONN_IND) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success 14 (ADV_NONCONN_IND) - teardown complete
Add Ext Advertising - Success 14 (ADV_NONCONN_IND) - done
Test Summary
------------
Add Ext Advertising - Success 14 (ADV_NONCONN_IND) Passed 0.046 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0461 seconds
Test: Add Ext Advertising - Success 15 (ADV_IND)
Add Ext Advertising - Success 15 (ADV_IND) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success 15 (ADV_IND) - setup
Setup sending Set Powered (0x0005)
Setup sending Set Low Energy (0x000d)
Setup sending Set Connectable (0x0007)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success 15 (ADV_IND) - setup complete
Add Ext Advertising - Success 15 (ADV_IND) - run
Registering HCI command callback
Test condition added, total 1
Sending Add Advertising (0x003e)
Test condition added, total 2
HCI Command 0x2036 length 25
Test condition complete, 1 left
HCI Command 0x2037 length 13
HCI Command 0x2039 length 6
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success 15 (ADV_IND) - test passed
Add Ext Advertising - Success 15 (ADV_IND) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success 15 (ADV_IND) - teardown complete
Add Ext Advertising - Success 15 (ADV_IND) - done
Test Summary
------------
Add Ext Advertising - Success 15 (ADV_IND) Passed 0.039 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0398 seconds
Test: Add Ext Advertising - Success 16 (Connectable -> on)
Add Ext Advertising - Success 16 (Connectable -> on) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success 16 (Connectable -> on) - setup
Adding advertising instance while powered
Add Advertising setup complete (instance 1)
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success 16 (Connectable -> on) - setup complete
Add Ext Advertising - Success 16 (Connectable -> on) - run
Registering HCI command callback
Test condition added, total 1
Sending Set Connectable (0x0007)
Test condition added, total 2
HCI Command 0x0c1a length 1
HCI Command 0x2039 length 6
HCI Command 0x2036 length 25
Test condition complete, 1 left
HCI Command 0x2039 length 6
Set Connectable (0x0007): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success 16 (Connectable -> on) - test passed
Add Ext Advertising - Success 16 (Connectable -> on) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success 16 (Connectable -> on) - teardown complete
Add Ext Advertising - Success 16 (Connectable -> on) - done
Test Summary
------------
Add Ext Advertising - Success 16 (Connectable -> on) Passed 0.040 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.041 seconds
Test: Add Ext Advertising - Success 17 (Connectable -> off)
Add Ext Advertising - Success 17 (Connectable -> off) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success 17 (Connectable -> off) - setup
Adding advertising instance while connectable
Add Advertising setup complete (instance 1)
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success 17 (Connectable -> off) - setup complete
Add Ext Advertising - Success 17 (Connectable -> off) - run
Registering HCI command callback
Test condition added, total 1
Sending Set Connectable (0x0007)
Test condition added, total 2
HCI Command 0x0c1a length 1
HCI Command 0x2039 length 6
HCI Command 0x2036 length 25
Test condition complete, 1 left
HCI Command 0x2035 length 7
HCI Command 0x2039 length 6
Set Connectable (0x0007): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success 17 (Connectable -> off) - test passed
Add Ext Advertising - Success 17 (Connectable -> off) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success 17 (Connectable -> off) - teardown complete
Add Ext Advertising - Success 17 (Connectable -> off) - done
Test Summary
------------
Add Ext Advertising - Success 17 (Connectable -> off) Passed 0.044 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0458 seconds
Test: Add Ext Advertising - Success 20 (Add Adv override)
Add Ext Advertising - Success 20 (Add Adv override) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success 20 (Add Adv override) - setup
Adding advertising instance while powered
Add Advertising setup complete (instance 1)
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success 20 (Add Adv override) - setup complete
Add Ext Advertising - Success 20 (Add Adv override) - run
Registering HCI command callback
Test condition added, total 1
Sending Add Advertising (0x003e)
Test condition added, total 2
HCI Command 0x2039 length 6
HCI Command 0x2036 length 25
HCI Command 0x2037 length 13
Test condition complete, 1 left
HCI Command 0x2035 length 7
HCI Command 0x2039 length 6
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success 20 (Add Adv override) - test passed
Add Ext Advertising - Success 20 (Add Adv override) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success 20 (Add Adv override) - teardown complete
Add Ext Advertising - Success 20 (Add Adv override) - done
Test Summary
------------
Add Ext Advertising - Success 20 (Add Adv override) Passed 0.040 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.042 seconds
Test: Add Ext Advertising - Success 21 (Timeout expires)
Add Ext Advertising - Success 21 (Timeout expires) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success 21 (Timeout expires) - setup
Adding advertising instance with timeout
Add Advertising setup complete (instance 1)
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success 21 (Timeout expires) - setup complete
Add Ext Advertising - Success 21 (Timeout expires) - run
Registering Advertising Removed notification
Test condition added, total 1
Executing no-op test
New Advertising Removed event received
Test condition complete, 0 left
Add Ext Advertising - Success 21 (Timeout expires) - test passed
Add Ext Advertising - Success 21 (Timeout expires) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success 21 (Timeout expires) - teardown complete
Add Ext Advertising - Success 21 (Timeout expires) - done
Test Summary
------------
Add Ext Advertising - Success 21 (Timeout expires) Passed 1.036 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 1.04 seconds
Test: Add Ext Advertising - Success 22 (LE -> off, Remove)
Add Ext Advertising - Success 22 (LE -> off, Remove) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success 22 (LE -> off, Remove) - setup
Adding advertising instance while powered
Add Advertising setup complete (instance 1)
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success 22 (LE -> off, Remove) - setup complete
Add Ext Advertising - Success 22 (LE -> off, Remove) - run
Registering Advertising Removed notification
Test condition added, total 1
Sending Set Low Energy (0x000d)
Test condition added, total 2
New Advertising Removed event received
Test condition complete, 1 left
Set Low Energy (0x000d): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success 22 (LE -> off, Remove) - test passed
Add Ext Advertising - Success 22 (LE -> off, Remove) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success 22 (LE -> off, Remove) - teardown complete
Add Ext Advertising - Success 22 (LE -> off, Remove) - done
Test Summary
------------
Add Ext Advertising - Success 22 (LE -> off, Remove) Passed 0.044 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0448 seconds
Test: Add Ext Advertising - Success (Empty ScRsp)
Add Ext Advertising - Success (Empty ScRsp) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success (Empty ScRsp) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Setup sending Set Local Name (0x000f)
Test setup condition added, total 1
Test setup condition complete, 0 left
Add Ext Advertising - Success (Empty ScRsp) - setup complete
Add Ext Advertising - Success (Empty ScRsp) - run
Sending Add Advertising (0x003e)
Test condition added, total 1
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success (Empty ScRsp) - test passed
Add Ext Advertising - Success (Empty ScRsp) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success (Empty ScRsp) - teardown complete
Add Ext Advertising - Success (Empty ScRsp) - done
Test Summary
------------
Add Ext Advertising - Success (Empty ScRsp) Passed 0.038 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0384 seconds
Test: Add Ext Advertising - Success (ScRsp only)
Add Ext Advertising - Success (ScRsp only) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success (ScRsp only) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success (ScRsp only) - setup complete
Add Ext Advertising - Success (ScRsp only) - run
Sending Add Advertising (0x003e)
Test condition added, total 1
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success (ScRsp only) - test passed
Add Ext Advertising - Success (ScRsp only) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success (ScRsp only) - teardown complete
Add Ext Advertising - Success (ScRsp only) - done
Test Summary
------------
Add Ext Advertising - Success (ScRsp only) Passed 0.039 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.039 seconds
Test: Add Ext Advertising - Invalid Params (ScRsp too long)
Add Ext Advertising - Invalid Params (ScRsp too long) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Invalid Params (ScRsp too long) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Invalid Params (ScRsp too long) - setup complete
Add Ext Advertising - Invalid Params (ScRsp too long) - run
Sending Add Advertising (0x003e)
Test condition added, total 1
Add Advertising (0x003e): Invalid Parameters (0x0d)
Test condition complete, 0 left
Add Ext Advertising - Invalid Params (ScRsp too long) - test passed
Add Ext Advertising - Invalid Params (ScRsp too long) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Invalid Params (ScRsp too long) - teardown complete
Add Ext Advertising - Invalid Params (ScRsp too long) - done
Test Summary
------------
Add Ext Advertising - Invalid Params (ScRsp too long) Passed 0.037 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0374 seconds
Test: Add Ext Advertising - Success (ScRsp appear)
Add Ext Advertising - Success (ScRsp appear) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success (ScRsp appear) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Setup sending Set Appearance (0x0043)
Test setup condition added, total 1
Test setup condition complete, 0 left
Add Ext Advertising - Success (ScRsp appear) - setup complete
Add Ext Advertising - Success (ScRsp appear) - run
Sending Add Advertising (0x003e)
Test condition added, total 1
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success (ScRsp appear) - test passed
Add Ext Advertising - Success (ScRsp appear) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success (ScRsp appear) - teardown complete
Add Ext Advertising - Success (ScRsp appear) - done
Test Summary
------------
Add Ext Advertising - Success (ScRsp appear) Passed 0.035 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0353 seconds
Test: Add Ext Advertising - Invalid Params (ScRsp appear long)
Add Ext Advertising - Invalid Params (ScRsp appear long) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Invalid Params (ScRsp appear long) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Setup sending Set Appearance (0x0043)
Test setup condition added, total 1
Test setup condition complete, 0 left
Add Ext Advertising - Invalid Params (ScRsp appear long) - setup complete
Add Ext Advertising - Invalid Params (ScRsp appear long) - run
Sending Add Advertising (0x003e)
Test condition added, total 1
Add Advertising (0x003e): Invalid Parameters (0x0d)
Test condition complete, 0 left
Add Ext Advertising - Invalid Params (ScRsp appear long) - test passed
Add Ext Advertising - Invalid Params (ScRsp appear long) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Invalid Params (ScRsp appear long) - teardown complete
Add Ext Advertising - Invalid Params (ScRsp appear long) - done
Test Summary
------------
Add Ext Advertising - Invalid Params (ScRsp appear long) Passed 0.036 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0367 seconds
Test: Add Ext Advertising - Success (Appear is null)
Add Ext Advertising - Success (Appear is null) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success (Appear is null) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success (Appear is null) - setup complete
Add Ext Advertising - Success (Appear is null) - run
Sending Add Advertising (0x003e)
Test condition added, total 1
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success (Appear is null) - test passed
Add Ext Advertising - Success (Appear is null) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success (Appear is null) - teardown complete
Add Ext Advertising - Success (Appear is null) - done
Test Summary
------------
Add Ext Advertising - Success (Appear is null) Passed 0.035 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0358 seconds
Test: Add Ext Advertising - Success (Name is null)
Add Ext Advertising - Success (Name is null) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success (Name is null) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success (Name is null) - setup complete
Add Ext Advertising - Success (Name is null) - run
Registering HCI command callback
Test condition added, total 1
Sending Add Advertising (0x003e)
Test condition added, total 2
HCI Command 0x2036 length 25
HCI Command 0x2035 length 7
HCI Command 0x2038 length 5
Test condition complete, 1 left
HCI Command 0x2039 length 6
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success (Name is null) - test passed
Add Ext Advertising - Success (Name is null) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success (Name is null) - teardown complete
Add Ext Advertising - Success (Name is null) - done
Test Summary
------------
Add Ext Advertising - Success (Name is null) Passed 0.042 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0422 seconds
Test: Add Ext Advertising - Success (Complete name)
Add Ext Advertising - Success (Complete name) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success (Complete name) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Setup sending Set Local Name (0x000f)
Test setup condition added, total 1
Test setup condition complete, 0 left
Add Ext Advertising - Success (Complete name) - setup complete
Add Ext Advertising - Success (Complete name) - run
Registering HCI command callback
Test condition added, total 1
Sending Add Advertising (0x003e)
Test condition added, total 2
HCI Command 0x2036 length 25
HCI Command 0x2035 length 7
HCI Command 0x2038 length 15
Test condition complete, 1 left
HCI Command 0x2039 length 6
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success (Complete name) - test passed
Add Ext Advertising - Success (Complete name) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success (Complete name) - teardown complete
Add Ext Advertising - Success (Complete name) - done
Test Summary
------------
Add Ext Advertising - Success (Complete name) Passed 0.042 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0428 seconds
Test: Add Ext Advertising - Success (Shortened name)
Add Ext Advertising - Success (Shortened name) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success (Shortened name) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Setup sending Set Local Name (0x000f)
Test setup condition added, total 1
Test setup condition complete, 0 left
Add Ext Advertising - Success (Shortened name) - setup complete
Add Ext Advertising - Success (Shortened name) - run
Registering HCI command callback
Test condition added, total 1
Sending Add Advertising (0x003e)
Test condition added, total 2
HCI Command 0x2036 length 25
HCI Command 0x2035 length 7
HCI Command 0x2038 length 16
Test condition complete, 1 left
HCI Command 0x2039 length 6
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success (Shortened name) - test passed
Add Ext Advertising - Success (Shortened name) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success (Shortened name) - teardown complete
Add Ext Advertising - Success (Shortened name) - done
Test Summary
------------
Add Ext Advertising - Success (Shortened name) Passed 0.043 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.043 seconds
Test: Add Ext Advertising - Success (Short name)
Add Ext Advertising - Success (Short name) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success (Short name) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Setup sending Set Local Name (0x000f)
Test setup condition added, total 1
Test setup condition complete, 0 left
Add Ext Advertising - Success (Short name) - setup complete
Add Ext Advertising - Success (Short name) - run
Registering HCI command callback
Test condition added, total 1
Sending Add Advertising (0x003e)
Test condition added, total 2
HCI Command 0x2036 length 25
HCI Command 0x2035 length 7
HCI Command 0x2038 length 16
Test condition complete, 1 left
HCI Command 0x2039 length 6
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success (Short name) - test passed
Add Ext Advertising - Success (Short name) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success (Short name) - teardown complete
Add Ext Advertising - Success (Short name) - done
Test Summary
------------
Add Ext Advertising - Success (Short name) Passed 0.040 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0402 seconds
Test: Add Ext Advertising - Success (Name + data)
Add Ext Advertising - Success (Name + data) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success (Name + data) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Setup sending Set Local Name (0x000f)
Test setup condition added, total 1
Test setup condition complete, 0 left
Add Ext Advertising - Success (Name + data) - setup complete
Add Ext Advertising - Success (Name + data) - run
Registering HCI command callback
Test condition added, total 1
Sending Add Advertising (0x003e)
Test condition added, total 2
HCI Command 0x2036 length 25
HCI Command 0x2035 length 7
HCI Command 0x2038 length 33
Test condition complete, 1 left
HCI Command 0x2039 length 6
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success (Name + data) - test passed
Add Ext Advertising - Success (Name + data) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success (Name + data) - teardown complete
Add Ext Advertising - Success (Name + data) - done
Test Summary
------------
Add Ext Advertising - Success (Name + data) Passed 0.043 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0439 seconds
Test: Add Ext Advertising - Invalid Params (Name + data)
Add Ext Advertising - Invalid Params (Name + data) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Invalid Params (Name + data) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Setup sending Set Local Name (0x000f)
Test setup condition added, total 1
Test setup condition complete, 0 left
Add Ext Advertising - Invalid Params (Name + data) - setup complete
Add Ext Advertising - Invalid Params (Name + data) - run
Sending Add Advertising (0x003e)
Test condition added, total 1
Add Advertising (0x003e): Invalid Parameters (0x0d)
Test condition complete, 0 left
Add Ext Advertising - Invalid Params (Name + data) - test passed
Add Ext Advertising - Invalid Params (Name + data) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Invalid Params (Name + data) - teardown complete
Add Ext Advertising - Invalid Params (Name + data) - done
Test Summary
------------
Add Ext Advertising - Invalid Params (Name + data) Passed 0.037 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0372 seconds
Test: Add Ext Advertising - Success (Name+data+appear)
Add Ext Advertising - Success (Name+data+appear) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success (Name+data+appear) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Sending setup opcode array
Setup sending Set Appearance (0x0043)
Test setup condition added, total 1
Setup sending Set Local Name (0x000f)
Test setup condition added, total 2
Test setup condition complete, 1 left
Test setup condition complete, 0 left
Add Ext Advertising - Success (Name+data+appear) - setup complete
Add Ext Advertising - Success (Name+data+appear) - run
Registering HCI command callback
Test condition added, total 1
Sending Add Advertising (0x003e)
Test condition added, total 2
HCI Command 0x2036 length 25
HCI Command 0x2035 length 7
HCI Command 0x2038 length 33
Test condition complete, 1 left
HCI Command 0x2039 length 6
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success (Name+data+appear) - test passed
Add Ext Advertising - Success (Name+data+appear) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success (Name+data+appear) - teardown complete
Add Ext Advertising - Success (Name+data+appear) - done
Test Summary
------------
Add Ext Advertising - Success (Name+data+appear) Passed 0.046 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0472 seconds
Test: Add Ext Advertising - Success (PHY -> 1M)
Add Ext Advertising - Success (PHY -> 1M) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success (PHY -> 1M) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success (PHY -> 1M) - setup complete
Add Ext Advertising - Success (PHY -> 1M) - run
Registering HCI command callback
Test condition added, total 1
Sending Add Advertising (0x003e)
Test condition added, total 2
HCI Command 0x2036 length 25
Test condition complete, 1 left
HCI Command 0x2037 length 13
HCI Command 0x2035 length 7
HCI Command 0x2039 length 6
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success (PHY -> 1M) - test passed
Add Ext Advertising - Success (PHY -> 1M) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success (PHY -> 1M) - teardown complete
Add Ext Advertising - Success (PHY -> 1M) - done
Test Summary
------------
Add Ext Advertising - Success (PHY -> 1M) Passed 0.041 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0412 seconds
Test: Add Ext Advertising - Success (PHY -> 2M)
Add Ext Advertising - Success (PHY -> 2M) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success (PHY -> 2M) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success (PHY -> 2M) - setup complete
Add Ext Advertising - Success (PHY -> 2M) - run
Registering HCI command callback
Test condition added, total 1
Sending Add Advertising (0x003e)
Test condition added, total 2
HCI Command 0x2036 length 25
Test condition complete, 1 left
HCI Command 0x2037 length 13
HCI Command 0x2035 length 7
HCI Command 0x2039 length 6
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success (PHY -> 2M) - test passed
Add Ext Advertising - Success (PHY -> 2M) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success (PHY -> 2M) - teardown complete
Add Ext Advertising - Success (PHY -> 2M) - done
Test Summary
------------
Add Ext Advertising - Success (PHY -> 2M) Passed 0.039 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0398 seconds
Test: Add Ext Advertising - Success (PHY -> Coded)
Add Ext Advertising - Success (PHY -> Coded) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success (PHY -> Coded) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success (PHY -> Coded) - setup complete
Add Ext Advertising - Success (PHY -> Coded) - run
Registering HCI command callback
Test condition added, total 1
Sending Add Advertising (0x003e)
Test condition added, total 2
HCI Command 0x2036 length 25
Test condition complete, 1 left
HCI Command 0x2037 length 13
HCI Command 0x2035 length 7
HCI Command 0x2039 length 6
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success (PHY -> Coded) - test passed
Add Ext Advertising - Success (PHY -> Coded) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success (PHY -> Coded) - teardown complete
Add Ext Advertising - Success (PHY -> Coded) - done
Test Summary
------------
Add Ext Advertising - Success (PHY -> Coded) Passed 0.041 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0414 seconds
Test: Add Ext Advertising - Success (Ext Pdu Scannable)
Add Ext Advertising - Success (Ext Pdu Scannable) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success (Ext Pdu Scannable) - setup
Setup sending Set Low Energy (0x000d)
Setup sending Set Powered (0x0005)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success (Ext Pdu Scannable) - setup complete
Add Ext Advertising - Success (Ext Pdu Scannable) - run
Registering HCI command callback
Test condition added, total 1
Sending Add Advertising (0x003e)
Test condition added, total 2
HCI Command 0x2036 length 25
Test condition complete, 1 left
HCI Command 0x2037 length 13
HCI Command 0x2035 length 7
HCI Command 0x2038 length 14
HCI Command 0x2039 length 6
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success (Ext Pdu Scannable) - test passed
Add Ext Advertising - Success (Ext Pdu Scannable) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success (Ext Pdu Scannable) - teardown complete
Add Ext Advertising - Success (Ext Pdu Scannable) - done
Test Summary
------------
Add Ext Advertising - Success (Ext Pdu Scannable) Passed 0.044 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0441 seconds
Test: Add Ext Advertising - Success (Ext Pdu Connectable)
Add Ext Advertising - Success (Ext Pdu Connectable) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success (Ext Pdu Connectable) - setup
Setup sending Set Powered (0x0005)
Setup sending Set Low Energy (0x000d)
Setup sending Set Connectable (0x0007)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success (Ext Pdu Connectable) - setup complete
Add Ext Advertising - Success (Ext Pdu Connectable) - run
Registering HCI command callback
Test condition added, total 1
Sending Add Advertising (0x003e)
Test condition added, total 2
HCI Command 0x2036 length 25
Test condition complete, 1 left
HCI Command 0x2037 length 13
HCI Command 0x2039 length 6
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success (Ext Pdu Connectable) - test passed
Add Ext Advertising - Success (Ext Pdu Connectable) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success (Ext Pdu Connectable) - teardown complete
Add Ext Advertising - Success (Ext Pdu Connectable) - done
Test Summary
------------
Add Ext Advertising - Success (Ext Pdu Connectable) Passed 0.041 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.041 seconds
Test: Add Ext Advertising - Success (Ext Pdu Conn Scan)
Add Ext Advertising - Success (Ext Pdu Conn Scan) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success (Ext Pdu Conn Scan) - setup
Setup sending Set Powered (0x0005)
Setup sending Set Low Energy (0x000d)
Setup sending Set Connectable (0x0007)
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success (Ext Pdu Conn Scan) - setup complete
Add Ext Advertising - Success (Ext Pdu Conn Scan) - run
Registering HCI command callback
Test condition added, total 1
Sending Add Advertising (0x003e)
Test condition added, total 2
HCI Command 0x2036 length 25
Test condition complete, 1 left
HCI Command 0x2037 length 13
HCI Command 0x2038 length 14
HCI Command 0x2039 length 6
Add Advertising (0x003e): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success (Ext Pdu Conn Scan) - test passed
Add Ext Advertising - Success (Ext Pdu Conn Scan) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success (Ext Pdu Conn Scan) - teardown complete
Add Ext Advertising - Success (Ext Pdu Conn Scan) - done
Test Summary
------------
Add Ext Advertising - Success (Ext Pdu Conn Scan) Passed 0.040 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.04 seconds
Test: Add Ext Advertising - Success (1m Connectable -> on)
Add Ext Advertising - Success (1m Connectable -> on) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success (1m Connectable -> on) - setup
Adding advertising instance while powered
Add Advertising setup complete (instance 1)
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success (1m Connectable -> on) - setup complete
Add Ext Advertising - Success (1m Connectable -> on) - run
Registering HCI command callback
Test condition added, total 1
Sending Set Connectable (0x0007)
Test condition added, total 2
HCI Command 0x0c1a length 1
HCI Command 0x2039 length 6
HCI Command 0x2036 length 25
Test condition complete, 1 left
HCI Command 0x2039 length 6
Set Connectable (0x0007): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success (1m Connectable -> on) - test passed
Add Ext Advertising - Success (1m Connectable -> on) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success (1m Connectable -> on) - teardown complete
Add Ext Advertising - Success (1m Connectable -> on) - done
Test Summary
------------
Add Ext Advertising - Success (1m Connectable -> on) Passed 0.041 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.0419 seconds
Test: Add Ext Advertising - Success (1m Connectable -> off)
Add Ext Advertising - Success (1m Connectable -> off) - init
Read Version callback
Status: Success (0x00)
Version 1.22
Read Commands callback
Status: Success (0x00)
Read Index List callback
Status: Success (0x00)
Index Added callback
Index: 0x0000
Enable management Mesh interface
Enabling Mesh feature
Read Info callback
Status: Success (0x00)
Address: 00:AA:01:00:00:00
Version: 0x09
Manufacturer: 0x05f1
Supported settings: 0x0001beff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
Mesh feature is enabled
Add Ext Advertising - Success (1m Connectable -> off) - setup
Adding advertising instance while connectable
Add Advertising setup complete (instance 1)
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Add Ext Advertising - Success (1m Connectable -> off) - setup complete
Add Ext Advertising - Success (1m Connectable -> off) - run
Registering HCI command callback
Test condition added, total 1
Sending Set Connectable (0x0007)
Test condition added, total 2
HCI Command 0x0c1a length 1
HCI Command 0x2039 length 6
HCI Command 0x2036 length 25
Test condition complete, 1 left
HCI Command 0x2035 length 7
HCI Command 0x2039 length 6
Set Connectable (0x0007): Success (0x00)
Test condition complete, 0 left
Add Ext Advertising - Success (1m Connectable -> off) - test passed
Add Ext Advertising - Success (1m Connectable -> off) - teardown
Index Removed callback
Index: 0x0000
Add Ext Advertising - Success (1m Connectable -> off) - teardown complete
Add Ext Advertising - Success (1m Connectable -> off) - done
Test Summary
------------
Add Ext Advertising - Success (1m Connectable -> off) Passed 0.038 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
Overall execution time: 0.038 seconds
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 6.6.y] Bluetooth: HCI: Set extended advertising data synchronously
2025-07-08 21:14 ` Christian Eggers
@ 2025-07-09 6:19 ` Greg KH
0 siblings, 0 replies; 10+ messages in thread
From: Greg KH @ 2025-07-09 6:19 UTC (permalink / raw)
To: Christian Eggers; +Cc: Luiz Augusto von Dentz, linux-bluetooth, stable
On Tue, Jul 08, 2025 at 11:14:59PM +0200, Christian Eggers wrote:
> > > You made major changes here from the upstream version, PLEASE document
> > > them properly in the changelog. Also, can you test it to verify that it
> > > works and doesn't blow up the stack like I'm guessing it might?
>
> @Greg: The only reason for the "differences" between the mainline and the 6.6
> version of the patch is, that the existing code I had to move up within
> hci_sync.c differs between these kernels. The actual modifications I made,
> should be the same. Is this something I shall document in the changelog
> (and resend the patch)?
Yes please.
thanks,
greg k-h
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 6.6.y v2] Bluetooth: HCI: Set extended advertising data synchronously
[not found] <2025070625-wafer-speed-20c1@gregkh>
2025-07-07 8:02 ` [PATCH 6.6.y] Bluetooth: HCI: Set extended advertising data synchronously Christian Eggers
2025-07-07 8:13 ` [PATCH 6.6.y] " Christian Eggers
@ 2025-07-09 9:05 ` Christian Eggers
2025-07-09 9:20 ` [6.6.y,v2] " bluez.test.bot
2 siblings, 1 reply; 10+ messages in thread
From: Christian Eggers @ 2025-07-09 9:05 UTC (permalink / raw)
To: stable; +Cc: Luiz Augusto von Dentz, linux-bluetooth, Christian Eggers
commit 89fb8acc38852116d38d721ad394aad7f2871670 upstream.
[This patch deviates from the upstream version because 3 functions in
hci_sync.c (hci_set_ext_adv_data_sync, hci_set_adv_data_sync and
hci_update_adv_data_sync) had to be moved up within the file. The
content of these functions differs between 6.6 and newer kernels.]
Currently, for controllers with extended advertising, the advertising
data is set in the asynchronous response handler for extended
adverstising params. As most advertising settings are performed in a
synchronous context, the (asynchronous) setting of the advertising data
is done too late (after enabling the advertising).
Move setting of adverstising data from asynchronous response handler
into synchronous context to fix ordering of HCI commands.
Signed-off-by: Christian Eggers <ceggers@arri.de>
Fixes: a0fb3726ba55 ("Bluetooth: Use Set ext adv/scan rsp data if controller supports")
Cc: stable@vger.kernel.org
v2: https://lore.kernel.org/linux-bluetooth/20250626115209.17839-1-ceggers@arri.de/
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
---
v2:
- Document deviations from the mainline version of the patch in the
patch description
net/bluetooth/hci_event.c | 36 -------
net/bluetooth/hci_sync.c | 213 ++++++++++++++++++++++++--------------
2 files changed, 133 insertions(+), 116 deletions(-)
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 008d14b3d8b8..147766458a6c 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -2139,40 +2139,6 @@ static u8 hci_cc_set_adv_param(struct hci_dev *hdev, void *data,
return rp->status;
}
-static u8 hci_cc_set_ext_adv_param(struct hci_dev *hdev, void *data,
- struct sk_buff *skb)
-{
- struct hci_rp_le_set_ext_adv_params *rp = data;
- struct hci_cp_le_set_ext_adv_params *cp;
- struct adv_info *adv_instance;
-
- bt_dev_dbg(hdev, "status 0x%2.2x", rp->status);
-
- if (rp->status)
- return rp->status;
-
- cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS);
- if (!cp)
- return rp->status;
-
- hci_dev_lock(hdev);
- hdev->adv_addr_type = cp->own_addr_type;
- if (!cp->handle) {
- /* Store in hdev for instance 0 */
- hdev->adv_tx_power = rp->tx_power;
- } else {
- adv_instance = hci_find_adv_instance(hdev, cp->handle);
- if (adv_instance)
- adv_instance->tx_power = rp->tx_power;
- }
- /* Update adv data as tx power is known now */
- hci_update_adv_data(hdev, cp->handle);
-
- hci_dev_unlock(hdev);
-
- return rp->status;
-}
-
static u8 hci_cc_read_rssi(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{
@@ -4153,8 +4119,6 @@ static const struct hci_cc {
HCI_CC(HCI_OP_LE_READ_NUM_SUPPORTED_ADV_SETS,
hci_cc_le_read_num_adv_sets,
sizeof(struct hci_rp_le_read_num_supported_adv_sets)),
- HCI_CC(HCI_OP_LE_SET_EXT_ADV_PARAMS, hci_cc_set_ext_adv_param,
- sizeof(struct hci_rp_le_set_ext_adv_params)),
HCI_CC_STATUS(HCI_OP_LE_SET_EXT_ADV_ENABLE,
hci_cc_le_set_ext_adv_enable),
HCI_CC_STATUS(HCI_OP_LE_SET_ADV_SET_RAND_ADDR,
diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c
index e92bc4ceb5ad..7b6c8f53e334 100644
--- a/net/bluetooth/hci_sync.c
+++ b/net/bluetooth/hci_sync.c
@@ -1224,9 +1224,129 @@ static int hci_set_adv_set_random_addr_sync(struct hci_dev *hdev, u8 instance,
sizeof(cp), &cp, HCI_CMD_TIMEOUT);
}
+static int
+hci_set_ext_adv_params_sync(struct hci_dev *hdev, struct adv_info *adv,
+ const struct hci_cp_le_set_ext_adv_params *cp,
+ struct hci_rp_le_set_ext_adv_params *rp)
+{
+ struct sk_buff *skb;
+
+ skb = __hci_cmd_sync(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS, sizeof(*cp),
+ cp, HCI_CMD_TIMEOUT);
+
+ /* If command return a status event, skb will be set to -ENODATA */
+ if (skb == ERR_PTR(-ENODATA))
+ return 0;
+
+ if (IS_ERR(skb)) {
+ bt_dev_err(hdev, "Opcode 0x%4.4x failed: %ld",
+ HCI_OP_LE_SET_EXT_ADV_PARAMS, PTR_ERR(skb));
+ return PTR_ERR(skb);
+ }
+
+ if (skb->len != sizeof(*rp)) {
+ bt_dev_err(hdev, "Invalid response length for 0x%4.4x: %u",
+ HCI_OP_LE_SET_EXT_ADV_PARAMS, skb->len);
+ kfree_skb(skb);
+ return -EIO;
+ }
+
+ memcpy(rp, skb->data, sizeof(*rp));
+ kfree_skb(skb);
+
+ if (!rp->status) {
+ hdev->adv_addr_type = cp->own_addr_type;
+ if (!cp->handle) {
+ /* Store in hdev for instance 0 */
+ hdev->adv_tx_power = rp->tx_power;
+ } else if (adv) {
+ adv->tx_power = rp->tx_power;
+ }
+ }
+
+ return rp->status;
+}
+
+static int hci_set_ext_adv_data_sync(struct hci_dev *hdev, u8 instance)
+{
+ struct {
+ struct hci_cp_le_set_ext_adv_data cp;
+ u8 data[HCI_MAX_EXT_AD_LENGTH];
+ } pdu;
+ u8 len;
+ struct adv_info *adv = NULL;
+ int err;
+
+ memset(&pdu, 0, sizeof(pdu));
+
+ if (instance) {
+ adv = hci_find_adv_instance(hdev, instance);
+ if (!adv || !adv->adv_data_changed)
+ return 0;
+ }
+
+ len = eir_create_adv_data(hdev, instance, pdu.data);
+
+ pdu.cp.length = len;
+ pdu.cp.handle = instance;
+ pdu.cp.operation = LE_SET_ADV_DATA_OP_COMPLETE;
+ pdu.cp.frag_pref = LE_SET_ADV_DATA_NO_FRAG;
+
+ err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_DATA,
+ sizeof(pdu.cp) + len, &pdu.cp,
+ HCI_CMD_TIMEOUT);
+ if (err)
+ return err;
+
+ /* Update data if the command succeed */
+ if (adv) {
+ adv->adv_data_changed = false;
+ } else {
+ memcpy(hdev->adv_data, pdu.data, len);
+ hdev->adv_data_len = len;
+ }
+
+ return 0;
+}
+
+static int hci_set_adv_data_sync(struct hci_dev *hdev, u8 instance)
+{
+ struct hci_cp_le_set_adv_data cp;
+ u8 len;
+
+ memset(&cp, 0, sizeof(cp));
+
+ len = eir_create_adv_data(hdev, instance, cp.data);
+
+ /* There's nothing to do if the data hasn't changed */
+ if (hdev->adv_data_len == len &&
+ memcmp(cp.data, hdev->adv_data, len) == 0)
+ return 0;
+
+ memcpy(hdev->adv_data, cp.data, sizeof(cp.data));
+ hdev->adv_data_len = len;
+
+ cp.length = len;
+
+ return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_ADV_DATA,
+ sizeof(cp), &cp, HCI_CMD_TIMEOUT);
+}
+
+int hci_update_adv_data_sync(struct hci_dev *hdev, u8 instance)
+{
+ if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
+ return 0;
+
+ if (ext_adv_capable(hdev))
+ return hci_set_ext_adv_data_sync(hdev, instance);
+
+ return hci_set_adv_data_sync(hdev, instance);
+}
+
int hci_setup_ext_adv_instance_sync(struct hci_dev *hdev, u8 instance)
{
struct hci_cp_le_set_ext_adv_params cp;
+ struct hci_rp_le_set_ext_adv_params rp;
bool connectable;
u32 flags;
bdaddr_t random_addr;
@@ -1333,8 +1453,12 @@ int hci_setup_ext_adv_instance_sync(struct hci_dev *hdev, u8 instance)
cp.secondary_phy = HCI_ADV_PHY_1M;
}
- err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS,
- sizeof(cp), &cp, HCI_CMD_TIMEOUT);
+ err = hci_set_ext_adv_params_sync(hdev, adv, &cp, &rp);
+ if (err)
+ return err;
+
+ /* Update adv data as tx power is known now */
+ err = hci_set_ext_adv_data_sync(hdev, cp.handle);
if (err)
return err;
@@ -1859,82 +1983,6 @@ int hci_le_terminate_big_sync(struct hci_dev *hdev, u8 handle, u8 reason)
sizeof(cp), &cp, HCI_CMD_TIMEOUT);
}
-static int hci_set_ext_adv_data_sync(struct hci_dev *hdev, u8 instance)
-{
- struct {
- struct hci_cp_le_set_ext_adv_data cp;
- u8 data[HCI_MAX_EXT_AD_LENGTH];
- } pdu;
- u8 len;
- struct adv_info *adv = NULL;
- int err;
-
- memset(&pdu, 0, sizeof(pdu));
-
- if (instance) {
- adv = hci_find_adv_instance(hdev, instance);
- if (!adv || !adv->adv_data_changed)
- return 0;
- }
-
- len = eir_create_adv_data(hdev, instance, pdu.data);
-
- pdu.cp.length = len;
- pdu.cp.handle = instance;
- pdu.cp.operation = LE_SET_ADV_DATA_OP_COMPLETE;
- pdu.cp.frag_pref = LE_SET_ADV_DATA_NO_FRAG;
-
- err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_DATA,
- sizeof(pdu.cp) + len, &pdu.cp,
- HCI_CMD_TIMEOUT);
- if (err)
- return err;
-
- /* Update data if the command succeed */
- if (adv) {
- adv->adv_data_changed = false;
- } else {
- memcpy(hdev->adv_data, pdu.data, len);
- hdev->adv_data_len = len;
- }
-
- return 0;
-}
-
-static int hci_set_adv_data_sync(struct hci_dev *hdev, u8 instance)
-{
- struct hci_cp_le_set_adv_data cp;
- u8 len;
-
- memset(&cp, 0, sizeof(cp));
-
- len = eir_create_adv_data(hdev, instance, cp.data);
-
- /* There's nothing to do if the data hasn't changed */
- if (hdev->adv_data_len == len &&
- memcmp(cp.data, hdev->adv_data, len) == 0)
- return 0;
-
- memcpy(hdev->adv_data, cp.data, sizeof(cp.data));
- hdev->adv_data_len = len;
-
- cp.length = len;
-
- return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_ADV_DATA,
- sizeof(cp), &cp, HCI_CMD_TIMEOUT);
-}
-
-int hci_update_adv_data_sync(struct hci_dev *hdev, u8 instance)
-{
- if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
- return 0;
-
- if (ext_adv_capable(hdev))
- return hci_set_ext_adv_data_sync(hdev, instance);
-
- return hci_set_adv_data_sync(hdev, instance);
-}
-
int hci_schedule_adv_instance_sync(struct hci_dev *hdev, u8 instance,
bool force)
{
@@ -6257,6 +6305,7 @@ static int hci_le_ext_directed_advertising_sync(struct hci_dev *hdev,
struct hci_conn *conn)
{
struct hci_cp_le_set_ext_adv_params cp;
+ struct hci_rp_le_set_ext_adv_params rp;
int err;
bdaddr_t random_addr;
u8 own_addr_type;
@@ -6298,8 +6347,12 @@ static int hci_le_ext_directed_advertising_sync(struct hci_dev *hdev,
if (err)
return err;
- err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS,
- sizeof(cp), &cp, HCI_CMD_TIMEOUT);
+ err = hci_set_ext_adv_params_sync(hdev, NULL, &cp, &rp);
+ if (err)
+ return err;
+
+ /* Update adv data as tx power is known now */
+ err = hci_set_ext_adv_data_sync(hdev, cp.handle);
if (err)
return err;
--
2.43.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* RE: [6.6.y,v2] Bluetooth: HCI: Set extended advertising data synchronously
2025-07-09 9:05 ` [PATCH 6.6.y v2] " Christian Eggers
@ 2025-07-09 9:20 ` bluez.test.bot
0 siblings, 0 replies; 10+ messages in thread
From: bluez.test.bot @ 2025-07-09 9:20 UTC (permalink / raw)
To: linux-bluetooth, ceggers
[-- Attachment #1: Type: text/plain, Size: 658 bytes --]
This is an automated email and please do not reply to this email.
Dear Submitter,
Thank you for submitting the patches to the linux bluetooth mailing list.
While preparing the CI tests, the patches you submitted couldn't be applied to the current HEAD of the repository.
----- Output -----
error: patch failed: net/bluetooth/hci_event.c:2139
error: net/bluetooth/hci_event.c: patch does not apply
error: patch failed: net/bluetooth/hci_sync.c:1224
error: net/bluetooth/hci_sync.c: patch does not apply
hint: Use 'git am --show-current-patch' to see the failed patch
Please resolve the issue and submit the patches again.
---
Regards,
Linux Bluetooth
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2025-07-09 9:20 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <2025070625-wafer-speed-20c1@gregkh>
2025-07-07 8:02 ` [PATCH 6.6.y] Bluetooth: HCI: Set extended advertising data synchronously Christian Eggers
2025-07-07 8:11 ` Greg KH
2025-07-07 8:24 ` [6.6.y] " bluez.test.bot
2025-07-07 8:13 ` [PATCH 6.6.y] " Christian Eggers
2025-07-08 15:36 ` Greg KH
2025-07-08 15:56 ` Luiz Augusto von Dentz
2025-07-08 21:14 ` Christian Eggers
2025-07-09 6:19 ` Greg KH
2025-07-09 9:05 ` [PATCH 6.6.y v2] " Christian Eggers
2025-07-09 9:20 ` [6.6.y,v2] " bluez.test.bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox