Commit Graph

10 Commits

Author SHA1 Message Date
Bastien Nocera 75701020c7 Bluetooth: Implement support for Mesh
JIRA: https://issues.redhat.com/browse/RHEL-2530

commit b338d91703fae6f6afd67f3f75caa3b8f36ddef3
Author: Brian Gix <brian.gix@intel.com>
Date:   Thu Sep 1 12:19:13 2022 -0700

    Bluetooth: Implement support for Mesh

    The patch adds state bits, storage and HCI command chains for sending
    and receiving Bluetooth Mesh advertising packets, and delivery to
    requesting user space processes. It specifically creates 4 new MGMT
    commands and 2 new MGMT events:

    MGMT_OP_SET_MESH_RECEIVER - Sets passive scan parameters and a list of
    AD Types which will trigger Mesh Packet Received events

    MGMT_OP_MESH_READ_FEATURES - Returns information on how many outbound
    Mesh packets can be simultaneously queued, and what the currently queued
    handles are.

    MGMT_OP_MESH_SEND - Command to queue a specific outbound Mesh packet,
    with the number of times it should be sent, and the BD Addr to use.
    Discrete advertisments are added to the ADV Instance list.

    MGMT_OP_MESH_SEND_CANCEL - Command to cancel a prior outbound message
    request.

    MGMT_EV_MESH_DEVICE_FOUND - Event to deliver entire received Mesh
    Advertisement packet, along with timing information.

    MGMT_EV_MESH_PACKET_CMPLT - Event to indicate that an outbound packet is
    no longer queued for delivery.

    Signed-off-by: Brian Gix <brian.gix@intel.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

Signed-off-by: Bastien Nocera <bnocera@redhat.com>
2023-10-23 09:05:17 +02:00
Gopal Tiwari 64d43b4318 Bluetooth: Keep MGMT pending queue ordered FIFO
Bugzilla: http://bugzilla.redhat.com/2124521

commit 31396dd53f32d5d82655d84ab31e193ace836688
Author: Brian Gix <brian.gix@intel.com>
Date:   Thu Mar 31 11:07:47 2022 -0700

    Bluetooth: Keep MGMT pending queue ordered FIFO

    Small change to add new commands to tail of the list, and find/remove them
    from the head of the list.

    Signed-off-by: Brian Gix <brian.gix@intel.com>
    Signed-off-by: Marcel Holtmann <marcel@holtmann.org>

Signed-off-by: Gopal Tiwari <gtiwari@redhat.com>
2022-10-18 10:32:29 +05:30
Gopal Tiwari 418c1a0c07 Bluetooth: assign len after null check
Bugzilla: http://bugzilla.redhat.com/2066188

commit 2e8ecb4bbc13d4752d64a9f8f5512d59125cab25
Author: Wang Qing <wangqing@vivo.com>
Date:   Mon Feb 14 18:01:56 2022 -0800

    Bluetooth: assign len after null check

    len should be assigned after a null check

    Signed-off-by: Wang Qing <wangqing@vivo.com>
    Signed-off-by: Marcel Holtmann <marcel@holtmann.org>

Signed-off-by: Gopal Tiwari <gtiwari@redhat.com>
2022-04-27 11:49:08 +05:30
Gopal Tiwari 38140d7e08 Bluetooth: mgmt: Introduce mgmt_alloc_skb and mgmt_send_event_skb
Bugzilla: http://bugzilla.redhat.com/2066188

commit 8aca46f91c42020bc58cd56e464a1101e517aa10
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Fri Dec 3 16:15:40 2021 -0800

    Bluetooth: mgmt: Introduce mgmt_alloc_skb and mgmt_send_event_skb

    This introduces mgmt_alloc_skb and mgmt_send_event_skb which are
    convenient when building MGMT events that have variable length as the
    likes of skb_put_data can be used to insert portion directly on the skb
    instead of having to first build an intermediate buffer just to be
    copied over the skb.

    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Marcel Holtmann <marcel@holtmann.org>

Signed-off-by: Gopal Tiwari <gtiwari@redhat.com>
2022-04-27 11:49:05 +05:30
Gopal Tiwari 8b5661c87d Bluetooth: hci_sync: Make use of hci_cmd_sync_queue set 1
Bugzilla: http://bugzilla.redhat.com/2066188

commit 161510ccf91c961638940b03abb1ee804be53a97
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Wed Oct 27 16:58:39 2021 -0700

    Bluetooth: hci_sync: Make use of hci_cmd_sync_queue set 1

    This make use of hci_cmd_sync_queue for the following MGMT commands:

    Set Device Class
    Set Device ID
    Add UUID
    Remove UUID

    tools/mgmt-tester -s "Set Device Class"

    Test Summary
    ------------
    Set Device Class - Success 1                         Passed
    Set Device Class - Success 2                         Passed
    Set Device Class - Invalid parameters 1              Passed
    Total: 3, Passed: 3 (100.0%), Failed: 0, Not Run: 0
    Overall execution time: 0.0599 seconds

    tools/mgmt-tester -s "Set Device ID"

    Test Summary
    ------------
    Set Device ID - Success 1                            Passed
    Set Device ID - Success 2                            Passed
    Set Device ID - Disable                              Passed
    Set Device ID - Power off and Power on               Passed
    Set Device ID - SSP off and Power on                 Passed
    Set Device ID - Invalid Parameter                    Passed
    Total: 6, Passed: 6 (100.0%), Failed: 0, Not Run: 0
    Overall execution time: 0.107 seconds

    tools/mgmt-tester -s "Add UUID"

    Test Summary
    ------------
    Add UUID - UUID-16 1                                 Passed
    Add UUID - UUID-16 multiple 1                        Passed
    Add UUID - UUID-16 partial 1                         Passed
    Add UUID - UUID-32 1                                 Passed
    Add UUID - UUID-32 multiple 1                        Passed
    Add UUID - UUID-32 partial 1                         Passed
    Add UUID - UUID-128 1                                Passed
    Add UUID - UUID-128 multiple 1                       Passed
    Add UUID - UUID-128 partial 1                        Passed
    Add UUID - UUID mix                                  Passed
    Total: 10, Passed: 10 (100.0%), Failed: 0, Not Run: 0
    Overall execution time: 0.198 seconds

    tools/mgmt-tester -s "Remove UUID"

    Test Summary
    ------------
    Remove UUID - Success 1                              Passed
    Remove UUID - All UUID - Success 2                   Passed
    Remove UUID - Power Off - Success 3                  Passed
    Remove UUID - Power Off and On - Success 4           Passed
    Remove UUID - Not Exist - Invalid Params 1           Passed
    Total: 5, Passed: 5 (100.0%), Failed: 0, Not Run: 0
    Overall execution time: 0.0908 seconds

    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Marcel Holtmann <marcel@holtmann.org>

