Commit Graph

395 Commits

Author SHA1 Message Date
Luiz Augusto von Dentz
afc6628c26 Bluetooth: Use hexadecimal format when printing GATT handles
hexadecimal is the usual format when defining GATT handles values so
printing in the same format makes it easier to debug.

Change-Id: I6babcadaf5a4cffbac73db29c155343540cee120
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:23 -05:00
Luiz Augusto von Dentz
168446d058 Bluetooth: Disable GATT notifications while disconnected
Once disconnected disable CCC configuration and enabling it back once
reconnected:

bt: bt_gatt_disconnected (0x0010c610): conn 0x0010a1f4
bt: disconnected_cb (0x0010c610): ccc 0x00108e44 reseted
Disconnected
Connected
bt: bt_gatt_connected (0x0010c610): conn 0x0010a1f4
bt: gatt_ccc_changed (0x0010c610): ccc 0x00108e44 value 0x0001

Change-Id: Ia4ac6793176f80ea9c6f255a4d151f9080660b0d
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:23 -05:00
Johan Hedberg
ea15db12ba Bluetooth: Make bt_conn_lookup_addr_le public
This API is useful for applications wanting to monitor and disconnect
connections.

Change-Id: Ib1a98ece364f137262515fbb1163c6b08ddf792c
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:23 -05:00
Johan Hedberg
029046e02e Bluetooth: Make connection lookup functions return a new ref
To be able to make these APIs usable for apps where the calls may
happen from preemptible tasks, it's safest to return a dedicated
reference and let the caller do bt_conn_put() once its done with the
object.

Change-Id: If227e088385b8c6f61f4061a54c745c0bff7a6c3
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:23 -05:00
Johan Hedberg
89e775c1f6 Bluetooth: Fix coding style (missing braces)
Change-Id: I66dcc96da7b00181ff08773642b54ae19b3bdf5f
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:23 -05:00
Johan Hedberg
8c26ce63d1 Bluetooth: Remove bt_hci_reset() API
There's no clear need for this API (at least for now) and supporting
it means we really need to get all state cleanup procedures correct.
Remove it for now.

Change-Id: Ia2c7d51d410117bef12bc08f4f97a4e38ccfb77a
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:23 -05:00
Johan Hedberg
9bea2c3cfc Bluetooth: Move HCI driver API to dedicated header file
This makes it clearer that this is a specialized API not intended for
general app usage (unlike most other things in bluetooth.h).

Change-Id: I0ce1d5903610a9b3a99cf0be9f0e1462b04bf45a
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:23 -05:00
Johan Hedberg
939544b75d Bluetooth: Move logging helpers to a dedicated header file
To make it clearer that these helpers are intended only for
Bluetooth-subsystem internal code, move them to a separate file.

Change-Id: Iea64780f5c61c1c96e12c9df378676bc49498fe4
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:23 -05:00
Szymon Janc
19fe40764c Bluetooth: Make bt_stop_scanning parameters explicit void
Change-Id: I47ece76e00719d2fef702763c061055a1e9c5f76
Signed-off-by: Szymon Janc <szymon.janc@tieto.com>
2016-02-05 20:14:23 -05:00
Luiz Augusto von Dentz
801c09757e Bluetooth: Add support for ATT Read Multiple
This adds parsing for ATT Read Multiple Request and Response:

> ACL Data RX: Handle 3585 flags 0x02 dlen 11
      ATT: Read Multiple Request (0x0e) len 6
        Handle: 0x0001
        Handle: 0x0002
        Handle: 0x0003
< ACL Data TX: Handle 3585 flags 0x00 dlen 27
      ATT: Read Multiple Response (0x0f) len 22
        00 18 02 03 00 00 2a 54 65 73 74 20 70 65 72 69  ......*Test peri
        70 68 65 72 61 6c                                pheral

Change-Id: I08efe2b73342423634c156f95baa2bba84bd50a9
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:23 -05:00
Mariusz Skamra
b2574b645b Bluetooth: Terminate connection
Adds routine for termination of connection.

Change-Id: I444e4cba3297c51fbd9f89bbdba89db45af195c6
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
2016-02-05 20:14:23 -05:00
Arkadiusz Lichwa
f5ae4b70f1 Bluetooth: Add basic interface for LE connection
Adds internal HCI interface routine for creation of basic ACL LE link.
Most of the command interface parameters are fixed.
The internal interface is then used directly by simple public interface with
no connection validation.

Change-Id: I8ed72a9d01348e2a05b62facc9e85060e4500631
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
2016-02-05 20:14:23 -05:00
Johan Hedberg
224abaab0e Bluetooth: Update bt_conn_cb to pass bt_conn instead of bt_addr_le_t
Now that we have a publicly exposed connection object it makes sense
to pass that to the connection callbacks rather than an address.

Change-Id: I8e9b17733d1789539a83c3dbc7a778336d2b71ff
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:23 -05:00
Johan Hedberg
2b61b44cbc Bluetooth: Add conn.h public header file
This one should be used for all public connection related APIs. Right
now it includes the reference counting and connection callback APIs.

Change-Id: Ib9b67e6115bb2e51322644757da1170851c3ca17
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:23 -05:00
Johan Hedberg
651e9a4b2e Bluetooth: Rename conn.h to conn_internal.h
We'll have a public conn.h header file soon, so to avoid confusion
rename the existing conn.h to conn_internal.h.

Change-Id: I5e5c89ec184a0a2de63e244b034c55a3d97af9dc
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:23 -05:00
Jukka Rissanen
702a596594 net: Add kconf for networking
Change-Id: Id956b7debe4564613007d934636501c98ba1851d
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-02-05 20:14:20 -05:00
Jukka Rissanen
4c53ef0b93 net: Initialize the IP stack
Call relevant Contiki uIP functions to setup the internal
structures in the uIP stack.

Change-Id: If64df1543d66d0ff378c12f371aa2c06fb2fde0a
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-02-05 20:14:20 -05:00
Jukka Rissanen
6ba3a02eed net: uip: Avoid casting warning when accessing link local addr
The uip_ds6_nbr_get_ll() returns const addr but we need to
overwrite the addr so cast is needed here.

The const pointer returned by nbr-table.c:nbr_table_get_lladdr(),
which is called by uip_ds6_nbr_get_ll(), actually points to
neighbor cache which is dynamic and will never be stored in read
only memory, and thus is safe to cast to non-const.

Change-Id: Ifb47e4cb75054b0a9717304dc1d0bc497fee1e87
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-02-05 20:14:20 -05:00
Jukka Rissanen
251a45b602 net: Use our network buffers instead of global ones in Contiki
This mega patch changes how Contiki uses buffers. In standard
Contiki there is only couple of static and global buffers.
This makes the stack non-reentrant and only usable in one
thread. This patch replaces the global buffer with buffer
supplied by caller (net_buf.h). The Contiki stack is still not
fully re-entrant after this (packet reassembly needs more TLC)
but it is a good start.

Change-Id: I63abc230b36b14f33f687d3ef64cffb0f3a69f5d
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-02-05 20:14:20 -05:00
Jukka Rissanen
da36c6371c net: Simple socket API introduced
The network context defines a network connection.

Change-Id: I29a186be6c9de9d824f10b6442fa1dfd3711d24d
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-02-05 20:14:20 -05:00
Jukka Rissanen
1cf34680cb net: Using correct defines to configure the net stack
Change-Id: Ia2f5f8e496d11c73125aa3e74c0f9ad48141c712
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-02-05 20:14:20 -05:00
Jukka Rissanen
4f5723a5d0 net: Network initialization and tx/rx functionality
Functions to receive data from apps and transmit it to network, and
receive from network and pass data to apps.

Change-Id: I1b1b8c041e6c5e20294081d2cd403636e9909cdc
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-02-05 20:14:20 -05:00
Jukka Rissanen
3633410706 net: uip: Pack and alias network buffer related structs
We need to make sure that the structs that are cast to received
network buffer are packed. We also need to enable __may_alias__
attribute for these structs in order to avoid "dereferencing
type-punned pointer" warnings.

Change-Id: Iad65612fd176ed41d66c6fa05c50151001a406eb
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-02-05 20:14:20 -05:00
Jukka Rissanen
c6c89fbdc6 net: uip: Avoid compiler warning about unused variable
Variable called "initialized" is only needed if the nameserver
pool size is bigger than 1 (UIP_NAMESERVER_POOL_SIZE > 1).

