From: Marcel Holtmann <marcel@holtmann.org>
To: Syam Sidhardhan <s.syam@samsung.com>
Cc: linux-bluetooth@vger.kernel.org
Subject: Re: [PATCH v1 5/5] Bluetooth: Fix L2CAP dynamic PSM bind issue
Date: Tue, 23 Oct 2012 07:52:02 -0700 [thread overview]
Message-ID: <1351003922.1785.33.camel@aeonflux> (raw)
In-Reply-To: <1350999140-7481-5-git-send-email-s.syam@samsung.com>
Hi Syam,
> Dynamic PSM choosen by the kernel should bound to either BDADDR_ANY
> or the same adapter address(not both) for a particular adapter.
>
> The problem here is by giving PSM 0, the kernel should return the first
> available PSM in the non-reserverd space, but since we reuse the same
> code to do the matching it end up given both Obexd and HDP the same
> PSM.
>
> Provid a helper function to handle the dymanic PSM auto selection.
>
> Signed-off-by: Syam Sidhardhan <s.syam@samsung.com>
> ---
> net/bluetooth/l2cap_core.c | 55 ++++++++++++++++++++++++++++++++++++--------
> 1 file changed, 46 insertions(+), 9 deletions(-)
>
> diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
> index d42cdb1..33b5d34 100644
> --- a/net/bluetooth/l2cap_core.c
> +++ b/net/bluetooth/l2cap_core.c
> @@ -119,6 +119,43 @@ static struct l2cap_chan *__l2cap_global_chan_by_addr(__le16 psm, bdaddr_t *src)
> return NULL;
> }
>
> +/* Returns free dynamic PSM */
> +static u16 __l2cap_global_get_dyna_chan_by_addr(bdaddr_t *src)
> +{
this is a bad name. No idea what kind of meaning "dyna" has.
And btw. there is no such thing as dynamic PSM. It has nothing dynamic
about it. It is an auto-selected PSM. And in the end, it just selects
the next free one.
> + struct l2cap_chan *c;
> + u16 p;
> + bool found;
> +
> + for (p = 0x1001; p < 0x1100; p += 2) {
> + found = false;
> +
> + list_for_each_entry(c, &chan_list, global_l) {
> + if (c->sport != p)
> + continue;
> +
> + /* PSM match found */
> + found = true;
> +
> + /* Exact match */
> + if (!bacmp(&bt_sk(c->sk)->src, src))
> + break;
> +
> + /* BDADDR_ANY match */
> + if (!bacmp(&bt_sk(c->sk)->src, BDADDR_ANY) ||
> + !bacmp(src, BDADDR_ANY))
> + break;
> +
> + /* Match found only for other adapter address */
> + return p;
> + }
> +
> + if (!found)
> + return p;
> + }
> +
> + return 0;
> +}
> +
This code needs a comment on how it is suppose to work and why it is
correct.
> int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm)
> {
> int err;
> @@ -135,16 +172,16 @@ int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm)
> chan->sport = psm;
> err = 0;
> } else {
> - u16 p;
> -
> + /* No PSM given by user space */
> + u16 dpsm;
> err = -EINVAL;
> - for (p = 0x1001; p < 0x1100; p += 2)
> - if (!__l2cap_global_chan_by_addr(cpu_to_le16(p), src)) {
> - chan->psm = cpu_to_le16(p);
> - chan->sport = cpu_to_le16(p);
> - err = 0;
> - break;
> - }
> +
> + dpsm = __l2cap_global_get_dyna_chan_by_addr(src);
> + if (dpsm) {
> + chan->psm = dpsm;
> + chan->sport = dpsm;
> + err = 0;
> + }
> }
>
> done:
Regards
Marcel
next prev parent reply other threads:[~2012-10-23 14:52 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-23 13:32 [PATCH 1/5] Bluetooth: trivial: Remove newline before EOF Syam Sidhardhan
2012-10-23 13:32 ` [PATCH 2/5] Bluetooth: Remove unnecessary include export.h Syam Sidhardhan
2012-10-23 14:44 ` Marcel Holtmann
2012-10-29 15:03 ` Syam Sidhardhan
2012-10-31 18:21 ` Gustavo Padovan
2012-10-23 13:32 ` [PATCH 3/5] Bluetooth: Replace include linux/module.h with linux/export.h Syam Sidhardhan
2012-10-23 14:45 ` Marcel Holtmann
2012-10-24 2:47 ` Gustavo Padovan
2012-10-23 13:32 ` [PATCH 4/5] Bluetooth: mgmt: Use __constant when dealing with constants Syam Sidhardhan
2012-10-23 14:46 ` Marcel Holtmann
2012-10-29 15:05 ` Syam Sidhardhan
2012-10-23 13:32 ` [PATCH v1 5/5] Bluetooth: Fix L2CAP dynamic PSM bind issue Syam Sidhardhan
2012-10-23 14:52 ` Marcel Holtmann [this message]
2012-10-23 14:43 ` [PATCH 1/5] Bluetooth: trivial: Remove newline before EOF Marcel Holtmann
2012-10-24 2:46 ` Gustavo Padovan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1351003922.1785.33.camel@aeonflux \
--to=marcel@holtmann.org \
--cc=linux-bluetooth@vger.kernel.org \
--cc=s.syam@samsung.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).