public inbox for linux-bluetooth@vger.kernel.org
 help / color / mirror / Atom feed
* [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