Change-Id: I1bce30bd783f76e56f12b8e76b29c932ab5765af
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-02-05 20:14:20 -05:00
Jukka Rissanen
c5b936a7c8 net: uip: start_periodic_tcp_timer() not needed
The function start_periodic_tcp_timer(void) is only needed if one
has UIP_TCP or UIP_CONF_IP_FORWARD defined.

Change-Id: I5185bfbdb998ec3d6985681a85c26e094406c404
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-02-05 20:14:20 -05:00
Jukka Rissanen
bb69910e2a net: uip: Added missing function prototypes to rtimer
Real timer implementation needs function prototypes.
This is just to satisfy the compiler. Needs more TLC.

Change-Id: I39baa7cfe69d28aa1f330089e22144df286c0a0d
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-02-05 20:14:20 -05:00
Jukka Rissanen
ce302ebc8b net: uip: Callback is only defined for RIME support
We do not need RIME so commenting out the callback call.

Change-Id: I09cd078a3741c6a8e5f4f8fd6387203e6107f218
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-02-05 20:14:20 -05:00
Jukka Rissanen
1e8cbd99ee net: uip: psock.h is only needed for TCP connections
Comment out the psock.h include if TCP is not used.

Change-Id: I83e537b410b867a5ea30fb60c012521df351d05f
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-02-05 20:14:20 -05:00
Jukka Rissanen
75d4b3f0c2 net: Initial networking support
Base is from Contiki git tree at git://github.com/contiki-os/contiki.git
commit 6ac939bc58ea76aa37e9b86af55ad51cfc3434e9

This one does not do anything useful yet. It sets the baseline for
subsequent patches.

Change-Id: I7078c938dd59188beceaf47721afaa521d8bde1a
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-02-05 20:14:20 -05:00
Szymon Janc
b47d14a273 Bluetooth: Fix NULL pointer dereference in flush_cb
conn was never set in struct flush_data passed to flush_cb.

Change-Id: I2a16479bf7660a96f705d1194245da02ee6eeff5
Signed-off-by: Szymon Janc <szymon.janc@tieto.com>
2016-02-05 20:14:19 -05:00
Luiz Augusto von Dentz
7250393678 Bluetooth: Add macro for CEP and long descriptors
Add BT_GATT_CEP and BT_GATT_LONG_DESCRIPTOR so which can be used by
a task to declare long attributes.

Change-Id: I37a0bb1851b60f3cdfa7e2f00ade70d5c344abbf
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:19 -05:00
Luiz Augusto von Dentz
14ff92cea0 Bluetooth: Handle ATT execute write request
This introduce a new callback called flush to bt_gatt_attr to indicate
when and attribute can cache data, the data is automatically flushed if
regular write request happens and in case of prepare write it checks if
flush is supported otherwise return an error, then upon receiving an
execute write it perform flush over the entire database and respond
with result:

< ACL Data TX: Handle 42 flags 0x00 dlen 6
      ATT: Execute Write Request (0x18) len 1
        Flags: Immediately write all pending values (0x01)
> ACL Data RX: Handle 42 flags 0x02 dlen 5
      ATT: Execute Write Response (0x19) len 0

Change-Id: I2c47f962858b8a741bf40509a648fe2cd6755691
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:19 -05:00
Luiz Augusto von Dentz
186b133028 Bluetooth: Handle ATT prepare write command
Call attribute write callback taking into account the offset and
generate proper responses:

> ACL Data TX: Handle 42 flags 0x00 dlen 69
      ATT: Prepare Write Request (0x16) len 64
        Handle: 0x0021
        Offset: 0x0000
          Data: 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
< ACL Data RX: Handle 42 flags 0x01 dlen 15
      ATT: Prepare Write Response (0x17) len 64
        Handle: 0x0021
        Offset: 0x0000
          Data: 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
> ACL Data TX: Handle 42 flags 0x00 dlen 23
      ATT: Prepare Write Request (0x16) len 18
        Handle: 0x0021
        Offset: 0x003c
          Data: 0000000000000000000000000000
< ACL Data RX: Handle 42 flags 0x02 dlen 23
      ATT: Prepare Write Response (0x17) len 18
        Handle: 0x0021
        Offset: 0x003c
          Data: 0000000000000000000000000000

Change-Id: I4e5d8e8c92fdbf624d1588345878f0b678472401
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:19 -05:00
Arkadiusz Lichwa
df4257f174 Bluetooth: Track role for connections
When a connection is made, track its role.

Only peripherial/slave role may trigger update of L2CAP connection
parameters.

Change-Id: I72244581650248c7b020c9e5673b73ce46e7399d
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
2016-02-05 20:14:19 -05:00
Luiz Augusto von Dentz
875d519948 Bluetooth: Handle ATT signed write command
Call attribute write callback taking into account the signature length
so only the actual data is used.

Note: It still don't support validating the signature because that depend
on storing CRSK key.

Change-Id: I93973e2997f57e5715080ef56ad85e0eaf11d0fe
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:19 -05:00
Luiz Augusto von Dentz
679dd4c1a9 Bluetooth: Convert ATT parser to use opcode table
This reduces the amount of code necessary to check minimum size and
to generate error responses.

Note that not every response can be generate using this method since in
some cases the handle must be set to indicate what attribute has failed.

Change-Id: I0dde7461d97e451407935d5ec3cbfedf6542d5e6
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:19 -05:00
Luiz Augusto von Dentz
aa1260999e Bluetooth: Fix persisting CCC config for non-bonded devices
The spec says that CCC shall only be persistent accross connection for
bonded devices:

  'The Client Characteristic Configuration descriptor value shall be
  persistent across connections for bonded devices. The Client Characteristic
  Configuration descriptor value shall be set to the default value at each
  connection with non-bonded devices'.

To handle this now each configuration has a valid field indicating if the
configuration is valid.

Change-Id: Id74ac54f5e23a7a0b286f90dbc9af4e9ee966dd4
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:18 -05:00
Szymon Janc
ada9a6f66f Bluetooth: SMP: Fix compilation with debugs enabled
This fix following compilation error if CONFIG_BLUETOOTH_DEBUG_SMP
is defined:

In file included from net/bluetooth/smp.c:44:0:
net/bluetooth/smp.c: In function 'bt_smp_irk_matches':
net/bluetooth/smp.c:681:31: error: 'val' undeclared
    (first use in this function)
  BT_DBG("IRK %s bdaddr %s", h(val, 16), bt_addr_str(addr));

Change-Id: I3350620f1f7dc929b949b4483178df66dde55198
Signed-off-by: Szymon Janc <szymon.janc@tieto.com>
2016-02-05 20:14:18 -05:00
Luiz Augusto von Dentz
5963f573b0 Bluetooth: Fix not printing new line in BT_DBG
This was causing output such as bellow:

bt: bt_gatt_attr_write_ccc: No space to store CCC cfgbt: bt_gatt_attr_write_ccc: No space to store CCC cfgDisconnected

Change-Id: I8aff67b9c4b407e8a2da939c27bea05a597dcf67
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:18 -05:00
Mariusz Skamra
7f1bff8b2d Bluetooth: Add callbacks for connections
This patch adds callbacks to notify app about connection and disconnection.

Change-Id: If8091254d929fe53d12b153e6f216223a8913f2d
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
2016-02-05 20:14:18 -05:00
Luiz Augusto von Dentz
4baa3b9700 Bluetooth: Fix missing braces
Change-Id: I3ad884e38428c48ee08c3778219508bd21bfa106
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:18 -05:00
Luiz Augusto von Dentz
0000a2d790 Bluetooth: Add check fo connection encrypt flag in ATT
This checks if connection encrypt flag is set if attribute requires
encryption and in case the connection is already encrypted return
success.

Change-Id: I8af4e9786b63a21f478b3aa9f6df448d7f5760c5
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:18 -05:00
Luiz Augusto von Dentz
8f6edeebb8 Bluetooth: Handle attribute read/write errors
Respond with an error if attribute read/write return an error.

Change-Id: I9c2f98ac4b73bca5d3714339a47290ca9ae2391b
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:18 -05:00
Johan Hedberg
e3fd3090ba Bluetooth: Rename cmd_rx_queue/fiber to rx_prio_queue/fiber
With the introduction of the Number of Completed Packets event
handling this FIFO & fiber aren't anymore strictly HCI command
completion related. Rename them therefore to something that more
appropriately describes their purpose.

