Commit Graph

1105 Commits

Author SHA1 Message Date
Johan Hedberg
fbb2fe8acf Bluetooth: Make random number generation API public
Applications or higher level profiles that are not part of the core
Bluetooth stack may need an easy way to generate random numbers. Since
we already have an internal helper for this export it for others to
use as well.

Change-Id: I29af7cab30ad8f60d481bc847984e781eaecd6bf
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-06-27 11:09:51 +03:00
Arkadiusz Lichwa
2178fc5ab3 Bluetooth: L2CAP: Add configuration response handler
Adds L2CAP configuration response protocol definitions to be able handle
response from remote in reaction to issued local request to exchange
MTU. Current optimistic path of configuration initiated from local
assumes to set MTU contract in one iteration.

Change-Id: If86d96b37e9cd888ad10a624a79c864a137e027d
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
2016-06-24 10:07:24 +02:00
Arkadiusz Lichwa
69882759b8 Bluetooth: L2CAP: Initiate MTU configuration request
Triggers conditionally outgoing configuration request to start exchange
MTU just after incoming PSM connection request was aknowledged by local
host. If local MTU differs from default (672) add MTU option in request,
otherwise send empty configuration meaning default is wanted.

Change-Id: I4eb382cc496345c051967640422e926f595ce854
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
2016-06-23 19:59:16 +00:00
Luiz Augusto von Dentz
c116fc42e0 Bluetooth: ATT: Merge all permission check in one place
This merges callback checks with permissions checks so there are done in
one place.

Change-Id: Ic51b2be9cda67eac9e5dc1ebcbf6186ad5007bf4
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-06-21 14:56:04 +03:00
Arkadiusz Lichwa
8b1c837e28 Bluetooth: L2CAP: Handle incoming BR/EDR connection request
Enables L2CAP protocol definitions for connection request/response and
use it then to start handle incoming PSM connection request to valid
registered local PSM server. SDP PSM got no security restrictions.
The other PSM connections are validated against link encryption and
availability of SSP feature and if not matched are refused with
security error.

Change-Id: I429cf5dbce92300bd52639d5065e0144f8db4d13
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
2016-06-21 07:41:27 +00:00
Johan Hedberg
8afe6078e1 Bluetooth: Avoid unnecessary indentation in read_remote_features_complete
Instead of having a dedicated branch for the success case jump to the
cleanup label in the inverse condition.

Change-Id: I271ce088a5b469d1fb96af1256fcafa5b1e6e2f7
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-06-20 13:39:28 +03:00
Arkadiusz Lichwa
16fda5f3d9 Bluetooth: Add support to read LMP remote features
Introduces HCI protocol defines to be able request and read remote LMP
features and if available extended data from peer when connected.

Change-Id: Ic274737d8b6c896eb9e83e2179829bcbadf6f635
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
2016-06-20 10:13:03 +02:00
Luiz Augusto von Dentz
562b491182 Bluetooth: Add delay before sending Connection Update
BLUETOOTH SPECIFICATION Version 4.2 [Vol 3, Part C] page 368:

  "The Peripheral device should not perform a Connection Parameter Update
   procedure within T GAP (conn_pause_peripheral) after establishing a
   connection."

> HCI Event: LE Meta Event (0x3e) plen 19 [hci1] 11:14:22.496358
      LE Connection Complete (0x01)
        Status: Success (0x00)
        Handle: 74
        Role: Slave (0x01)
        Peer address type: Public (0x00)
        Peer address: 7C:7A:91:18:82:46 (Intel Corporate)
        Connection interval: 70.00 msec (0x0038)
        Connection latency: 0.00 msec (0x0000)
        Supervision timeout: 420 msec (0x002a)
        Master clock accuracy: 0x01
...[5 seconds interval]...
< ACL Data TX: Handle 74 flags 0x00 dlen 16 [hci1] 11:14:27.493541
      LE L2CAP: Connection Parameter Update Request (0x12) ident 1 len 8
        Min interval: 24
        Max interval: 40
        Slave latency: 0
        Timeout multiplier: 42

