Bluetooth: Fix reason code used for rejecting SCO connections
authorJohan Hedberg <johan.hedberg@intel.com>
Wed, 24 Sep 2014 10:14:46 +0000 (13:14 +0300)
committerMarcel Holtmann <marcel@holtmann.org>
Wed, 24 Sep 2014 12:03:32 +0000 (14:03 +0200)
The core specification defines valid values for the
HCI_Reject_Synchronous_Connection_Request command to be 0x0D-0x0F. So
far the code has been using HCI_ERROR_REMOTE_USER_TERM (0x13) which is
not a valid value and is therefore being rejected by some controllers:

 > HCI Event: Connect Request (0x04) plen 10
bdaddr 40:6F:2A:6A:E5:E0 class 0x000000 type eSCO
 < HCI Command: Reject Synchronous Connection (0x01|0x002a) plen 7
bdaddr 40:6F:2A:6A:E5:E0 reason 0x13
Reason: Remote User Terminated Connection
 > HCI Event: Command Status (0x0f) plen 4
Reject Synchronous Connection (0x01|0x002a) status 0x12 ncmd 1
Error: Invalid HCI Command Parameters

This patch introduces a new define for a value from the valid range
(0x0d == Connection Rejected Due To Limited Resources) and uses it
instead for rejecting incoming connections.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
include/net/bluetooth/hci.h
net/bluetooth/hci_conn.c

index 3f8547f1c6f8c019cc33677fe8053c9ebf608fe2..6e8f249673089badfb3e512341478171ada9d174 100644 (file)
@@ -385,6 +385,7 @@ enum {
 #define HCI_ERROR_AUTH_FAILURE         0x05
 #define HCI_ERROR_MEMORY_EXCEEDED      0x07
 #define HCI_ERROR_CONNECTION_TIMEOUT   0x08
+#define HCI_ERROR_REJ_LIMITED_RESOURCES        0x0d
 #define HCI_ERROR_REJ_BAD_ADDR         0x0f
 #define HCI_ERROR_REMOTE_USER_TERM     0x13
 #define HCI_ERROR_REMOTE_LOW_RESOURCES 0x14
index 22b253750f787eaeebc85dad41dcee8ec1f99469..445829cd363c77211bfbd36a4458b7a3edb25cdb 100644 (file)
@@ -121,7 +121,7 @@ static void hci_reject_sco(struct hci_conn *conn)
 {
        struct hci_cp_reject_sync_conn_req cp;
 
-       cp.reason = HCI_ERROR_REMOTE_USER_TERM;
+       cp.reason = HCI_ERROR_REJ_LIMITED_RESOURCES;
        bacpy(&cp.bdaddr, &conn->dst);
 
        hci_send_cmd(conn->hdev, HCI_OP_REJECT_SYNC_CONN_REQ, sizeof(cp), &cp);