Change-Id: Ia53dea8b5ec0098459f23918a5483075757d9202
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:18 -05:00
Johan Hedberg
5efe82a8e9 Bluetooth: Add Number of Completed Packets event to special queue
The Number of Completed Packets HCI event belongs to the same category
as the Command Complete/Status events in that it is likely to unlock a
waiter in one of the other fibers. Events which may affect waiters in
this way need to be processed without delay and through a separate
FIFO & fiber to avoid deadlocks.

Change-Id: Ibc2ee2b4f72e2534a8579ad1c36591867e19e6df
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:18 -05:00
Johan Hedberg
451b105978 Bluetooth: Use __packed instead of the deprecated PACK_STRUCT
The PACK_STRUCT macro will be removed soon and __packed is what all
code should use. Convert all the usages in Bluetooth code.

Change-Id: Id5c724566565f67fa8167b61398c508194ece89b
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:18 -05:00
Johan Hedberg
92e3a44b3d Bluetooth: Increase buffer count from 20 to 22
We need to make sure we have more event buffers than outgoing ACL
buffers. Currently we allocate 7 + 7 ACL in/out buffers leaving only 7
left for commands/events. Increase the buffer count by two to make
sure we've got 8 command/event buffers.

Change-Id: I4c54aa07019ad9ef262aeecabf151edd60f91b9e
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:18 -05:00
Luiz Augusto von Dentz
51f85ed6ab Bluetooth: Fix bt_gatt_attr_read_chrc for UUID 128 bits
When reading a characteristic attribute which contain a 128 bits UUID the
size of the elements were counting only the UUID alone not other fields
that are part of the value causing invalid responses to be sent.

Change-Id: I7474531f586ba19788eb9e0ed59555c5d7672176
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:18 -05:00
Luiz Augusto von Dentz
58791718e1 Bluetooth: Check GATT attribute permissions
This checks attribute permission returning an error in case they don't
match.

Change-Id: I56a85ad594cb1ac535b03cdbceb43af84dc6604f
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:18 -05:00
Luiz Augusto von Dentz
d412b7d799 Bluetooth: Fix build if CONFIG_BLUETOOTH_DEBUG_HCI_CORE is enabled
If CONFIG_BLUETOOTH_DEBUG_HCI_CORE is enabled it causes the following
error:

hci_core.c:514:12: error: 'struct bt_hci_evt_encrypt_key_refresh_complete' has no member named 'encrypt'
         evt->encrypt);
            ^

Change-Id: I1983653eba40b9aea6b19572b39a285883f00450
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:18 -05:00
Johan Hedberg
144115c58e Bluetooth: SMP: Convert handler dispatch to a table
We can do centralized PDU length checks and more compact code size
with the help of a handler table where the index maps to the SMP op
code.

Change-Id: Iba69ecc14f452411dfb6b4db7c7a5fd19ba3e51f
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:18 -05:00
Andrei Emeltchenko
382488bbd0 Bluetooth: Check CCC before allocating buffer
Fixes memory leak when buffer is allocated before CCC check, the best
fix is to move CCC check forward.

Change-Id: Ib0492f629a339b576cf811adce47b2f6ab101c33
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:14:18 -05:00
Johan Hedberg
0fb7461140 Bluetooth: SMP: Set correct minimum encryption key size
For now we don't support key shortening, so set the minimum value
appropriately to 16 bytes. Once key shortening is implemented this
value can be lowered again.

Change-Id: I172d0bf6d04ba4c5eaa7bbf8ae2accfa373eebb5
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:18 -05:00
Johan Hedberg
5c31ad3ae4 Bluetooth: Look up IRKs during LE scanning
Devices using LE Privacy are identified by their Identity Address
whenever we've paired and received their IRK. We should therefore try
to look up matching IRKs for advertising responses.

Change-Id: I304108da699ff2506e6cc50bd6c5c053a0db024b
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:18 -05:00
Andrei Emeltchenko
b53967c3cc Bluetooth: Fix trying to print pointer instead of string
Use correct address to string translation.

Change-Id: Ic766147fd6016894c0f60ec57059984887653a15
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:14:17 -05:00
Johan Hedberg
4e25230204 Bluetooth: Add support for encrypt key refresh complete event
This event comes instead of Encrypt Change when we re-encrypt an
already encrypted connection.

Change-Id: I7fe9545e6c58392a34d72f3dd3962c475ebb7871
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:17 -05:00
Johan Hedberg
a6f18d7cc4 Bluetooth: Update the connections address from IRK
When a connection occurs it may have happened with an RPA. If so,
check if there's a matching IRK available and update the connection
address with the Identity Address (stored together with the IRK).

Change-Id: I3d995a35171b514ec1902fce617e8e7d6770e785
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:17 -05:00
Johan Hedberg
44795a6574 Bluetooth: Add API for looking up IRKs
Add an API to bt_keys for looking up IRKs based on a given RPA.

Change-Id: If9c0569c8d619f9cb2b6174d77c25dd5358db863
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:17 -05:00
Johan Hedberg
86eb6667cf Bluetooth: SMP: Add IRK resolving support
Add support for the SMP ah() crypto function which is used to match up
IRKs with RPAs.

Change-Id: Iaea8397ea401df800259dfab2ce97187aa5e2df6
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:17 -05:00
Johan Hedberg
1886981023 Bluetooth: Track keys in the connection context
To avoid spending unnecessary time looking up the same keys multiple
times simply store a pointer to them from the connection context.

Change-Id: I94b550870c863237348a2cab7ba056be2a7f4bc5
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:17 -05:00
Johan Hedberg
68612ca20c Bluetooth: SMP: Ignore irrelevant encryption changes
If we're not actively performing pairing we should ignore any
encryption changes. If we don't do this the code might e.g.
incorrectly clear out existing keys.

Change-Id: Iac49a09abd7386b773e325b9bc939d6b6c741c92
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:17 -05:00
Johan Hedberg
9cdd128eab Bluetooth: SMP: Add support for receiving remote IRK
Add support for handing the Identity Info and Identity Address Info
SMP PDUs.

Change-Id: Ie0ed57e2c1819a1619b9eaa340ed22666c81eea8
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:17 -05:00
Johan Hedberg
40e6a1288c Bluetooth: Add IRK storage
Add support to store IRKs through the bt_keys API.

Change-Id: I01f713f8ad3657605a8bc2738db349d25bb89649
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:17 -05:00
Johan Hedberg
275c0316ff Bluetooth: Refactor key handling to prepare for more key types
We'll need to store many other keys besides slave LTKs. Refactor the
key handling code so that new types can be easily added.

Change-Id: I768db9cb29e8e73e87713e59f7b80af80399f20d
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:17 -05:00
Johan Hedberg
384533912d Bluetooth: Move key handling to separate files
In preparation of adding more key support and to not bloat hci_core.c
prepare a new .c file for the key management code.

Change-Id: I5129a7a3a5d495a299f75e4e669253446a276142
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:17 -05:00
Johan Hedberg
2dc3554e1c Bluetooth: Rename bt_addr_is_rpa to bt_addr_le_is_rpa
The input paramter is bt_addr_le_t so the function should be named
accordingly.

Change-Id: I7b796020d6e43ae1aa76a261cbfbaf7cba163029
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:17 -05:00
Luiz Augusto von Dentz
e4e6f4dbe9 Bluetooth: Add bt_gatt_notify
bt_gatt_notify can be used to send ATT notifications:

< ACL Data TX: Handle 3585 flags 0x00 dlen 8
      ATT: Handle Value Notification (0x1b) len 3
        Handle: 0x0010
          Data: 64

Change-Id: I908f10f9e60dc7cef221e4b27c3b6e49e7b0cfc9
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:17 -05:00
Luiz Augusto von Dentz
e8e0fbe63a Bluetooth: Add BT_GATT_CCC macro
BT_GATT_CCC uses _bt_gatt_ccc internal struct to handle peer
configurations and special helpers to read and write to minimize the
code necessary to handle CCC in the task.

Note this not yet include handling of connection and disconnection but
the idea is that the core would automatically disable the configurations
while disconnected and re-enable once peer connect back.

Change-Id: I89325b8a074766b9fd2423085565df669f7275e1
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:17 -05:00
Luiz Augusto von Dentz
1d734fd60f Bluetooth: Fix not passing proper peer address to attribute read
Invalid peer address was being passed since the conn pointer was not
initialized properly.

