aboutsummaryrefslogtreecommitdiffstats
path: root/net/bluetooth
diff options
context:
space:
mode:
authorAndre Guedes <andre.guedes@openbossa.org>2012-04-24 20:02:55 -0400
committerGustavo Padovan <gustavo@padovan.org>2012-05-09 00:40:45 -0400
commit8e9f98921c0718cda76bc53c2b51954657b60fa6 (patch)
tree415c3e8a59f774e0b056c152b22b5b0ee63d0857 /net/bluetooth
parentb12f62cfd9f46ac70013ce661640174b489efd39 (diff)
Bluetooth: Use address type info from user-space
In order to establish a LE connection we need the address type information. User-space already pass this information to kernel through struct sockaddr_l2. This patch adds the dst_type parameter to l2cap_chan_connect so we are able to pass the address type info from user-space down to hci_conn layer. Signed-off-by: Andre Guedes <andre.guedes@openbossa.org> Acked-by: Johan Hedberg <johan.hedberg@intel.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'net/bluetooth')
-rw-r--r--net/bluetooth/l2cap_core.c11
-rw-r--r--net/bluetooth/l2cap_sock.c2
2 files changed, 7 insertions, 6 deletions
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index 61af06d35335..4b6d11c199b5 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -1394,7 +1394,8 @@ static struct l2cap_chan *l2cap_global_chan_by_psm(int state, __le16 psm,
1394 return c1; 1394 return c1;
1395} 1395}
1396 1396
1397int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid, bdaddr_t *dst) 1397int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
1398 bdaddr_t *dst, u8 dst_type)
1398{ 1399{
1399 struct sock *sk = chan->sk; 1400 struct sock *sk = chan->sk;
1400 bdaddr_t *src = &bt_sk(sk)->src; 1401 bdaddr_t *src = &bt_sk(sk)->src;
@@ -1404,8 +1405,8 @@ int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid, bdaddr_t *d
1404 __u8 auth_type; 1405 __u8 auth_type;
1405 int err; 1406 int err;
1406 1407
1407 BT_DBG("%s -> %s psm 0x%2.2x", batostr(src), batostr(dst), 1408 BT_DBG("%s -> %s (type %u) psm 0x%2.2x", batostr(src), batostr(dst),
1408 __le16_to_cpu(chan->psm)); 1409 dst_type, __le16_to_cpu(chan->psm));
1409 1410
1410 hdev = hci_get_route(dst, src); 1411 hdev = hci_get_route(dst, src);
1411 if (!hdev) 1412 if (!hdev)
@@ -1479,10 +1480,10 @@ int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid, bdaddr_t *d
1479 auth_type = l2cap_get_auth_type(chan); 1480 auth_type = l2cap_get_auth_type(chan);
1480 1481
1481 if (chan->dcid == L2CAP_CID_LE_DATA) 1482 if (chan->dcid == L2CAP_CID_LE_DATA)
1482 hcon = hci_connect(hdev, LE_LINK, dst, BDADDR_LE_RANDOM, 1483 hcon = hci_connect(hdev, LE_LINK, dst, dst_type,
1483 chan->sec_level, auth_type); 1484 chan->sec_level, auth_type);
1484 else 1485 else
1485 hcon = hci_connect(hdev, ACL_LINK, dst, BDADDR_BREDR, 1486 hcon = hci_connect(hdev, ACL_LINK, dst, dst_type,
1486 chan->sec_level, auth_type); 1487 chan->sec_level, auth_type);
1487 1488
1488 if (IS_ERR(hcon)) { 1489 if (IS_ERR(hcon)) {
diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
index 8d8b50a29906..2b5e7e81c3c0 100644
--- a/net/bluetooth/l2cap_sock.c
+++ b/net/bluetooth/l2cap_sock.c
@@ -124,7 +124,7 @@ static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int al
124 return -EINVAL; 124 return -EINVAL;
125 125
126 err = l2cap_chan_connect(chan, la.l2_psm, __le16_to_cpu(la.l2_cid), 126 err = l2cap_chan_connect(chan, la.l2_psm, __le16_to_cpu(la.l2_cid),
127 &la.l2_bdaddr); 127 &la.l2_bdaddr, la.l2_bdaddr_type);
128 if (err) 128 if (err)
129 return err; 129 return err;
130 130