diff options
author | Andre Guedes <andre.guedes@openbossa.org> | 2012-04-24 20:02:55 -0400 |
---|---|---|
committer | Gustavo Padovan <gustavo@padovan.org> | 2012-05-09 00:40:45 -0400 |
commit | 8e9f98921c0718cda76bc53c2b51954657b60fa6 (patch) | |
tree | 415c3e8a59f774e0b056c152b22b5b0ee63d0857 /net/bluetooth | |
parent | b12f62cfd9f46ac70013ce661640174b489efd39 (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.c | 11 | ||||
-rw-r--r-- | net/bluetooth/l2cap_sock.c | 2 |
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 | ||
1397 | int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid, bdaddr_t *dst) | 1397 | int 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 | ||