Change-Id: Ib64584f1eb8bc534389bd4fa057c58dd00ffbd6d
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:17 -05:00
Luiz Augusto von Dentz
c6ce7792a7 Bluetooth: Add Bluetooth remote address to attribute callbacks
To implement CCC properly it is required to know the remote address since
it is per client, futhermore bt_gatt_notify requires an address where to
send the notification.

Change-Id: I9d9fdf72d668831bed76e2aef06816af3620f4b8
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:17 -05:00
Johan Hedberg
7f72d21a96 Bluetooth: Rename bt_conn_lookup_by_addr_le for consistency
Follow the same style as bt_conn_lookup_handle (i.e. drop the 'by').

Change-Id: I6a31104fc8beac13c357088e46a91bd713fcfdd4
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:17 -05:00
Johan Hedberg
ae58464b43 Bluetooth: Rename bt_conn_lookup to bt_conn_lookup_handle
To take multiple different ways of looking up connections rename the
existing too generic bt_conn_lookup to bt_conn_lookup_handle.

Change-Id: I1c4965ad76738fa08ccca91b28cda552c9a88373
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:17 -05:00
Luiz Augusto von Dentz
c151b84832 Bluetooth: Add bt_conn_lookup_by_addr_le
bt_conn_lookup_by_addr looks up for existing BLE connection by address.

Change-Id: If24516511b7d07cd99bbe095a737b38b0adaabad
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:17 -05:00
Luiz Augusto von Dentz
96ac8de38f Bluetooth: Add implementation of ATT Write Response
Write attributes matching handle generating a proper response if
necessary:

< ACL Data TX: Handle 3585 flags 0x00 dlen 5
      ATT: Write Response (0x13) len 0

Change-Id: I7c230501e042a1a759baa2653944bef830b51779
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:17 -05:00
Johan Hedberg
9a8272a44d Bluetooth: Simplify stack analysis code
Move the usage reports into the function that does the analysis, and
also include a percentage of the usage. To make the results more
relevant give them in terms of the "real" stack size, i.e. the stack
space minus the CSS size in the beginning.

Change-Id: Ibc0418de396e140839c9a810196fbf16df533df5
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:17 -05:00
Johan Hedberg
12229a8f49 Bluetooth: Fine-tune stack size adjustment for debug
512 is a more accurate description than 1024 of the stack usage impact
of enabling debug logs.

Change-Id: I4b79b4eb9724ba624ff546973a1126c62382d1aa
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:17 -05:00
Johan Hedberg
8eabf208d7 Bluetooth: Add convenience macros for defining stacks
To not have to always do the __noinit, debug log correction and 4-byte
alignement declaration create some helper macros for defining the
stacks.

Change-Id: I2de5068d7044af3f348ed01281498a777d04c97d
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:17 -05:00
Johan Hedberg
fadbdcef85 Bluetooth: Support unaligned stack arrays
The CCS always starts at a 4-byte aligned boundary, so if the stack
given to fiber_start doesn't begin in such a place there will be some
unused bytes in the beginning and the 'real' stack will start at a
different offset. Take this into account when calculating the unused
stack portion.

Change-Id: I6c36d0354f4d014ad256b5580b76282d7d4384ce
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:17 -05:00
Johan Hedberg
f51c6a4b41 Bluetooth: Use sizeof() for stack when starting fibers
In case there are changes to the way the stacks are defined it's safer
to use sizeof() rather than rely on some specific size define.

Change-Id: Ic9ae090c0dbc0d88995a8883f9b4876be5958f1d
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:17 -05:00
Johan Hedberg
16faa55df8 Bluetooth: Remove unnecessary printk() for stack analysis
This one doesn't really contribute anything extra to the other info
that's already logged.

Change-Id: I741fa1a161914915bee0870dc102a7d0acfe0a33
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:17 -05:00
Johan Hedberg
c82b96d425 Bluetooth: Tune stack sizes based on latest analysis
Set the stack sizes based on what the current utilization is for SMP
and GATT tests.

Change-Id: I892282a088d7b244f7abdbc92368addc9c19e4eb
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:16 -05:00
Johan Hedberg
8e5721e326 Bluetooth: Add code to analyze stack usage
To make it easy to periodically verify that we have sane stack sizes
it's helpful to have some code to evaluate how much of the stacks are
used. There's already a CONFIG_INIT_STACKS option which pre-fills the
stacks with 0xaa bytes, so we make use of it and in case the option is
enabled run the extra code to evaluate how much of each stack was
used. The trigger for the evaluation is a disconnection event.

Change-Id: I815ff96b2e6f877c29f4df3c949afae78222a8f3
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:16 -05:00
Johan Hedberg
c31b2064ed Bluetooth: Declare fiber stacks as __noinit
No need to waste CPU cycles initializing the stack variables.

Change-Id: Ifab0cf77ffb46d93aecb9a3082155478de782736
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:16 -05:00
Peter Mitsis
6059e0e2e1 Apply __stack tag to align bluetooth defined fiber stacks
Bluetooth fibers must have their stacks properly aligned.

Change-Id: Id46b376abb46400c563050b4c8393ab3983ff045
Signed-off-by: Peter Mitsis <peter.mitsis@windriver.com>
2016-02-05 20:14:13 -05:00
Anas Nashif
1339edc104 remove defs.objs file
Replaced by kbuild

Change-Id: I61a21ed164b02c7770a181919b35ffafbde4f49e
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2016-02-05 20:14:10 -05:00
Anas Nashif
bf9dcc813d Update bluetooth Makefile
Change-Id: Ic02f556337d7beb4bf88e4694aeeda314d51e2a2
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2016-02-05 20:14:10 -05:00
Anas Nashif
44eda51a93 Update Bluetooth options
Change-Id: If01bf6b7cc1d195932b5a153b7aa9b96241b2311
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2016-02-05 20:14:10 -05:00
Anas Nashif
f20d8f14a2 Kbuild: remove duplicate bluetooth options
BLUETOOTH_UART and BLUETOOTH_DEBUG_UART defined twice.

Change-Id: I77f0e87a7f6132514696ef854c183037a540acba
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2016-02-05 20:14:10 -05:00
Juan Manuel Cruz
d15251fec5 Kbuild: Kconfig license headers.
This commit add license headers to Kconfig files.

Change-Id: I79e60263b8c7b696463ecc84b8ad411af5415117
Signed-off-by: Juan Manuel Cruz <juan.m.cruz.alcaraz@linux.intel.com>
2016-02-05 20:14:10 -05:00
Anas Nashif
24a8a4d10a Kbuild: new bluetooth options
Change-Id: I0c9d964abe56bdab96a60d8164d9b5474074f846
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2016-02-05 20:14:09 -05:00
Anas Nashif
19b75dec90 Bluetooth: add smp.c to Makefile
Change-Id: I9c788b8b89c2117305809444de258efa0539410f
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2016-02-05 20:14:09 -05:00
Juan Manuel Cruz
b7fcfd53e5 Kconfig: Organization of Ksymbols for bluetooth.
This commit organizes the bluetooth Ksymbols in:
 - Driver symbols at drivers/bluetooth/Kconfig
 - Stack symbols at net/bluetooth/Kconfig

Change-Id: I8ebadeb8ac7f8a769d7620e4e44077a05915dc86
Signed-off-by: Juan Manuel Cruz <juan.m.cruz.alcaraz@linux.intel.com>
2016-02-05 20:14:08 -05:00
Juan Manuel Cruz
638fb2c181 Kbuild: Bluetooth driver support.
This commit adds the Makefile and Kconfig files
to support the bluetooth driver in the Kbuild system.

Signed-off-by: Juan Manuel Cruz <juan.m.cruz.alcaraz@linux.intel.com>
Change-Id: I1f72b13aca8fb098eece04c4f0e1b680639b520f
2016-02-05 20:14:08 -05:00
Johan Hedberg
a1dd6d6aec Bluetooth: Remove unused BDADDR_ANY variable
This is a left-over from previous code.

Change-Id: I4d12e236a4065d2cd33d492605704f516df906f3
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:04 -05:00
Johan Hedberg
3b71b2dd41 Bluetooth: Fix using correct cmd_rx_fiber stack size
The code was incorrectly using RX_STACK_SIZE instead of
CMD_RX_STACK_SIZE.

