Return-Path: Date: Wed, 28 Mar 2012 11:56:40 +0300 From: Andrei Emeltchenko To: Andre Guedes Cc: linux-bluetooth@vger.kernel.org Subject: Re: [RFC 3/3] Bluetooth: Use address type info from User-space Message-ID: <20120328085638.GC21905@aemeltch-MOBL1> References: <1332892776-12060-1-git-send-email-andre.guedes@openbossa.org> <1332892776-12060-4-git-send-email-andre.guedes@openbossa.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii In-Reply-To: <1332892776-12060-4-git-send-email-andre.guedes@openbossa.org> Sender: linux-bluetooth-owner@vger.kernel.org List-ID: Hi Andre, On Tue, Mar 27, 2012 at 08:59:36PM -0300, Andre Guedes wrote: > 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 > --- > include/net/bluetooth/l2cap.h | 2 +- > net/bluetooth/l2cap_core.c | 11 ++++++----- > net/bluetooth/l2cap_sock.c | 2 +- > 3 files changed, 8 insertions(+), 7 deletions(-) > > diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h > index d14967e..262628c 100644 > --- a/include/net/bluetooth/l2cap.h > +++ b/include/net/bluetooth/l2cap.h > @@ -911,7 +911,7 @@ struct l2cap_chan *l2cap_chan_create(void); > void l2cap_chan_close(struct l2cap_chan *chan, int reason); > void l2cap_chan_destroy(struct l2cap_chan *chan); > int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid, > - bdaddr_t *dst); > + bdaddr_t *dst, u8 dst_type); > int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len, > u32 priority); > void l2cap_chan_busy(struct l2cap_chan *chan, int busy); > diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c > index 91b02de..e0dc4ca 100644 > --- a/net/bluetooth/l2cap_core.c > +++ b/net/bluetooth/l2cap_core.c > @@ -1131,7 +1131,8 @@ static struct l2cap_chan *l2cap_global_chan_by_psm(int state, __le16 psm, bdaddr > return c1; > } > > -int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid, bdaddr_t *dst) > +int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid, > + bdaddr_t *dst, u8 dst_type) > { > struct sock *sk = chan->sk; > bdaddr_t *src = &bt_sk(sk)->src; > @@ -1141,8 +1142,8 @@ int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid, bdaddr_t *d > __u8 auth_type; > int err; > > - BT_DBG("%s -> %s psm 0x%2.2x", batostr(src), batostr(dst), > - __le16_to_cpu(chan->psm)); > + BT_DBG("%s -> %s (type %u) psm 0x%2.2x", batostr(src), batostr(dst), > + dst_type, __le16_to_cpu(chan->psm)); If you change style for other functions you might change it here as well. > > hdev = hci_get_route(dst, src); > if (!hdev) > @@ -1216,10 +1217,10 @@ int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid, bdaddr_t *d > auth_type = l2cap_get_auth_type(chan); > > if (chan->dcid == L2CAP_CID_LE_DATA) > - hcon = hci_connect(hdev, LE_LINK, dst, MGMT_ADDR_LE_RANDOM, > + hcon = hci_connect(hdev, LE_LINK, dst, dst_type, > chan->sec_level, auth_type); > else > - hcon = hci_connect(hdev, ACL_LINK, dst, MGMT_ADDR_BREDR, > + hcon = hci_connect(hdev, ACL_LINK, dst, dst_type, > chan->sec_level, auth_type); > > if (IS_ERR(hcon)) { > diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c > index 53e563f..4b38cf8 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 > return -EINVAL; > > err = l2cap_chan_connect(chan, la.l2_psm, __le16_to_cpu(la.l2_cid), > - &la.l2_bdaddr); > + &la.l2_bdaddr, la.l2_bdaddr_type); Would it make sense to pass la as a parameter? Best regards Andrei Emeltchenko