Change-Id: Ibb301ea00c127542ba299ad0b94825ad1ed05c5c
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-06-16 16:56:39 +03:00
Johan Hedberg
8ea57bd5d3 Bluetooth: Shorten limited discovery parameter name
The parameter is already inside a struct that's specific to BR/EDR
discovery, so there's no need to repeat "discovery" in its name.

Change-Id: Idb95788bfc9d62ecd52adecc35104e212724cb78
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-06-16 11:28:59 +03:00
Johan Hedberg
38564baf2f Bluetooth: Minor whitespace fix
Change-Id: Ia51eba21b0ba6f1a7a8ba45c76cd7a5224596870
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-06-16 10:58:50 +03:00
Johan Hedberg
1a756d6f8d Bluetooth: Fix validity check for Inquiry parameters
Since we only have a single user we can enforce length > 0x01. We
should also ensure that the results count is 1-255.

Change-Id: Id5d91acae06c6c6fc66dd59c0e367682a98dc08c
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-06-16 10:58:50 +03:00
Johan Hedberg
a6baf0651e Bluetooth: Pass Inquiry results array size to HCI_Inquiry
This way we avoid having to explicitly cancel the inquiry when we've
received the maximum amount of results.

Change-Id: I586cdd93f39042ac88384cfe6d2bf963ce8a1d99
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-06-16 10:39:47 +03:00
Johan Hedberg
c2a5ab1917 Bluetooth: Add BR/EDR Inquiry length to bt_br_discovery_param
This way the application can control the maximum duration of the
Inquiry. The value 0x00 (which is invalid for HCI) is still accepted
for backwards compatibility and gets mapped to the old hard-coded 0x30
value.

Change-Id: Ibc9eb86bbb6c9e45b7b351278517b4a688015195
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-06-16 10:21:15 +03:00
Szymon Janc
4245fc4dc7 Bluetooth: Always restart advertising on disconnect event
Restart advertising on LE disconnect event even if related connection
object was not found.

Change-Id: Ia18831ef4f84edb25bf1443793ebb194971ba1dd
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
2016-06-15 10:11:11 +00:00
Szymon Janc
1bcdb48643 Bluetooth: SMP: Fix registering L2CAP fixed channel
After last refactor L2CAP channel context is type of struct
bt_l2cap_le_chan. This fix not being able to use Security Manager.

Change-Id: I6e54a1ab1bc3c48f856b07cb45278e3b8b23b122
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
2016-06-14 17:14:45 +02:00
Johan Hedberg
4c95464b9e Bluetooth: Use proper net_buf APIs
Now that buffers can contain fragments we should always use the
net_buf APIs to read/write FIFOs and never the nano_fifo APIs
directly.

Change-Id: I203af43e887145a1b14f33a3729ef721fbd46469
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-06-13 17:22:05 +03:00
Johan Hedberg
b0d721c496 Bluetooth: L2CAP: Remove unnecessary stack variables
Remove unnecessary bt_l2cap_chan or bt_l2cap_le_chan stack variables
from the code.

Change-Id: Icb306f075d90b67e00155696f8e25f58b89821b2
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-06-13 15:14:18 +03:00
Johan Hedberg
5793b145d0 Bluetooth: L2CAP: Add helper for BR channel conversion
Change-Id: I796489d5d85bb3ba945c12a08a98243092006fde
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-06-13 15:14:18 +03:00
Johan Hedberg
b29bdca159 Bluetooth: L2CAP: Add helper for LE channel conversion
Change-Id: I69b074c98306842980cb7d9f92cb467b423f795a
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-06-13 15:14:18 +03:00
Arkadiusz Lichwa
b2647d84b3 Bluetooth: L2CAP: Refactor l2cap core types
Refactors L2CAP core data structures and modifies functions that uses them.
Now we can have separate L2CAP feature channel objects for LE and BR/EDR
transport. This's also a ground for make L2CAP CoC API to be common
for both transports.

Change-Id: Ic1197b0e3c4f505764b23fb9c7eb27123a44a675
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
2016-06-13 11:49:07 +00:00
Arkadiusz Lichwa
9b0dc3c33f Bluetooth: L2CAP: Fix reject command params on BR/EDR
The reject command can contain optional data that depends on reject
reason.

Change-Id: I3c1967f39f52a798a720c700c9d12c2877c837dd
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
2016-06-13 13:13:57 +02:00
Johan Hedberg
bd066867e4 Revert "Bluetooth: Remove LE Rand workaround for mynewt firmware"
The current documentation points to MyNewt 0.9 which doesn't have the
necessary fix, so revert the workaround until the next release of
MyNewt is out. A minor change to the original patch is that we also
have a delay in prng_init() which seems to be needed since this is now
called earlier during the HCI init sequence.

This reverts commit d75acb44c3.

Change-Id: Ic4919e01bddbfaca477825c3f7fdcb549c8d10ec
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-06-13 11:13:18 +03:00
Johan Hedberg
f7ae091ade Bluetooth: Allow NRPA usage when connections are not supported
Currently CONFIG_BLUETOOTH_PRIVACY is defined as the ability to
generate RPAs, and it depends on CONFIG_BLUETOOTH_SMP. NRPA usage
however may be desirable even without these features (e.g. a
broadcaster-only device). Furthermore, if we are using RPA based
privacy we should be using that instead of NRPA even when doing
non-connectable advertising.

This patch leaves out the option of advertising with the Identity
Address when non-connectable, however if we get a use case for that we
could consider adding a BT_LE_ADV_OPT_ID_ADDR to force using it.

Change-Id: I0502323aec15eefad1a729c393c707108d4cf758
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-06-13 07:42:34 +00:00
Johan Hedberg
ebd5011adf Bluetooth: Update Intel copyright for files modified in 2016
Change-Id: I10a7cab9a7f911b9f64e17bf24ddce82c2f08c40
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-06-10 12:10:53 +03:00
Roger Lendenmann
a96e8bb615 Bluetooth: GATT: Fix ccc cfg clear logic on disconnect
The ccc config clear logic should only clear its own cfg value if it is not
bonded and not the other ones.

Change-Id: I1b053b714744bdfb61fdbb445c08dffd3c9e1a1f
Signed-off-by: Roger Lendenmann <roger.lendenmann@intel.com>
2016-06-08 15:19:37 +02:00
Szymon Janc
d75acb44c3 Bluetooth: Remove LE Rand workaround for mynewt firmware
Latest firmware seems to have this fixed and delay is no longer needed.

Change-Id: I3caa8d38fc856964b57049d6704c80ca732ccde5
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
2016-06-08 10:23:22 +02:00
Szymon Janc
6d3ddef1d0 Bluetooth: Fix using uninitialized PRNG
PRNG needs to be initialized right at the begining so that it is safe
to use it from initialization sequence. This fix a race when ECC
emulation code was using uninitiliazed PRNG for public key generation.

Change-Id: Ia396f964b915368cee39ea6be998ef5774062591
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
2016-06-08 10:23:22 +02:00
Szymon Janc
c6fdf09340 Bluetooth: Fix notifying about cancelled connection attempt
If LE Create Connection was cancelled LE Connection Complete event
status is set to Unknown Connection Identifier and doesn't contain
valid remote address. In such case we need to look for connection
object in CONNECT state without using address. There can be only one
object in that state anyway so this is OK also for other error codes.

Change-Id: Ie61d47b8bb7ade6b2ab4db14ee394a65bb4e642b
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
2016-06-08 10:23:21 +02:00
Szymon Janc
609843a527 Bluetooth: Fix comment for bt_conn_lookup_state_le
NULL peer means that first connection with specific state should be
returned.

Change-Id: Ia635584437f948d9dcd82a3619fcf1516d23e0d1
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
2016-06-08 10:23:21 +02:00
Szymon Janc
c443888f3d Bluetooth: Simplify bt_hci_connect_le_cancel
There is no need for local variabel as error code can be returned
directly.

Change-Id: I0ad1bccb75bf1897d210c12d3ad0108f1f909dbe
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
2016-06-08 10:23:21 +02:00
Roger Lendenmann
ee2dfbdcf0 Bluetooth: GATT: Handle ccc cfg values correctly on disconnect
* clear non-bonded ccc cfg values as per BT spec
 * address compare logic
 * check if cfg_changed is defined

Change-Id: Id002f22a6aac1b918d743ef1e73b7e5c4768a229
Signed-off-by: Roger Lendenmann <roger.lendenmann@intel.com>
2016-06-08 06:08:19 +00:00
Johan Hedberg
b76426de6f Bluetooth: Fix never yielding if rx_queue always contains data
It's common for the rx_queue to be written to in ISR context (by the
HCI driver). This means that if there's lots of data coming in from
the driver the rx_queue might get empty very rarely. With the current
code this means that the rx fiber might end up not yielding to other
higher priority runnable fibers for long durations (as long as there's
data in the rx_queue).

To solve the issue, call fiber_yield() explicitly after each processed
buffer from the rx_queue. This way we give other fibers a chance to
run even if there's a heavy flow of data from the Bluetooth
controller.

Change-Id: Ib3dbe6536a62360ad5153ed12eee8489645e4109
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-06-07 21:38:20 +03:00
Luiz Augusto von Dentz
d7e0294227 Bluetooth: ATT: Add incoming buffer pool
This adds a buffer for incoming prepare writes which can be
tunned using BLUETOOTH_ATT_PREPARE_COUNT, these buffers are then used in
execute write to commit the data thus making flush callback obsolete:

[bt] [DBG] bt_att_recv: (0x001159c0)Received ATT code 0x16 len 50
[bt] [DBG] att_prepare_write_req: (0x001159c0)handle 0x0022 offset 0
[bt] [DBG] prep_write_cb: (0x001159c0)handle 0x0022 offset 0
[bt] [DBG] bt_att_recv: (0x001159c0)Received ATT code 0x16 len 34
[bt] [DBG] att_prepare_write_req: (0x001159c0)handle 0x0022 offset 45
[bt] [DBG] prep_write_cb: (0x001159c0)handle 0x0022 offset 45
[bt] [DBG] bt_att_recv: (0x001159c0)Received ATT code 0x18 len 2
[bt] [DBG] att_exec_write_req: (0x001159c0)flags 0x01
[bt] [DBG] write_cb: (0x001159c0)handle 0x0022 offset 0
[bt] [DBG] write_cb: (0x001159c0)handle 0x0022 offset 45

Change-Id: Iae071d7b4b5b042285952da57e3f7a853cf58afb
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-06-06 12:28:11 +00:00
Johan Hedberg
3f4631aeb9 Bluetooth: Kconfig: Reorder Bluetooth options behind single switch
This way we split all Bluetooth options behind a single switch.

Change-Id: Ia7a4b22842be4c0bf94bb73a6b39fd9f606db406
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-06-06 13:20:37 +03:00
Szymon Janc
8fc854029a Bluetooth: L2CAP: Fix reject command
Command reject may contain optional data depending on reject reason.

Change-Id: I0665f44e2adfbf03daa1625519530cabe247631e
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
2016-06-06 08:21:06 +00:00
Szymon Janc
ab9f70d867 Bluetooth: Add debug with currently set random address
This makes debugging easier when HCI monitor is not used.

Change-Id: I0f4480266fd745163f2fd789bedc3bf8f2a3ceb4
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
2016-06-06 04:46:04 +00:00
Szymon Janc
05bdba7768 Bluetooth: Fix clearing BT_DEV_ENABLE on HCI reset complete
BT_DEV_ENABLE flag value must be preserved after HCI reset is complete
to not allow calling bt_enable more then once.

Change-Id: I77bf6111d4fc2a209e0c5a56717decba156068a6
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
2016-06-02 13:37:25 +00:00
Andrei Emeltchenko
d9033386bf Bluetooth: log: Enable STDOUT_CONSOLE for printf support
The Bluetooth logs use format specifiers available with printf but not
with printk. Selecting STDOUT_CONSOLE enables printf support, which
makes the logs readable again.

Change-Id: I3e86f0bcf31688148a340eba6cdf33e81c64393d
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-06-01 08:21:29 +00:00
Luiz Augusto von Dentz
4290cf3b77 Bluetooth: SMP: Make use of nano_delayed_work API
This replaces use of delayed fiber with nano_delayed_work which uses the
system workqueue fiber and stack.

Change-Id: Ie127fc5eb6f38b38df072154a702d4efc34ed9f4
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-06-01 07:10:42 +00:00
Luiz Augusto von Dentz
f6dd1e4144 Bluetooth: Add support for using SYS_LOG
This add CONFIG_BLUETOOTH_DEBUG_LOG which depends on SYS_LOG since the
later can actually use either CONFIG_PRINTK or CONFIG_STDOUT_CONSOLE.

Change-Id: Ib2974d1331f6c91d119a218ec95e8bf01069377b
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-06-01 05:04:10 +00:00
Szymon Janc
d1d0ee7b2d Bluetooth: Allow to call enable function only once
Currently enable procedure can be called only once regardles if it
failed or succeeded.

Change-Id: I3869e97442720860baba7bb1b7610738ca95561a
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
2016-05-31 11:37:12 +00:00
Szymon Janc
31912bcb23 Bluetooth: Constify bt_register_starage parameters
There is no need for struct bt_storage being modified by stack.

Change-Id: I732cf94983a29de40d692e802d6a71b8986708df
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
2016-05-30 12:57:24 +00:00
Szymon Janc
515ec20a06 Bluetooth: SMP: Fix not waiting for remote DHCheck
When doing LE SC pairing with Passkey Confirmation slave must wait
for remote DHCheck before doing comparison. This fix issue with
pairing as slave when passkey was first confirmed locally.

Change-Id: Iba780836341a944997adde24285b2e650b31afa1
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
2016-05-30 09:37:06 +02:00
Szymon Janc
d7ae97de69 Bluetooth: Fix sending DHKey event if invalid key was provided
bt_recv should be used to send event back to stack.

Change-Id: I092e2480b3f0e5c40c0751c30be46d0310012bae
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
2016-05-30 09:37:06 +02:00
Kumar Gala
9ec2f3be80 Cleanup whitespace in Kconfig files
Convert leading whitespace into tabs in Kconfig files.  Also replaced
double spaces between config and <prompt>.

Change-Id: I341c718ecf4143529b477c239bbde88e18f37062
Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
2016-05-25 13:28:07 -05:00
Johan Hedberg
942bbadbf6 Bluetooth: Increase HCI_LE_Rand delay for Arduino 101
20ms doesn't seem to always be enough.

Change-Id: If5ff255d3f043e50e6e1d9ff481607dc17c604d1
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-05-25 11:32:31 +03:00
Szymon Janc
7a82d7f661 Bluetooth: Offload bt_recv to fiber if run from task
Task can be preempted and bt_recv is expected to be atomic. Since
on microkernel with TinyCrypt ECC enabled this can be called from
task context we need to make it run in critical section.

Change-Id: I24414e8d98b0dfe8affc18058eb164ba0cba7b17
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
2016-05-25 09:52:08 +02:00
Szymon Janc
684ffd1e23 Bluetooth: Offload ECC calculations to task
If TinyCrypt ECC is used for LE SC calculations need to be done
in task to avoid hogging CPU from non-preemptible fiber. To keep
upper layers of stack independent of crypto used (TinyCrypt or
controller) this patch adds HCI ECC emulation.

If ECC emulation is enabled it is always used regardless of ECC
support being present in controller.

Change-Id: I7c5ca873a18c10237e1c0b2f09e6da2a75fb334e
Origin: Original
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
2016-05-25 09:52:08 +02:00
Arkadiusz Lichwa
ade99e7e79 Bluetooth: L2CAP: Handle disconnection request from peer
Adds functionality to clean and release allocated BR/EDR CoC channel
after remote requests to disconnect.

Change-Id: Ie6657b8e72b2958ec79e9a5637f0dddf4bb98a5e
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
2016-05-20 06:54:10 +00:00
Arkadiusz Lichwa
a5d96e3f84 Bluetooth: L2CAP: Refactor l2cap_chan_get() in l2cap.c
Simplify l2cap_chan_get() in l2cap.c file by removing
CONFIG_BLUETOOTH_BREDR preproprocessor check. Now function serves
only getting channel on LE transport.

Change-Id: I20b72f352ad9d5998cc812b28cb3d6951f91f212
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
2016-05-16 17:00:11 +02:00