Change-Id: I4a8ddb700e2a701bf8572ed877865a7d0cb3b2d0
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:04 -05:00
Johan Hedberg
4172b712c9 Bluetooth: Fix build when HCI_CORE debug is enabled
Some hci_core.c debug logs were still incorrectly using the old
bt_bdaddr_str API.

Change-Id: I92ce4544c44266216225b4d9a20e639a2fefa9d0
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:04 -05:00
Johan Hedberg
8620ff3e0c Bluetooth: Add GATT debug config option
Add a GATT debug config option to be able to limit the debug logs only
to the GATT submodule.

Change-Id: Ie486c9125070f32506547f981c704eaf3e9f2377
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:04 -05:00
Andrei Emeltchenko
bd0805acdd Bluetooth: Fix too few arguments to error log
Change-Id: Ic618f3535b60d861e2044aefb82671c48fa35f61
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:14:04 -05:00
Luiz Augusto von Dentz
fc1392d7aa Bluetooth: Add implementation of ATT Find Information Response
Read attributes matching handle range generating a proper response:

< ACL Data TX: Handle 3585 flags 0x00 dlen 10
      ATT: Find Information Response (0x05) len 5
        Format: UUID-16 (0x01)
        Handle: 0x0011
        UUID: Client Characteristic Configuration (0x2902)

Change-Id: I16a5abbcca67d522bd2282d3bf727770d1fa4006
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:04 -05:00
Luiz Augusto von Dentz
32c50333b3 Bluetooth: Add implementation of ATT Read and Read Blob Response
Read attribute and generate a proper responses:

< ACL Data TX: Handle 3585 flags 0x00 dlen 6
      ATT: Read Response (0x0b) len 1
        Value: 01

< ACL Data TX: Handle 3585 flags 0x00 dlen 20
      ATT: Read Blob Response (0x0d) len 15
        54 65 73 74 20 50 65 72 69 70 68 65 72 61 6c     Test Peripheral

Change-Id: I5a644fd29ae46fdecdc32c6558591ce7a8d2d42c
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:04 -05:00
Luiz Augusto von Dentz
e6ef8df212 Bluetooth: Add implementation of ATT Find by Type Value Response
Read attributes matching value and handle range generating a proper
response:

< ACL Data TX: Handle 3585 flags 0x00 dlen 9
      ATT: Find By Type Value Response (0x07) len 4
        Handle range: 0x0001-0x0005

Change-Id: I8001afa2b22e804bef3778d0509d17b01a8d597c
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:04 -05:00
Luiz Augusto von Dentz
9a09a5d329 Bluetooth: Add implementation of ATT Read by Type Response
Read attributes matching UUID and handle range generating a proper
response:

< ACL Data TX: Handle 3585 flags 0x00 dlen 20
      ATT: Read By Type Response (0x09) len 15
        Attribute data length: 7
        Attribute data list: 2 entries
        Handle: 0x0002
        Value: 020300002a
        Handle: 0x0004
        Value: 020500012a

Change-Id: Iaf4b0c963765a7769a17144a4d394dce8555c2d3
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:04 -05:00
Luiz Augusto von Dentz
7c14248061 Bluetooth: Add implementation of ATT Read by Group Type Request
Read attributes matching UUID and handle range generating a proper
response:

< ACL Data TX: Handle 3585 flags 0x00 dlen 24
      ATT: Read By Group Type Response (0x11) len 19
        Attribute data length: 6
        Attribute group list: 3 entries
        Handle range: 0x0001-0x0005
        UUID: Generic Access Profile (0x1800)
        Handle range: 0x0006-0x000d
        UUID: Heart Rate (0x180d)
        Handle range: 0x000e-0x0011
        UUID: Battery Service (0x180f)

Change-Id: I1ef2d5b1b0237fc0f89221239686777169cc8883
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:04 -05:00
Luiz Augusto von Dentz
2506aa93b3 Bluetooth: Make use of bt_uuid_cmp to compare UUIDs
This replace the old code that could only compare 16 bits UUID with
bt_uuid_cmp which can expand to 128 bits if types don't match.

Change-Id: I84219d451d8c95baf6f7e42b92629cb106428ccf
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:04 -05:00
Luiz Augusto von Dentz
dd41c3375c Bluetooth: Add bt_gatt_foreach_attr
bt_gatt_foreach_attr iterates over attributes via callback, it will be
used to implement discovery functionality.

Change-Id: Ice66f4b3d0d12b3616986931d5da0fe0f202e533
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:04 -05:00
Luiz Augusto von Dentz
862835d8a6 Bluetooth: Add bt_uuid_cmp
bt_uuid_cmp compares 2 UUIDs returning if they match, if the types are
different it converts both to 128 bit format before performing the
comparison.

Change-Id: Iacf330cc0271a7e5429cbb2f405a7d9ef249a1a3
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:04 -05:00
Luiz Augusto von Dentz
de52b09a3f Bluetooth: Add GATT skeleton
This adds initial API and definitions to create a database.

Change-Id: I69d5b3f5fd2f04cc309c2f76a84581673aa54e7b
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:04 -05:00
Luiz Augusto von Dentz
6d564a9648 Bluetooth: Handle ATT Exchange MTU request
This properly init the MTU to default upon new connection and properly
store the new value in case of Exchange MTU request.

Change-Id: I561f5b1756fd8833244cdd2a986e561c16fc8471
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:04 -05:00
Johan Hedberg
1781490c87 Bluetooth: Improve buffer debug usefulness
The overflow/underflow checks are something that we want to have
whenever debug is enabled in general (and not just for buffers
specifically).

Change-Id: Ib4edd366ae8ce1a80d33155ab1dc8d5a20477909
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:04 -05:00
Johan Hedberg
8d0d247f23 Bluetooth: Add helpers for checking LE address type
For LE Privacy support we'll need to be able to distinguish which
addresses are RPAs and which are Identity Addresses.

Change-Id: Ie244a4d53ffddc435edbd6d69d7ecca205202f18
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:04 -05:00
Johan Hedberg
9b40ec3360 Bluetooth: Introduce dedicated Bluetooth address types
We use addresses in lots of places and with LE we always need to pass
around the type in addition to the address value. Defining dedicated
types for addresses makes the code much simpler.

Change-Id: Ie8b495dce50e3f084685909c19acc5d08e2cca10
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
85fec6dd2c Bluetooth: Increase cmd_rx fiber stack size
When debug is enabled the cmd_rx fiber seems to cause exceptions some
times. Increasing its stack size seems to help.

Change-Id: I8152645f5904758b771ffe73b1112c77c8bfe924
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
da7ea16c6c Bluetooth: coding-style: Fix unnecessary space after typecast
Change-Id: I229df078f205d2fb4e16d02ad7fea3382e4d6287
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
e9c3994b47 Bluetooth: Move LTK/EDiv/Rand generation to key dist stage
Now that bt_hci_send_cmd_sync() is safe to be called from the rx fiber
(used for all HCI events besides Command Complete/Status) we can move
the le_rand() usage to the key distribution stage instead of the
workaround of generating them prematurely.

Change-Id: I8bbc8dc78922a275a0c9982474d60b0693b29af2
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
c825e91e57 Bluetooth: Remove per-connection RX fiber
Now that there's the split of Command Complete/Status events from all
other RX data we don't anymore need dedicated per-connection RX
fibers. Remove these fibers and their associated FIFO and use
bt_l2cap_recv() directly from bt_conn_recv().

Change-Id: Ib9740e76200cfa40d46ee234f9693dcb7e8387fd
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
d8e9e71acd Bluetooth: Add dedicated stack for Command Complete/Status events
These events are special since they release any blocking
bt_hci_cmd_send_sync() calls. In order to be able to use the send_sync
API from HCI Event handlers without deadlocking having the Command
Complete/Status events processed through a dedicated fiber is
essential.

Change-Id: Id5c597d618bf326a8efb7c9ca2500af60a502d77
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
a4ecff8dad Bluetooth: Rename cmd_stack/fiber/queue to cmd_tx_stack/fiber/queue
To prepare for a dedicated Command Complete/Status processing fiber,
add 'tx' to the existing names to differentiate from the 'rx' in the
upcoming names.

Change-Id: I59e0ba34502e4a2341396f81bfb5829c296b35a5
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
b3c29b6f9d Bluetooth: Fix buffer leak in hci_rx_fiber
Unknown buffers are likely a bug, but we should still put them back to
the buffer pool. Also, there's no reason to stop running the fiber.

