diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2013-10-13 12:49:54 -0400 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@intel.com> | 2013-10-13 13:00:28 -0400 |
commit | 24bc10cad3a76a4fc0f96a7220d4fe02379826d2 (patch) | |
tree | 7dcd9040adfc7d652e314efda4575eaf13305a74 /net/bluetooth/rfcomm | |
parent | 4f1654e08464abad06487e173661cb73721d27a7 (diff) |
Bluetooth: Access RFCOMM session addresses through L2CAP channel
The L2CAP socket structure does not contain the address information
anymore. They need to be accessed through the L2CAP channel.
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Diffstat (limited to 'net/bluetooth/rfcomm')
-rw-r--r-- | net/bluetooth/rfcomm/core.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/net/bluetooth/rfcomm/core.c b/net/bluetooth/rfcomm/core.c index ca957d34b0c8..27e936a7ddd9 100644 --- a/net/bluetooth/rfcomm/core.c +++ b/net/bluetooth/rfcomm/core.c | |||
@@ -641,13 +641,13 @@ static struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst) | |||
641 | { | 641 | { |
642 | struct rfcomm_session *s; | 642 | struct rfcomm_session *s; |
643 | struct list_head *p, *n; | 643 | struct list_head *p, *n; |
644 | struct bt_sock *sk; | 644 | struct l2cap_chan *chan; |
645 | list_for_each_safe(p, n, &session_list) { | 645 | list_for_each_safe(p, n, &session_list) { |
646 | s = list_entry(p, struct rfcomm_session, list); | 646 | s = list_entry(p, struct rfcomm_session, list); |
647 | sk = bt_sk(s->sock->sk); | 647 | chan = l2cap_pi(s->sock->sk)->chan; |
648 | 648 | ||
649 | if ((!bacmp(src, BDADDR_ANY) || !bacmp(&sk->src, src)) && | 649 | if ((!bacmp(src, BDADDR_ANY) || !bacmp(&chan->src, src)) && |
650 | !bacmp(&sk->dst, dst)) | 650 | !bacmp(&chan->dst, dst)) |
651 | return s; | 651 | return s; |
652 | } | 652 | } |
653 | return NULL; | 653 | return NULL; |
@@ -732,11 +732,11 @@ failed: | |||
732 | 732 | ||
733 | void rfcomm_session_getaddr(struct rfcomm_session *s, bdaddr_t *src, bdaddr_t *dst) | 733 | void rfcomm_session_getaddr(struct rfcomm_session *s, bdaddr_t *src, bdaddr_t *dst) |
734 | { | 734 | { |
735 | struct sock *sk = s->sock->sk; | 735 | struct l2cap_chan *chan = l2cap_pi(s->sock->sk)->chan; |
736 | if (src) | 736 | if (src) |
737 | bacpy(src, &bt_sk(sk)->src); | 737 | bacpy(src, &chan->src); |
738 | if (dst) | 738 | if (dst) |
739 | bacpy(dst, &bt_sk(sk)->dst); | 739 | bacpy(dst, &chan->dst); |
740 | } | 740 | } |
741 | 741 | ||
742 | /* ---- RFCOMM frame sending ---- */ | 742 | /* ---- RFCOMM frame sending ---- */ |
@@ -2112,12 +2112,11 @@ static int rfcomm_dlc_debugfs_show(struct seq_file *f, void *x) | |||
2112 | rfcomm_lock(); | 2112 | rfcomm_lock(); |
2113 | 2113 | ||
2114 | list_for_each_entry(s, &session_list, list) { | 2114 | list_for_each_entry(s, &session_list, list) { |
2115 | struct l2cap_chan *chan = l2cap_pi(s->sock->sk)->chan; | ||
2115 | struct rfcomm_dlc *d; | 2116 | struct rfcomm_dlc *d; |
2116 | list_for_each_entry(d, &s->dlcs, list) { | 2117 | list_for_each_entry(d, &s->dlcs, list) { |
2117 | struct sock *sk = s->sock->sk; | ||
2118 | |||
2119 | seq_printf(f, "%pMR %pMR %ld %d %d %d %d\n", | 2118 | seq_printf(f, "%pMR %pMR %ld %d %d %d %d\n", |
2120 | &bt_sk(sk)->src, &bt_sk(sk)->dst, | 2119 | &chan->src, &chan->dst, |
2121 | d->state, d->dlci, d->mtu, | 2120 | d->state, d->dlci, d->mtu, |
2122 | d->rx_credits, d->tx_credits); | 2121 | d->rx_credits, d->tx_credits); |
2123 | } | 2122 | } |