From: Jaganath Kanakkassery <jaganath.k.os@gmail.com>
To: linux-bluetooth@vger.kernel.org
Cc: Jaganath Kanakkassery <jaganathx.kanakkassery@intel.com>
Subject: [RFC 8/9] Bluetooth: Handle incoming connection to an adv set
Date: Mon, 4 Dec 2017 13:37:52 +0530 [thread overview]
Message-ID: <1512374873-1956-9-git-send-email-jaganathx.kanakkassery@intel.com> (raw)
In-Reply-To: <1512374873-1956-1-git-send-email-jaganathx.kanakkassery@intel.com>
This patch basically set responder address to the hci conn from
the adv instance to which connection is established.
Signed-off-by: Jaganath Kanakkassery <jaganathx.kanakkassery@intel.com>
---
net/bluetooth/hci_event.c | 47 ++++++++++++++++++++++++++++++++++++++---------
1 file changed, 38 insertions(+), 9 deletions(-)
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 67081ab..92b8308 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -4737,8 +4737,11 @@ static void le_conn_complete_evt(struct hci_dev *hdev, u8 status,
/* All controllers implicitly stop advertising in the event of a
* connection, so ensure that the state bit is cleared.
+ * If ext adv is supported then it would be handled in adv terminated
+ * event.
*/
- hci_dev_clear_flag(hdev, HCI_LE_ADV);
+ if (!ext_adv_capable(hdev))
+ hci_dev_clear_flag(hdev, HCI_LE_ADV);
conn = hci_lookup_le_connect(hdev);
if (!conn) {
@@ -4775,14 +4778,17 @@ static void le_conn_complete_evt(struct hci_dev *hdev, u8 status,
}
if (!conn->out) {
- /* Set the responder (our side) address type based on
- * the advertising address type.
- */
- conn->resp_addr_type = hdev->adv_addr_type;
- if (hdev->adv_addr_type == ADDR_LE_DEV_RANDOM)
- bacpy(&conn->resp_addr, &hdev->random_addr);
- else
- bacpy(&conn->resp_addr, &hdev->bdaddr);
+ /* In ext adv, resp addr will be set in adv terminated event */
+ if (!ext_adv_capable(hdev)) {
+ /* Set the responder (our side) address type based on
+ * the advertising address type.
+ */
+ conn->resp_addr_type = hdev->adv_addr_type;
+ if (hdev->adv_addr_type == ADDR_LE_DEV_RANDOM)
+ bacpy(&conn->resp_addr, &hdev->random_addr);
+ else
+ bacpy(&conn->resp_addr, &hdev->bdaddr);
+ }
conn->init_addr_type = bdaddr_type;
bacpy(&conn->init_addr, bdaddr);
@@ -4929,10 +4935,33 @@ static void hci_le_adv_set_terminated_evt(struct hci_dev *hdev,
/* If this is because of connection */
if (!ev->status) {
+ struct hci_conn *conn;
+
if (!ev->handle)
hci_dev_clear_flag(hdev, HCI_LE_ADV);
else
clear_bit(ADV_INST_ENABLED, &adv_instance->state);
+
+ conn = hci_conn_hash_lookup_handle(hdev,
+ le16_to_cpu(ev->conn_handle));
+ if (conn) {
+ /* Set the responder (our side) address type based on
+ * the advertising address type.
+ */
+ if (!ev->handle) {
+ conn->resp_addr_type = hdev->adv_addr_type;
+ if (hdev->adv_addr_type == ADDR_LE_DEV_RANDOM)
+ bacpy(&conn->resp_addr, &hdev->random_addr);
+ else
+ bacpy(&conn->resp_addr, &hdev->bdaddr);
+ } else {
+ conn->resp_addr_type = adv_instance->addr_type;
+ if (adv_instance->addr_type == ADDR_LE_DEV_RANDOM)
+ bacpy(&conn->resp_addr, &adv_instance->random_addr);
+ else
+ bacpy(&conn->resp_addr, &hdev->bdaddr);
+ }
+ }
} else if (ev->handle) {
/* Remove the instance in all other cases */
err = hci_remove_adv_instance(hdev, ev->handle);
--
2.7.4
next prev parent reply other threads:[~2017-12-04 8:07 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-04 8:07 [RFC 0/9] Extended Adv Jaganath Kanakkassery
2017-12-04 8:07 ` [RFC 1/9] Bluetooth: Read no of adv sets during init Jaganath Kanakkassery
2017-12-05 11:14 ` Luiz Augusto von Dentz
2017-12-07 7:57 ` Jaganath K
2017-12-07 10:42 ` Luiz Augusto von Dentz
2017-12-07 10:59 ` Jaganath K
2017-12-08 8:40 ` Marcel Holtmann
2017-12-08 11:57 ` Jaganath K
2017-12-08 18:34 ` Marcel Holtmann
2018-03-05 11:56 ` Jaganath K
2017-12-04 8:07 ` [RFC 2/9] Bluetooth: Impmlement extended adv enable Jaganath Kanakkassery
2017-12-04 8:07 ` [RFC 3/9] Bluetooth: Use Set ext adv/scan rsp data if controller supports Jaganath Kanakkassery
2017-12-08 8:46 ` Marcel Holtmann
2017-12-08 12:02 ` Jaganath K
2017-12-04 8:07 ` [RFC 4/9] Bluetooth: Implement disable and removal of adv instance Jaganath Kanakkassery
2017-12-04 8:07 ` [RFC 5/9] Bluetooth: Process Adv-Set Terminate event Jaganath Kanakkassery
2017-12-08 8:51 ` Marcel Holtmann
2017-12-04 8:07 ` [RFC 6/9] Bluetooth: Use ext adv for directed adv Jaganath Kanakkassery
2017-12-08 8:56 ` Marcel Holtmann
2017-12-04 8:07 ` [RFC 7/9] Bluetooth: Implement Set ADV set random address Jaganath Kanakkassery
2017-12-04 8:07 ` Jaganath Kanakkassery [this message]
2017-12-04 8:07 ` [RFC 9/9] Bluetooth: Implement secondary advertising on different PHYs Jaganath Kanakkassery
2017-12-08 9:00 ` Marcel Holtmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1512374873-1956-9-git-send-email-jaganathx.kanakkassery@intel.com \
--to=jaganath.k.os@gmail.com \
--cc=jaganathx.kanakkassery@intel.com \
--cc=linux-bluetooth@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).