Change-Id: I413f9ff115689da9b1487bc622a8d26693cfd6d0
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
d1d2810c8d Bluetooth: Fix coding style of switch statement
Change-Id: Ib53a639a48929344609857447c577b9be764fbb0
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
943f0896a8 Bluetooth: Add deadlock protection for bt_hci_cmd_send_sync
The bt_hci_cmd_send_sync function will deadlock if called from within
the rx fiber. Add prevention for this when debug is enabled by
verifying that the calling context is not the rx fiber.

Change-Id: Ib94bd5c10185165d017fe0aeafbce46d503ad705
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
544cb1433c Bluetooth: SMP: Add Encryption Key distribution support
Add support for distributing our LTK to the remote side. Normally we
would generate the needed random bytes when the connection becomes
encrypted, however using bt_hci_cmd_send_sync() from a HCI event
handler (which the encryption_change is) is not possible and will
deadlock (because it needs to wait for a HCI command of its own to
complete). Instead, pre-generate the LTK as part of the SMP context
when we receive the SMP Random PDU from the remote.

Change-Id: Id9cc34b7ddfd1804626cf8bdc81c25aa8cc7943c
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
4c11bb5fdb Bluetooth: SMP: Fix authentication requirement in response
We shouldn't send any unknown bits or bits that we do not support.

Change-Id: Ia1c1cfd1e70ca879fd070b5fbcceef3b66ba8237
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
20b2d70a56 Bluetooth: SMP: Add more protocol defines
Add more defines needed to do key distribution and using correct
values for the authentication requirement.

Change-Id: I674c143d26ee31e9473c50c181c2947a305025fd
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
6140bd04fe Bluetooth: Store full LTK information
We also need to store the EDiv & Rand values to be able to do correct
look-up of LTKs.

Change-Id: If6dbfc7569d18a4c8597a401deccad3ef8cb51ad
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
2469d04ce2 Bluetooth: SMP: Update le_rand() to support arbitrary sizes
We'll soon need to generate other amounts of random bytes than 16.
Update the le_rand() helper to generate any amount of random bytes.

Change-Id: I9295e6e3d79b0577c7bced31604a0fa45f1a9424
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
764dd444e5 Bluetooth: Fix coding style (missing braces)
Change-Id: If96f4ce601499345e8e29143a03742594cac35af
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Luiz Augusto von Dentz
7f6a66c04e Bluetooth: Move UUID code to its own file
UUID defines, etc, will be needed by multiple files including GATT.

Change-Id: I855d3934242f54a8b5bf31652a4f8b9dfb63ef06
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
5c9421ff32 Bluetooth: Move SMP & ATT contexts to protocol specific files
Now that we have the connected/disconnected callbacks available for
L2CAP channels we can use these to associate the bt_conn with a
respective protocol-specific context.

Change-Id: I7c4d9a54f73ae7029a73372a1b0c93d473b28881
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
7650dabdab Bluetooth: Add L2CAP callbacks for connection state changes
Add callbacks to notify L2CAP channels of connections, disconnections
and changes in the encryption state.

Change-Id: I66f86f20f551f01459abdbec6ccd214992828470
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
0b099acb4c Bluetooth: Add registration mechanism for L2CAP channels
We'll either way need various callbacks as well as get rid of the
channel-specific contexts in conn.h, so add a dynamic way of
registering fixed channels. The LE signaling channel is handled in the
same way as any other channel.

Change-Id: I5f8c1af3c8e3d107212becf507a5a6485838e081
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
62c82f0c97 Bluetooth: Add support for Encrypt Change HCI event
There will be various scenarios where we need to know what the current
encryption mode for a connection is.

Change-Id: I9836ffe51bfb6ebfc09497c7c716bd13a4064305
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
066a0e103c Bluetooth: Fix handling of connect/disconnect_complete events
The handles do not need ACL data-like decoding and the handlers should
be no-op for any non-zero status.

Change-Id: I40006ef7e5d01e8841ae0bebeda87755b2a32938
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
8aec59f010 Bluetooth: Use more appropriate printf format specifiers
Now that the logging macros use printf we can use more appropriate
format specifiers for various values.

Change-Id: I01025133b6a075f3478957a60163a1574cd85df7
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
0821341d3f Bluetooth: Add support for responding to LTK requests
Add an event handler for LTK requests that looks up the LTK using the
new bt_keys API.

Change-Id: Ifc4e5f96e84026d7e8c68eacb64154dc0a9c72b3
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
3075658253 Bluetooth: SMP: Store STK using new bt_keys API
Take advantage of the new bt_keys API to store the generated STK.

Change-Id: I7dc20c8581e55a98f2f4f804d3a01bc636364ad0
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
619bf02559 Bluetooth: Add runtime storage & API for pairing related keys
Add runtime storage of pairing related keys, along with a config
option to control how many pairings are supported.

Change-Id: Ib5177d2b6fbb0d2d458b539a3f1095c1dce135ff
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
7ce57dd762 Bluetooth: SMP: Implement key generation function s1()
The s1() crypto function is used to generate keys for SMP Legacy
Pairing.

Change-Id: I839cb8210d8babe64551f8d958c97d0addd459b4
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
5190c37967 Bluetooth: Make max supported connection count configurable
Add a kernel config option to specify how many simultaneous
connections can be supported.

Change-Id: I963aacb7cece3436ecd5049683a19a350224a156
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
63552b1485 Bluetooth: Add error logs for bt_init() failures
These may help debug early initialization issues.

Change-Id: I18a8043b2da46ec50f03fedfce46e48d9b41b373
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
44e67698a6 Bluetooth: Move L2CAP header encoding to sending stage
Encoding the L2CAP header when allocating the buffer means that we
must know the final size up-front. This is not always possible, so
move the header encoding to bt_l2cap_send() and only have the
bt_l2cap_create_pdu() function reserve enough headroom without
actually encoding anything.

Change-Id: Ic1c3b6b72c265cd0db4e835790fa915e0acd9388
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:02 -05:00
Johan Hedberg
e104fa5928 Bluetooth: Fix accounting for driver header in ACL MTU
When we notify the controller of our ACL MTU we should subtract from
the buffer size not just the ACL header but also the headroom reserved
by the driver.

Change-Id: Id05b1becab3682425f9b591217ac29659a13a6d0
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:02 -05:00
Johan Hedberg
80824d459e Bluetooth: Fix coding style (too long lines)
Change-Id: I6573eee755d26290626e1a44a5f56fe56b92c55c
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:02 -05:00
Johan Hedberg
60cf3146f7 Bluetooth: Fix minor typo in debug log
Change-Id: I0478e22b69d7a0ed5f5c642aa651cd58810aa035
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:02 -05:00
Johan Hedberg
7f9aeeb2e8 Bluetooth: Add debug logs to connection data path
Add debug logs to the rx/tx fibers so issues relating to them can be
more easily debugged.

Change-Id: Ie02d3e760772a3e47ff495c47d83b23744202941
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:02 -05:00
Johan Hedberg
24a0e0eeb5 Bluetooth: Improve debug logs for HCI core data paths
Add debug logs to the HCI core data handling to catch potential
issues.

Change-Id: I39bd3aeec9ed7b64156a9e2e899a153c0d484f38
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:02 -05:00
Johan Hedberg
c533552497 Bluetooth: Increase fiber stack sizes when debug is enabled
The debug logs may cause a considerable overhead to stack utilization
(especially with printf). Increasing the fiber stack sizes when debug
is enabled decreases the chance of stack overflow.

Change-Id: I26e96c6516e0c1210e787cc5491fd5d59cbc75db
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:02 -05:00
Arkadiusz Lichwa
022d67096d Bluetooth: Initialize LE ACL MTU to proper value
Fix stack initialization.
When LE read buffer size returns 0 length LE buffers and controller
supports LE & BR/EDR functionality then ask controller about max ACL data
length it can accepts using BR/EDR read buffer size.
It should return value that can initialize LE MTU if that one still has 0.

Change-Id: Ib0bce89d47de5549d629a4ce771325e640443378
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
2016-02-05 20:14:02 -05:00
Johan Hedberg
5071a46ac8 Bluetooth: SMP: Add full Pairing Confirm & Random handling
Add tracking of the confirmation values, remote random value and the
temporary key value. This also involves implementing the SMP e()
function with the help of the HCI_LE_Encrypt command.