Signed-off-by: Gopal Tiwari <gtiwari@redhat.com>
2022-04-27 11:49:00 +05:30
Johannes Berg d58ff35122 networking: make skb_push & __skb_push return void pointers
It seems like a historic accident that these return unsigned char *,
and in many places that means casts are required, more often than not.

Make these functions return void * and remove all the casts across
the tree, adding a (u8 *) cast only where the unsigned char pointer
was used directly, all done with the following spatch:

    @@
    expression SKB, LEN;
    typedef u8;
    identifier fn = { skb_push, __skb_push, skb_push_rcsum };
    @@
    - *(fn(SKB, LEN))
    + *(u8 *)fn(SKB, LEN)

    @@
    expression E, SKB, LEN;
    identifier fn = { skb_push, __skb_push, skb_push_rcsum };
    type T;
    @@
    - E = ((T *)(fn(SKB, LEN)))
    + E = fn(SKB, LEN)

    @@
    expression SKB, LEN;
    identifier fn = { skb_push, __skb_push, skb_push_rcsum };
    @@
    - fn(SKB, LEN)[0]
    + *(u8 *)fn(SKB, LEN)

Note that the last part there converts from push(...)[0] to the
more idiomatic *(u8 *)push(...).

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-06-16 11:48:40 -04:00
Johannes Berg 4df864c1d9 networking: make skb_put & friends return void pointers
It seems like a historic accident that these return unsigned char *,
and in many places that means casts are required, more often than not.

Make these functions (skb_put, __skb_put and pskb_put) return void *
and remove all the casts across the tree, adding a (u8 *) cast only
where the unsigned char pointer was used directly, all done with the
following spatch:

    @@
    expression SKB, LEN;
    typedef u8;
    identifier fn = { skb_put, __skb_put };
    @@
    - *(fn(SKB, LEN))
    + *(u8 *)fn(SKB, LEN)

    @@
    expression E, SKB, LEN;
    identifier fn = { skb_put, __skb_put };
    type T;
    @@
    - E = ((T *)(fn(SKB, LEN)))
    + E = fn(SKB, LEN)

which actually doesn't cover pskb_put since there are only three
users overall.

A handful of stragglers were converted manually, notably a macro in
drivers/isdn/i4l/isdn_bsdcomp.c and, oddly enough, one of the many
instances in net/bluetooth/hci_sock.c. In the former file, I also
had to fix one whitespace problem spatch introduced.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-06-16 11:48:39 -04:00
Johannes Berg 59ae1d127a networking: introduce and use skb_put_data()
A common pattern with skb_put() is to just want to memcpy()
some data into the new space, introduce skb_put_data() for
this.

An spatch similar to the one for skb_put_zero() converts many
of the places using it:

    @@
    identifier p, p2;
    expression len, skb, data;
    type t, t2;
    @@
    (
    -p = skb_put(skb, len);
    +p = skb_put_data(skb, data, len);
    |
    -p = (t)skb_put(skb, len);
    +p = skb_put_data(skb, data, len);
    )
    (
    p2 = (t2)p;
    -memcpy(p2, data, len);
    |
    -memcpy(p, data, len);
    )

    @@
    type t, t2;
    identifier p, p2;
    expression skb, data;
    @@
    t *p;
    ...
    (
    -p = skb_put(skb, sizeof(t));
    +p = skb_put_data(skb, data, sizeof(t));
    |
    -p = (t *)skb_put(skb, sizeof(t));
    +p = skb_put_data(skb, data, sizeof(t));
    )
    (
    p2 = (t2)p;
    -memcpy(p2, data, sizeof(*p));
    |
    -memcpy(p, data, sizeof(*p));
    )

    @@
    expression skb, len, data;
    @@
    -memcpy(skb_put(skb, len), data, len);
    +skb_put_data(skb, data, len);

(again, manually post-processed to retain some comments)

Reviewed-by: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-06-16 11:48:37 -04:00
Marcel Holtmann 38ceaa00d0 Bluetooth: Add support for sending MGMT commands and events to monitor
This adds support for tracing all management commands and events via the
monitor interface.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-09-19 20:19:34 +02:00
Johan Hedberg a380b6cff1 Bluetooth: Add generic mgmt helper API
There are several mgmt protocol features that will be needed by more
than just the current HCI_CHANNEL_CONTROL. These include sending generic
events as well as handling pending commands. This patch moves these
functions out from mgmt.c to a new mgmt_util.c file.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
2015-03-17 18:03:08 +01:00