Commit Graph

1126 Commits

Author SHA1 Message Date
Luiz Augusto von Dentz
a6a78bfbca Bluetooth: L2CAP: Unify code for adding and deleting channels
The code for adding and removing channels is very similar for LE and
BR/EDR so it can be unified and just leave the CID allocation up for the
bearer implementation.

Change-Id: Icf4c66262c4e973039381ebd1861fad4d46e1535
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-07-11 15:39:59 +00:00
Luiz Augusto von Dentz
2329d82432 Bluetooth: L2CAP: Make l2cap_chan_add initialize the destroy callback
This is cleaner and safer as destroy is garanteed to be initialized once
it is added to the list of channels.

Change-Id: Iae674f6e25527d71c03c5903337b0bd18c3dd0be
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-07-11 15:38:30 +00:00
Johan Hedberg
4efe39ff04 Bluetooth: SMP: Take advantage of new bt_hex helper
The h() helper isn't needed anymore.

Change-Id: Ica1b4beb086237c1c792d5376e8ee71bc64394fe
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-07-11 09:44:13 +00:00
Johan Hedberg
6e701275af Bluetooth: Add hexadecimal conversion logging helper
This has so far been used in SMP code as the h() function. Now it has
a more generic name and is accessible by all parts of the Bluetooth
subsystem.

Change-Id: Iae4607da9c8b3e6779d9c97f84a4e486d5258ef0
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-07-11 09:38:53 +00:00
Johan Hedberg
f7d802b1e3 Bluetooth: Fix enabling ECDH HCI events when SMP is not selected
Now that there's an API always exposed for this the events should
always be enabled whenever the controller supports this feature.

Change-Id: I4965c9463ae7b3f6424784dab2c03403fdf3f179
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-07-11 09:38:42 +00:00
Szymon Janc
bccc1bf0e1 Bluetooth: SMP: Send pairing failed on unexpected PDU
If unexpected PDU is recevied it is better to reply with Pairing
Failed and abort pairing then just silently ingore such PDU as
pairing will most likely fail anyway.

Change-Id: I3c67a6997a5e8d33b1e97cb955981a52baf38d02
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
2016-07-09 12:40:48 +00:00
Luiz Augusto von Dentz
1183e6b82a Bluetooth: L2CAP: Add timeout handling
This adds initial timeout handling as described in the spec:

BLUETOOTH SPECIFICATION Version 4.2 [Vol 3, Part A] page 126:

  'The value of this timer is implementation-dependent but the minimum
   initial value is 1 second and the maximum initial value is 60
   seconds. One RTX timer shall exist for each outstanding signaling
   request, including each Echo Request. The timer disappears on the
   final expiration, when the response is received, or the physical
   link is lost.'

Note: As for the actual interval used they are based on the values used
in Linux but in case of disconnect the minimum of 1 seconds was used
to follow the text above.

Change-Id: Ib98899c3ff07334955aee9c8fb53b1b89ba7bf31
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-07-08 12:05:33 +00:00
Luiz Augusto von Dentz
076ed6bc13 Bluetooth: ATT: Add timeout handling
Accourding to the spec request should have a timeout of 30 seconds:

BLUETOOTH SPECIFICATION Version 4.2 [Vol 3, Part F] page 480:

  'A transaction not completed within 30 seconds shall time out. Such a
   transaction shall be considered to have failed and the local higher
   layers shall be informed of this failure. No more attribute protocol
   requests, commands, indications or notifications shall be sent to the
   target device on this ATT Bearer.'

Change-Id: I5e5b9fb008d3019831c5f6cc3bd4c2b85dd6b90a
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-07-08 12:05:33 +00:00
Mariusz Skamra
6f11245d92 Bluetooth: Fix missing endian conversion
16 bit handles have to be converted to host order.

Change-Id: Iae5d9d79bacd90cd5b42a98d02165ec75bf1272e
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
2016-07-07 06:04:33 +00:00
Luiz Augusto von Dentz
96b9425a64 Bluetooth: L2CAP: Only call disconnected callback for connected channels
If channel has conn set to NULL disconnected shall not be called as
may cause invalid actions as with bt_gatt_disconnected being called
with a NULL conn.