Change-Id: I4cdad917e9689bbe16cd908941d0335c1c33f870
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:02 -05:00
Johan Hedberg
1e5efb9fb7 Bluetooth: SMP: Store original pairing req/rsp values
These values are needed later in the SMP pairing procedure as inputs
to various crypto functions.

Change-Id: I68334ed6d32625c4e7e0668300844af09018e126
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:02 -05:00
Johan Hedberg
38a7d345ae Bluetooth: SMP: Fix minor coding style issues
Add missing braces to a couple of one-line branches.

Change-Id: Ie4d703eede3cc03b823bd0a0764a5b999f317322
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:02 -05:00
Johan Hedberg
a648bbe9a1 Bluetooth: SMP: Add local random number generation support
The SMP procedures require us to establish a local random number. Use
the HCI_LE_Rand command to generate the necessary 16 bytes (the
command needs to be called twice since it only returns 8 bytes at a
time). Store this number in the SMP context.

To help debugging with various crypto related values add a local h()
helper function for printk/BT_DBG to do hexadecimal conversion.

Change-Id: Id3e8793a77ac635023b3cc3a94e8679170455870
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:02 -05:00
Johan Hedberg
653378d031 Bluetooth: Track remote address for connections
We'll need to know the remote address for connections e.g. when
performing SMP based pairing.

Change-Id: I7e398a75c2418ec534b3cac15ab72f76586c2e9b
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:02 -05:00
Johan Hedberg
4dae513d4b Bluetooth: Add contexts for SMP & ATT specific data
All fixed channels will need per-connection contexts. Right now in
addition to the L2CAP (LE) signaling channel the other two fixed ones
are ATT and SMP.

Change-Id: I56dda6b903ef703e453438e03a99c704aa77899a
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:02 -05:00
Johan Hedberg
19deebbecf Bluetooth: Move L2CAP context into dedicated struct
In preparation for having per-fixed channel contexts move the L2CAP
signaling channel specific data into a dedicated struct.

Change-Id: Iaacb5e1c7408be67740434f31ef56f94706ad327
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:02 -05:00
Szymon Janc
62267639ac Bluetooth: Fix not waiting for all commands to complete on init
For LE-only controller init procedure should wait for last HCI command
(Set Controller To Host Flow Control) to complete before returning.

Change-Id: Ic01e0cbaebf19d61560faab2ae01205c2eb22b77
Signed-off-by: Szymon Janc <szymon.janc@tieto.com>
2016-02-05 20:14:02 -05:00
Johan Hedberg
46372d712c Bluetooth: Fix missing bt_buf_pull when parsing adv report
The code would only have worked for reports with num_reports being
equal to 1. Any event with multiple reports would have been
incorrectly parsed because of a missing bt_buf_pull() for the initial
one-byte num_reports value.

Change-Id: I0ac92edb792d559fb8ff84e40a4b4766f46afe58
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:02 -05:00
Johan Hedberg
19707e8257 Bluetooth: Use 'void *' also for bt_buf_pull/push return value
To make the bt_buf APIs consistent with the recent bt_but_add changes
and more user friendly, change the pull() and push() return values
also to 'void *'.

Change-Id: I25242635c87882db99152735c22316d4de00d363
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:02 -05:00
Johan Hedberg
90b27c478d Bluetooth: Remove unnecessary bt_buf_add type casts
Now that bt_buf_add() returns 'void *' there's no need to explicitly
type cast its return value anymore.

Change-Id: I6d5c9d323dc08cb5a2b928977c1bbf3d741e5d8e
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:02 -05:00
Johan Hedberg
d6a03600b2 Bluetooth: Change bt_buf_add return type to 'void *'
Almost all callers of bt_buf_add end up having to do explicit type
casts of the return value since 'uint8_t *' rarely fits what's needed.
Changing the return type to 'void *' removes this extra type casting
need and makes the API friendlier to its users.

Change-Id: I6a79605006153b6d09f0d662a051cb599af68c37
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:02 -05:00
Luiz Augusto von Dentz
dd52c0109f Bluetooth: Make use of bt_buf_pull_le16
Remove the memcpy code and instead use bt_buf_pull_le16 for unaligned
access and byte order conversion.

Change-Id: I0216042566e27d6a513b302ae1ea78b49f2f1c31
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:02 -05:00
Luiz Augusto von Dentz
d1b61254f3 Bluetooth: Add bt_buf_pull_le16 helper
bt_buf_pull_le16 convert the initial 16 bits to little endian.

Change-Id: I6f6e9d63fc19b0579d9f445e15e975929fc63ba9
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:02 -05:00
Luiz Augusto von Dentz
009899116d Bluetooth: Fix missing braces in ATT code
Change-Id: Icc241250a357efb06614d841cc37de77dddece2e
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:02 -05:00
Luiz Augusto von Dentz
09f8409bfe Bluetooth: Fix using wrong PDU in handlers
Both Write Command and Signed Write command should use their respective
packed struct.

Change-Id: Id786d1e0ee0327f662c68fa1d2f3d3bf19a237fc
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:02 -05:00
Arkadiusz Lichwa
e60b8f1927 Bluetooth: Intro of basic ADV handler
Adds basic handler deserializing advertising data.
Adds helper reformat function.

Change-Id: I6385249c39e92b2f068a01e89d34530b7a321f34
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
329e4276ae Bluetooth: Fix ATT define values
The codestyle is to use lower case for hexadecimal values.

Change-Id: I0e73cdf6d8ff4b48e6cb814f705193c65a01d14a
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
f8215b94f5 Bluetooth: Move Write Command definitions
This changes order of Write Command definitions so it is consistent with
the opcode value.

Change-Id: Ie0eaaaec75d7b17d2da62a6c930ec56d1e666253
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
f436fc835e Bluetooth: Warn unkown ATT PDUs
The code should always warn about unkown PDUs since it could be causing
unexpected behavior or that something is missing.

Change-Id: Idc608ca221c5ff6e440f90fa24c2cd6a3e6437fc
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Johan Hedberg
36bf88678c Bluetooth: coding-style: Fix missing braces in for-loop
Even one-line loops & branches should have braces.

Change-Id: Ie82e4dce1b7a2c9181f631b20d6532f1866c1197
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:13:58 -05:00
Johan Hedberg
89c6fe152f Bluetooth: Treat unkown SMP PDU as warning
Unknown SMP PDUs may be a bad thing so upgrade the respective log from
debug to a warning.

Change-Id: I05072dcbedb071ff968dd9ddfb075770110b5853
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:13:58 -05:00
Johan Hedberg
cde6b86657 Bluetooth: Treat unknown L2CAP PDUs as warnings
There are valid cases where we wont have handlers for unknown L2CAP
PDUS. Therefore, convert these logs from error to warnings.

Change-Id: I309b8074f9ef883ce981a4a2fbc6ab8421fda62a
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:13:58 -05:00
Johan Hedberg
4cabc6902d Bluetooth: Convert unnecessary errors to debug logs
The unhandled opcodes and events are not really errors since we don't
need general handlers for everything. For events its good to have a
warning but for completed commands the cmd_send_sync() API means we
don't need generic handlers for everything.

Change-Id: Ie580189f3e6d69ef10d10e6c6080d5e983c08e8e
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:13:58 -05:00
Johan Hedberg
8271a58dd4 Bluetooth: Fix missing newline in debug log
Add missing newline character to debug log.

Change-Id: Ic78ae2587d8f48b1af9754f1484350e94039f6f7
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:13:58 -05:00
Johan Hedberg
3beca82c90 Bluetooth: Add debug config options for all current sub-modules
We want to be able to do fine-grained enabling of debug logs for the
various Bluetooth sub-modules. They all default to 'n' so an app
writer would need to go and enable the specific ones that they're
interested in.

Change-Id: I17105adf133d441dfc811bdd66a00be015813679
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:13:58 -05:00
Arkadiusz Lichwa
d46de84c03 Bluetooth: Create basic LE scan interface
Adds needed data structures.
Adds basic HCI interface to start/stop LE scan.

Change-Id: I69790b11d191078952ce05da386961c5c55a7172
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
dd7a73a228 Bluetooth: Rename bt_att_info structs and their defines
This replaces _1 and _2 with the respective UUID size they carry.

Change-Id: I254afe335121aef23ed49a5fe0c49520937cc14f
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
bfcd16be8b Bluetooth: Add ATT server initiated skeletons
This adds the remaining ATT PDU definitions.

