Re: [PATCH v4 4/4] Bluetooth: bnep: Handle BNEP connection setup request

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Marcel,


On 1 April 2015 at 22:28, Marcel Holtmann <marcel@xxxxxxxxxxxx> wrote:
> Hi Grzegorz,
>
>> With this patch kernel will be able to handle setup request. This is
>> needed if we would like to handle control mesages with extension
>> headers. User space will be only resposible for reading setup data and
>> checking if scenario is conformance to specification (dst and src device
>> bnep role). In case of new user space, setup data must be leaved(peek
>> msg) on queue. New bnep session will be responsible for handling this
>> data.
>>
>> Signed-off-by: Grzegorz Kolodziejczyk <grzegorz.kolodziejczyk@xxxxxxxxx>
>> ---
>> net/bluetooth/bnep/bnep.h |  3 +++
>> net/bluetooth/bnep/core.c | 10 +++++++++-
>> net/bluetooth/bnep/sock.c |  2 +-
>> 3 files changed, 13 insertions(+), 2 deletions(-)
>>
>> diff --git a/net/bluetooth/bnep/bnep.h b/net/bluetooth/bnep/bnep.h
>> index 8709733..40854c9 100644
>> --- a/net/bluetooth/bnep/bnep.h
>> +++ b/net/bluetooth/bnep/bnep.h
>> @@ -113,6 +113,9 @@ struct bnep_ext_hdr {
>> #define BNEPGETCONNINFO       _IOR('B', 211, int)
>> #define BNEPGETSUPPFEAT       _IOR('B', 212, int)
>>
>> +#define BNEP_SETUP_RESPONSE  0
>> +#define BNEP_SETUP_RSP_SENT  10
>> +
>> struct bnep_connadd_req {
>>       int   sock;             /* Connected socket */
>>       __u32 flags;
>> diff --git a/net/bluetooth/bnep/core.c b/net/bluetooth/bnep/core.c
>> index 77ae725..2135b89 100644
>> --- a/net/bluetooth/bnep/core.c
>> +++ b/net/bluetooth/bnep/core.c
>> @@ -231,7 +231,14 @@ static int bnep_rx_control(struct bnep_session *s, void *data, int len)
>>               break;
>>
>>       case BNEP_SETUP_CONN_REQ:
>> -             err = bnep_send_rsp(s, BNEP_SETUP_CONN_RSP, BNEP_CONN_NOT_ALLOWED);
>> +             /* Successful response should be sent only once */
>> +             if (test_bit(BNEP_SETUP_RESPONSE, &s->flags) &&
>> +                 !test_and_set_bit(BNEP_SETUP_RSP_SENT, &s->flags))
>> +                     err = bnep_send_rsp(s, BNEP_SETUP_CONN_RSP,
>> +                                         BNEP_SUCCESS);
>> +             else
>> +                     err = bnep_send_rsp(s, BNEP_SETUP_CONN_RSP,
>> +                                         BNEP_CONN_NOT_ALLOWED);
>>               break;
>>
>>       default: {
>> @@ -592,6 +599,7 @@ int bnep_add_connection(struct bnep_connadd_req *req, struct socket *sock)
>>       s->sock  = sock;
>>       s->role  = req->role;
>>       s->state = BT_CONNECTED;
>> +     s->flags = req->flags & (1 << BNEP_SETUP_RESPONSE);
>
> Use BIT() here as well.
>
> However this is not really what I asked for. What I asked for was to actually reject any flags that do not have 0 or BIT(0) set. I mean you would just create a mask for this.
>
Sorry, I've must misunderstood you. So now I'll rebase on your "mask
bnep flags" patch and set valid_flags to BIT(BNEP_SETUP_RESPONSE) with
session flags set to BIT(BNEP_SETUP_RESPONSE) also - is it ok ?
>>       s->msg.msg_flags = MSG_NOSIGNAL;
>>
>> diff --git a/net/bluetooth/bnep/sock.c b/net/bluetooth/bnep/sock.c
>> index f18b6bd..116e7d3 100644
>> --- a/net/bluetooth/bnep/sock.c
>> +++ b/net/bluetooth/bnep/sock.c
>> @@ -58,7 +58,7 @@ static int bnep_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long
>>       struct socket *nsock;
>>       void __user *argp = (void __user *)arg;
>>       int err;
>> -     const __u32 supp_feat = 0;
>> +     const __u32 supp_feat = BIT(BNEP_SETUP_RESPONSE);
>>
>>
>>       BT_DBG("cmd %x arg %lx", cmd, arg);
>
> Regards
>
> Marcel
>
Regards,
Grzegorz
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux