Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 14 Oct 2012 08:55:33 +0100 (BST)
From:      Iain Hibbert <plunky@rya-online.net>
To:        Andreas Longwitz <longwitz@incore.de>
Cc:        freebsd-bluetooth@freebsd.org
Subject:   Re: btpand problem
Message-ID:  <alpine.NEB.2.00.1210140843330.548@galant.ukfsn.org>
In-Reply-To: <5079E8F7.5050903@incore.de>
References:  <507736A8.4050605@incore.de> <BDA3CA14-92C0-414E-9D55-E96EA7A73312@gmail.com> <5077490F.7010901@incore.de> <CAFPOs6pF51wy9PvKLn4-OnrOqo8hU1S=P5PzTFwgUppBjqAtuA@mail.gmail.com> <alpine.NEB.2.00.1210120949170.628@galant.ukfsn.org> <50782E05.5080005@incore.de> <alpine.NEB.2.00.1210122254010.965@galant.ukfsn.org> <CAFPOs6qWVAcSuPz6%2BB=3uq_KqCXa=YcXwx-PNncGVrbDE8AimQ@mail.gmail.com> <5079E8F7.5050903@incore.de>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, 14 Oct 2012, Andreas Longwitz wrote:

> Hi,
>
> > > > Yes, I used the code fragment
> > > >
> > > > {
> > > >          uint16_t mtu;
> > > >          socklen_t len = sizeof(mtu);
> > > >          getsockopt(chan->fd, SOL_L2CAP, SO_L2CAP_OMTU,&mtu,&len);
> > > >          log_err("writev: %m (mtu %d)\n", mtu);
> > > > }
> > > >
> > > > and found mtu=1691 in all cases (ok or failed), same for SO_L2CAP_IMTU.
> > >
> > > I see, so it seems that the kernel is returning EMSGSIZE when trying to
> > > send a packet that is greater than L2CAP_MTU_DEFAULT..
> > >
> > > you could build the bluetooth netgraph code with debugging turned on, and
> > > see if that kicked anything out about where the error is returned from..
> > > The most obvious place to look at could be ng_btsocket_l2cap_send(), if
> > > that is the one, is pcb->omtu the correct value?
> >
> > there should be sysctl knobs to increase debug level for sockets and
> > ng messages for ng nodes.
> >
> > so, yes, please try to increase debug level for l2cap nodes and
> > sockets and see if anything pops up
>
> After increasing debug_level for net.bluetooth.l2cap from 3 --> 4 and adding a
> statement NG_BTSOCKET_L2CAP_INFO(..) in ng_btsocket_l2cap_send it was clear to
> me that in the case of the failed writev none of the debug statements
> triggers. This information pointed me to the possible solution of the problem.
> The reason for the EMSGSIZE error is the size of the send space reserved with
> soreserve() in ng_btsocket_l2cap_attach. After changing (in
> ng_btsocket_l2cap.h) the line
>   #define NG_BTSOCKET_L2CAP_SENDSPACE   NG_L2CAP_MTU_DEFAULT /* (64 * 1024) */
> to
>   #define NG_BTSOCKET_L2CAP_SENDSPACE  (64 * 1024)
> the error is gone.
> Please verify if this correction is suitable.

Ah

well IMO that default should be changed upwards slightly, since 672 is
rather small for a buffer size..

but, btpand should also ensure that the buffer sizes are suitable. The
server_init() function already does this in FreeBSD, though I also added
some code to increase the RCVBUF size in NetBSD code, and also added (but
didn't yet commit) the similar for client code.. I will prepare a patch

iain



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?alpine.NEB.2.00.1210140843330.548>