Change-Id: Id58116e00ba0d3a0ea4b0f94bd262290342e7e9f
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
ed7b333385 Bluetooth: Add ATT Execute Write Request skeleton
This adds the defines for Execute Write PDUs along with initial code to
parse them.

Change-Id: Ifa8229b9f3bf0a60d9abe553263b32397d1ba881
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
0fe5fa9fcf Bluetooth: Add ATT Prepare Write Request skeleton
This adds the defines for Prepare Write PDUs along with initial code to
parse them.

Change-Id: Ia7210dbe4662afbebe742b5b1a7b8f08999adf2a
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
d3acf5f16a Bluetooth: Add ATT Signed Write Command skeleton
This adds the defines for Signed Write Command along with initial code
to parse it.

Change-Id: I2071163c8468a6580d9a9305095187a140c80a43
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
75f56d9e07 Bluetooth: Add ATT Write Command skeleton
This adds the defines for Write Command along with initial code to parse
it.

Change-Id: Ifabcfa8efb54b5135a540718fb60d9a656cd088c
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
9e8c1d1326 Bluetooth: Add ATT Write Request skeleton
This adds the defines for Write PDUs along with initial code to parse
them.

Change-Id: I69d2002b3e6da80037c058f42f543a0ab4765958
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
75aab47603 Bluetooth: Add ATT Read by Group Type Request skeleton
This adds the defines for Read by Group Type PDUs along with initial
code to parse them:

> ACL Data RX: Handle 3585 flags 0x02 dlen 11
      ATT: Read By Group Type Request (0x10) len 6
        Handle range: 0x0001-0xffff
        Attribute group type: Primary Service (0x2800)
< ACL Data TX: Handle 3585 flags 0x00 dlen 9
      ATT: Error Response (0x01) len 4
        Read By Group Type Request (0x10)
        Handle: 0x0001
        Error: Attribute Not Found (0x0a)

Change-Id: Iebc84e7a9c405fa58b7984602d2d27f79d6033a7
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
f00308f0eb Bluetooth: Add ATT Read Mutiple Request skeleton
This adds the defines for Read Multiple PDUs along with initial code to
parse them.

Change-Id: I34f597881e3bdb9325ffbf2bda42b7ae6710c3ae
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
eedc01d6d5 Bluetooth: Add ATT Read Blob Request skeleton
This adds the defines for Read Blob PDUs along with initial code to
parse them.

Change-Id: I5a2a2e2e32bf44d98ce928b3d57ad7f05059a927
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
dfdd657b37 Bluetooth: Add ATT Read Request skeleton
This adds the defines for Read PDUs along with initial code to parse
them.

Change-Id: I3ec54a0bf2394b54bd8b08957533f0826bf4a23a
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
0d853d64c2 Bluetooth: Add ATT Read by Type Request skeleton
This adds the defines for Read by Type Value PDUs along with initial
code to parse them:

> ACL Data RX: Handle 3585 flags 0x02 dlen 11
      ATT: Read By Type Request (0x08) len 6
        Handle range: 0x0001-0xffff
        Attribute type: Characteristic (0x2803)
< ACL Data TX: Handle 3585 flags 0x00 dlen 9
      ATT: Error Response (0x01) len 4
        Read By Type Request (0x08)
        Handle: 0x0001
        Error: Attribute Not Found (0x0a)

Change-Id: I0b4371b8decebf33710a949552a11c80c544b5f8
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Johan Hedberg
f73b3b954e Bluetooth: Remove unnecessary reinit of buffers
Now that we no-longer need to set an upper limit of outgoing ACL
buffers (thanks to reintroducing the ACL semaphore) we don't need to
perform a second initialization of the buffers.

Change-Id: Ie59bf7cb0e6915f1c67ca3dfb03244f9b4af94d5
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:13:58 -05:00
Johan Hedberg
9b1e7a935b Revert "Bluetooth: Rotate outgoing ACL packets via a pending queue"
This reverts commit ce981a0f51f94a3f23c43b947a2ce62a1ef08623.

Now that we're back to using an ACL buffer semaphore the rotation of
outgoing ACL packets via a pending queue is no-longer necessary.

Change-Id: I0da42992bed2abba1544b1a82c31bc71342ecf70
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:13:57 -05:00
Johan Hedberg
1f5b1b83e0 Bluetooth: Reintroduce ACL buffers semaphore
Since nano_sema is after all able to handle multiple waiters we can
have a cleaner and more efficient implementation by using a single
semaphore for all of the connection tx fibers.

Change-Id: Iafb595ae556a2dd826502cf282b88548cb34f336
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:13:57 -05:00
Luiz Augusto von Dentz
d51985e4ce Bluetooth: Add ATT Find Information by Type Value Request skeleton
This adds the defines for Find Information by Type Value PDUs along
with initial code to parse them.

Change-Id: I9eaf2df390ca6f78530df7f1ae606b588d1fcb2e
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:57 -05:00
Luiz Augusto von Dentz
b6d35d8281 Bluetooth: Add ATT Find Information Request skeleton
This adds the defines for Find Information PDUs along with initial code
to parse them.

Change-Id: If34533cca4a1a554ca3f119c7639a1167dae0ff2
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:57 -05:00
Andrei Emeltchenko
7a995c0a60 Bluetooth: Export bt_hci_cmd_send_sync() for SMP use
The function bt_hci_cmd_send_sync() would be used in LE SMP code for
using HCI controller for encryption.

Change-Id: I0f8f7963a0bf0597b59f24e6d21b6d1f49072f43
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:13:57 -05:00
Andrei Emeltchenko
82c913d53c Bluetooth: Add SMP encryption key check
Fixes PTS test case TC_EKS_BI_02_C sending correct failed reply to
wrong key size.
...
> ACL Data RX: Handle 64 flags 0x02 dlen 11
      SMP: Pairing Request (0x01) len 6
        IO capability: KeyboardDisplay (0x04)
        OOB data: Authentication data not present (0x00)
        Authentication requirement: No bonding, No MITM, Legacy, No
Keypresses (0x00)
        Max encryption key size: 6
        Initiator key distribution: <none> (0x00)
        Responder key distribution: <none> (0x00)
< ACL Data TX: Handle 64 flags 0x00 dlen 6
      SMP: Pairing Failed (0x05) len 1
        Reason: Encryption key size (0x06)
...

Change-Id: I1c02cbc03d1aaf6221d7a6ddfd9bc7ab30ca9586
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:13:57 -05:00
Andrei Emeltchenko
0aadf6ce69 Bluetooth: Add SMP Pairing Confirm skeleton
Change-Id: I484e24f111212acf3e920b4eed56d69e6b94493d
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:13:57 -05:00
Andrei Emeltchenko
b7dddcff00 Bluetooth: Add SMP Pairing Request skeleton
Add handling of SMP Pairing Request for Pairing Feature Exchange. In
the beginning support Just Works pairing method.

Change-Id: I8aab10683e9f26db4e0e9cb1bb9a8dc8940f0ab0
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:13:57 -05:00
Andrei Emeltchenko
d780f70339 Bluetooth: trivial empty space fix
Change-Id: I933dae2543f0f0c722736a3b3be79cf5494e9ff6
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:13:57 -05:00
Andrei Emeltchenko
d135dcf0e5 Bluetooth: Fix using magic number
Instead of magic number use sizeof().

Change-Id: I6c9db3d7a371312d0aab4fd7dc6a9d0c92449afc
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:13:57 -05:00
Johan Hedberg
5cff2d0b78 Bluetooth: Add debug support for buffers
For debugging buffer access related issues it's convenient to be able
to enable logs and extra checks specifically for the buffer related
code.

Change-Id: Ibb87d344809d2bcada10a22b16a23e6556f4ae79
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:13:57 -05:00
Andrei Emeltchenko
3750a7eb36 Bluetooth: Implement SMP error response
Add bt_smp_create_pdu() helper and implement send_err_rsp for an
unknown SMP command.

Change-Id: Iaed0811f3323f62aaa56eb531fb383cf15396ef8
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:13:57 -05:00
Andrei Emeltchenko
69f94f2484 Bluetooth: Add skeleton for SMP handling
Add support for Security Manager Protocol fixed channel. SMP handling
would be done in smp.c.

Change-Id: I26d3d098c6b1c3d03aad958d83dfee09e03add1d
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:13:57 -05:00