Change-Id: I11bc41a34c2a2a3bc5f8514ec4a948235473cfba
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-07-06 12:08:53 +00:00
Mariusz Skamra
2dda2a9835 Bluetooth: Use LE Rand workaround for MyNewt on Quark SE Devboard
LE Rand command crashing the MyNewt HCI firmware issue has been also
observed on Quark SE Devboard. Applying this workaround solves the problem.

Change-Id: I57a533309ced0b2d31517a65ac1899ed55112973
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
2016-07-06 12:08:42 +00:00
Szymon Janc
ad281d4dbe Bluetooth: L2CAP: Avoid double endianess convertion
We already have host order length in len variable.

Change-Id: I5b4ea652c5709eadd64b66584024501c40fd3abc
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
2016-07-06 12:08:31 +00:00
Arkadiusz Lichwa
fdfc92c80d Bluetooth: ATT: Fix ATT_CHAN() macro
ATT_CHAN() macro as a wrapper to CONTAINER_OF is been used by ATT
internals API wherein the main parameter is pointer to bt_l2cap_chan
object. The macro returns pointer to bt_att context object but
CONTAINER_OF's third parameter determines what member is taken into
account in getting right address. Luckily here this third parameter
"chan" of type bt_l2cap_le_chan got of its own sub-member the "chan" of
type bt_l2cap_chan on first position in structure order. If such order
would change somehow there could be taken wrong address.

Change-Id: I955c2af11e001dac90a1eacc281ff167ceb34fb9
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
2016-07-05 16:52:05 +02:00
Johan Hedberg
f1a82f8ebe Bluetooth: Fix incorrect public key size
The ECC public key is 64 bytes in length.

Change-Id: I0fec312cdd94ff181abf8ec7e4eab46e1dc11eb6
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-07-03 17:07:48 +03:00
Luiz Augusto von Dentz
b008f74b0b Bluetooth: L2CAP: Fix not cleanup properly if ACL is disconnected
If ACL is disconnected with channels still active the code should call
l2cap_chan_del to clean it up properly.

Change-Id: Iffa9345a9697ac80c1f2295578c7161ffeb44420
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-07-01 14:17:06 +00:00
Johan Hedberg
179f08f049 Bluetooth: Create proper abstraction for ECC access
This makes the SMP usage of ECC functionality properly encapsulated
and offers the chance of other protocols to utilize the functionality
in the future.

Change-Id: Iae14beafd5f8f7dbe2c6ffd33700471b8a62b8da
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-07-01 11:21:04 +03:00
Szymon Janc
19ff3d3e37 Bluetooth: Print events opcodes as hex
This makes logs easier to read as those are defined as hex values.

Change-Id: I67f1dc0da9056a69398faf55fd5535a67ec4ebb9
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
2016-06-30 16:05:59 +00:00
Arkadiusz Lichwa
caf83c96ed Bluetooth: L2CAP: Make public helper for LE channel conversion
Replaces all occurences of LE_CHAN() macro with new name
BT_L2CAP_LE_CHAN() and makes it public.

Change-Id: I426b17b0214f7ab4b69e5febbdca1917f22e7487
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
2016-06-30 09:06:35 +00:00
Szymon Janc
9c68fd4e5b Bluetooth: Add priority buffer for handling critical HCI events
Command Status, Command Complete and Number of Complete Packets are
used for driving TX fibers (HCI and connection). Missing any of
those event will lead to HCI traffic stall.

Priority pool will be used when critical HCI event is received
or normal pool runs out of buffers. The difference with priority
pool is that buffer from it must not be passed to RX fiber and
must be freed from bt_recv.

If driver knows HCI event opcode before requesting buffer for event
it may hint HCI core about preferred pool selection.

Change-Id: Iad14724945bb59721c5ffb6b62d5a8a3e3f70be7
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
2016-06-29 14:51:51 +00:00
Luiz Augusto von Dentz
e9083dfcd7 Bluetooth: GATT: Add flags to attribute write callback
This adds flags parameter to write callback which can be used to indicate
that data only need to be prepared with use of BT_GATT_WRITE_FLAG_PREPARE
fixing qualification tests that needs to check authorization or other
errors that cannot be verified with just the permissions.

Change-Id: I3d662b2027718ffb52a280e3bbc9750be14f89ae
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-06-28 17:36:08 +03:00
Arkadiusz Lichwa
0e782884a0 Bluetooth: ATT: Add helper for LE ATT channel conversion
Change-Id: I4dec2690924764c29445b788a097828cd8c63ca3
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
2016-06-27 10:52:35 +00:00
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