From: Andrei Emeltchenko <Andrei.Emeltchenko.news@gmail.com>
To: linux-bluetooth@vger.kernel.org
Subject: [RFCv4 20/30] Bluetooth: A2MP: Process A2MP Get Info Request
Date: Thu, 15 Mar 2012 14:30:11 +0200 [thread overview]
Message-ID: <1331814621-13905-21-git-send-email-Andrei.Emeltchenko.news@gmail.com> (raw)
In-Reply-To: <1331814621-13905-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Example of trace log for invalid controller id is shown below:
...
> ACL data: handle 11 flags 0x02 dlen 13
A2MP: Get Info req: id 238
< ACL data: handle 11 flags 0x00 dlen 30
A2MP: Get Info rsp: id 238 status (1) Invalid Controller ID
total bandwidth -381650496
max guaranteed bandwidth -274362188
min latency -158843144
pal capabilities 0x9750
assoc size 49478
...
Note that If the Status field is set to Invalid Controller ID all subsequent
fields in the AMP Get Info Response shall be ignored by the receiver.
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
---
net/bluetooth/a2mp.c | 37 +++++++++++++++++++++++++++++++++++++
1 files changed, 37 insertions(+), 0 deletions(-)
diff --git a/net/bluetooth/a2mp.c b/net/bluetooth/a2mp.c
index 4b8e369..96d4dfe 100644
--- a/net/bluetooth/a2mp.c
+++ b/net/bluetooth/a2mp.c
@@ -12,6 +12,8 @@
GNU General Public License for more details.
*/
+#include <linux/module.h>
+
#include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>
#include <net/bluetooth/l2cap.h>
@@ -179,6 +181,38 @@ static inline int a2mp_change_notify(struct amp_mgr *mgr, struct sk_buff *skb,
return 0;
}
+static inline int a2mp_getinfo_req(struct amp_mgr *mgr, struct sk_buff *skb,
+ struct a2mp_cmd *hdr)
+{
+ struct a2mp_info_req *req = (struct a2mp_info_req *)skb->data;
+ struct hci_dev *hdev;
+ struct a2mp_info_rsp rsp;
+
+ if (le16_to_cpu(hdr->len) < sizeof(*req))
+ return -EINVAL;
+
+ rsp.id = req->id;
+ rsp.status = A2MP_STATUS_INVALID_CTRL_ID;
+
+ hdev = hci_dev_get(req->id);
+ if (hdev && hdev->amp_type != HCI_BREDR) {
+ rsp.status = 0;
+ rsp.total_bw = cpu_to_le32(hdev->amp_total_bw);
+ rsp.max_bw = cpu_to_le32(hdev->amp_max_bw);
+ rsp.min_latency = cpu_to_le32(hdev->amp_min_latency);
+ rsp.pal_cap = cpu_to_le16(hdev->amp_pal_cap);
+ rsp.assoc_size = cpu_to_le16(hdev->amp_assoc_size);
+ }
+
+ if (hdev)
+ hci_dev_put(hdev);
+
+ a2mp_send(mgr, A2MP_GETINFO_RSP, hdr->ident, sizeof(rsp), &rsp);
+
+ skb_pull(skb, sizeof(*req));
+ return 0;
+}
+
/* Handle A2MP signalling */
static int a2mp_chan_recv_cb(void *data, struct sk_buff *skb)
{
@@ -217,6 +251,9 @@ static int a2mp_chan_recv_cb(void *data, struct sk_buff *skb)
break;
case A2MP_GETINFO_REQ:
+ err = a2mp_getinfo_req(mgr, skb, hdr);
+ break;
+
case A2MP_GETAMPASSOC_REQ:
case A2MP_CREATEPHYSLINK_REQ:
case A2MP_DISCONNPHYSLINK_REQ:
--
1.7.9.1
next prev parent reply other threads:[~2012-03-15 12:30 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-15 12:29 [RFCv4 00/30] RFC Bluetooth A2MP implementation Andrei Emeltchenko
2012-03-15 12:29 ` [RFCv4 01/30] Bluetooth: Make ertm_init available Andrei Emeltchenko
2012-03-20 3:04 ` Gustavo Padovan
2012-03-20 8:03 ` Andrei Emeltchenko
2012-03-15 12:29 ` [RFCv4 02/30] Bluetooth: Add send function to chan ops Andrei Emeltchenko
2012-03-15 12:29 ` [RFCv4 03/30] Bluetooth: Make l2cap_chan_add available Andrei Emeltchenko
2012-03-15 12:29 ` [RFCv4 04/30] Bluetooth: Add set_err to state_change callback Andrei Emeltchenko
2012-03-15 12:29 ` [RFCv4 05/30] Bluetooth: Lock sk only if exist Andrei Emeltchenko
2012-03-20 3:03 ` Gustavo Padovan
2012-03-20 12:22 ` Ulisses Furquim
2012-03-20 12:49 ` Andrei Emeltchenko
2012-03-20 12:52 ` Ulisses Furquim
2012-03-15 12:29 ` [RFCv4 06/30] Bluetooth: Timers fixes Andrei Emeltchenko
2012-03-20 3:10 ` Gustavo Padovan
2012-03-20 12:21 ` Ulisses Furquim
2012-03-20 13:00 ` Andrei Emeltchenko
2012-03-15 12:29 ` [RFCv4 07/30] Bluetooth: A2MP: Create A2MP channel Andrei Emeltchenko
2012-03-15 12:29 ` [RFCv4 08/30] Bluetooth: A2MP: AMP Manager basic functions Andrei Emeltchenko
2012-03-15 12:30 ` [RFCv4 09/30] Bluetooth: A2MP: Add channel close callback Andrei Emeltchenko
2012-03-15 12:30 ` [RFCv4 10/30] Bluetooth: Add state_change for A2MP channel Andrei Emeltchenko
2012-03-15 12:30 ` [RFCv4 11/30] Bluetooth: A2MP: Build and Send msg helpers Andrei Emeltchenko
2012-03-17 23:12 ` Gustavo Padovan
2012-03-15 12:30 ` [RFCv4 12/30] Bluetooth: A2MP: skb allocation callback Andrei Emeltchenko
2012-03-15 12:30 ` [RFCv4 13/30] Bluetooth: A2MP: Definitions for A2MP commands Andrei Emeltchenko
2012-03-15 12:30 ` [RFCv4 14/30] Bluetooth: A2MP: Define A2MP status codes Andrei Emeltchenko
2012-03-15 12:30 ` [RFCv4 15/30] Bluetooth: A2MP: Process A2MP messages Andrei Emeltchenko
2012-03-15 12:30 ` [RFCv4 16/30] Bluetooth: A2MP: Process A2MP Command Reject Andrei Emeltchenko
2012-03-15 12:30 ` [RFCv4 17/30] Bluetooth: A2MP: Helper functions to count HCI devs Andrei Emeltchenko
2012-03-15 12:30 ` [RFCv4 18/30] Bluetooth: A2MP: Process A2MP Discover Request Andrei Emeltchenko
2012-03-15 12:30 ` [RFCv4 19/30] Bluetooth: A2MP: Process A2MP Change Notify Andrei Emeltchenko
2012-03-15 12:30 ` Andrei Emeltchenko [this message]
2012-03-15 12:30 ` [RFCv4 21/30] Bluetooth: A2MP: Process A2MP Get AMP Assoc Request Andrei Emeltchenko
2012-03-15 12:30 ` [RFCv4 22/30] Bluetooth: A2MP: Process A2MP Create Physlink Request Andrei Emeltchenko
2012-03-15 12:30 ` [RFCv4 23/30] Bluetooth: A2MP: Process A2MP Disc " Andrei Emeltchenko
2012-03-15 12:30 ` [RFCv4 24/30] Bluetooth: A2MP: Process A2MP Command Responses Andrei Emeltchenko
2012-03-15 12:30 ` [RFCv4 25/30] Bluetooth: A2MP: Handling fixed channels Andrei Emeltchenko
2012-03-15 12:30 ` [RFCv4 26/30] Bluetooth: A2MP: Manage incoming connections Andrei Emeltchenko
2012-03-15 12:30 ` [RFCv4 27/30] Bluetooth: physical link HCI interface to AMP Andrei Emeltchenko
2012-03-15 12:30 ` [RFCv4 28/30] Bluetooth: Define AMP controller statuses Andrei Emeltchenko
2012-03-15 12:30 ` [RFCv4 29/30] Bluetooth: General HCI callback implementation Andrei Emeltchenko
2012-03-15 12:30 ` [RFCv4 30/30] Bluetooth: Process HCI callbacks in a workqueue Andrei Emeltchenko
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=1331814621-13905-21-git-send-email-Andrei.Emeltchenko.news@gmail.com \
--to=andrei.emeltchenko.news@gmail.com \
--cc=linux-bluetooth@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox