This command will be used to add a descriptor to attributes database.
>> send 2 4 0 02000302cccc
Received: hdr: header(svc_id='\x02', op='\x04', ctrl_index='\x00',
data_len=2)
Received data (hex): 04 00
Received data (ascii): ('\x04\x00',)
> ACL Data RX: Handle 64 flags 0x02 dlen 9
ATT: Find Information Request (0x04) len 4
Handle range: 0x0004-0x0004
< ACL Data TX: Handle 64 flags 0x00 dlen 10
ATT: Find Information Response (0x05) len 5
Format: UUID-16 (0x01)
Handle: 0x0004
UUID: Unknown (0xcccc)
Change-Id: I64b77ce735e2dff10ae15290fb174b7f99876014
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
This command is used by the tester to include service.
Service that is going to be included has to be already present
in the gatt database.
> ACL Data RX: Handle 64 flags 0x02 dlen 11
ATT: Read By Type Request (0x08) len 6
Handle range: 0x0001-0xffff
Attribute type: Include (0x2802)
< ACL Data TX: Handle 64 flags 0x00 dlen 14
ATT: Read By Type Response (0x09) len 9
Attribute data length: 8
Attribute data list: 1 entry
Handle: 0x0007
Value: 01000500aaaa
Change-Id: I12e1790be946c3cf10105c66a852da1cb23cf4bd
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
This patch changes the way the attributes are added to the database.
From now, attributes will be registered one by one in gatt_db_add function.
This change is needed, because the handle of the attribute is assigned
in bt_gatt_register, and the tester application has to respond to the
command with valid attribute handles.
Moreover, Set Value command rely on the attribute handle, based on which
it looks for an attribute with handle spacified by tester to set it's
value.
Change-Id: I1f251f9bd5579bde2a52ebe3f1997da49c1b1721
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
This will be needed to pass tests that require Insufficient Encryption
Key Size error response.
Change-Id: Ie358686d3a9843527e0c3dbd3918daed4e4d2f4c
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
The same opcode was used to Device Connected event.
Change-Id: I51640ed81822311817e82e43998c476795a28d49
Signed-off-by: Grzegorz Kolodziejczyk <grzegorz.kolodziejczyk@tieto.com>
The cloned buffer is used to retry in case a security error happen but
since the buffer pool is now limited the callback may actually block if
it creates a new request which would need 2 buffers (original + clone)
but only one is available since the previous request clone is not
released yet.
Change-Id: Ife508b09c4b326b8213fd0b130ebf3c2e7fe47c9
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
When sending ATT packets we may need to clone the original buffer.
Because of this one buffer per connection is not enough. Add one extra
buffer to the pool to cover for this.
Change-Id: I9fd9cb806f79ff99f1415a0fd7293ef0baf1d3f9
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
There's no need to do manual minumum calculation when there's the
min() helper available.
Change-Id: I4d5cfb088d9e6499750664680419ab4beb56e0d5
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
We can remove the need for the extra 1-byte headroom by simply
directly writing the H:4 header with uart_poll_out(). Also the
separate uart_out() function can be removed by taking advantage of the
counters already present in the net_buf.
Change-Id: I54bd852e28f416b3de250cd9f8a126269cccfc14
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
All user visible options should have at least some help text to them.
Change-Id: I97db035f2a4939b4d3c26b7260ad1a39351664b2
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
There's no BLUETOOTH_ACL_OUT_COUNT configuration option anymore so
update the text accordingly.
Change-Id: I431e3d63b8a3e9aebe855e4b5c0083e7d5e50f8b
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
It's move intuitive to have the BLUETOOTH_CONN selectors right before
the section for choosing options that depend on them.
Change-Id: If3d1a1fcb9c78d715b502b58fba9293ca69d0835
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This makes it easier to visualize all debug options under a single
sub-menu.
Change-Id: If69a71138450a4cae24ede2c110f42ced9ee762f
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Clean up and remove redundancies in Kconfig. Many 'depends on'
statements can be removed by moving entries behind common if-endif
blocks.
Change-Id: Iaa1c4e717e8353f4c09e991413588cf840281c5d
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
The stack.h will eventually be moved to a generic place. Also separate
BLUETOOTH_CONN includes clearly.
Change-Id: I52bf657ac6458c3a7c99a462d17e4a0d420d709f
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
The right size for event buffers is EVT_BUF_SIZE.
Change-Id: I7cc9c43b6699aafac8b8deccfe87f5390c09ccfa
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
In order to avoid memory corruption, the dummy 802.15.4 radio
must reset its internal state when there is an error when
reading packet data from UART.
Change-Id: Ifeba5181f014426b95d21e5726c638eae555b649
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
The 23 bytes default is quite limiting. When SMP has been enabled we
can do a bit better since we know that we can fit two complete ACL
packets to the buffers (23 bytes payload in the first, and 27 in the
second).
Change-Id: I71d9c484c962b1ff46d325f7182511f168608b8e
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
It's more intuitive to specify needed command or event lengths rather
than the raw buffer size in Kconfig. The exact buffer size calculation
can be done in the code itself.
Change-Id: I2760cc1182a689b26405e4c2b1428f140b4aa88a
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
It's more intuitive to specify needed MTU sizes instead of raw buffer
sizes. The exact buffer size calculations can instead be made
internally in the code (using the BT_L2CAP_BUF_SIZE helper macro).
Change-Id: I0637340a7d99e04020f57f49ecd8e6dcfcc4bcf4
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This doesn't need to be exposed in the public API.
Change-Id: Ib6d4336684620bd1e03d128765f289b5ebd744ef
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
The outgoing fragments don't need to reserve space for the L2CAP
header since we're copying from an original buffer that already has
this header (and continuation fragments don't have it a all).
Change-Id: I3ce18bf45f2a31f5ab3db395a506e35aa246762b
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
We can simplify & shorten the code by doing the copying from the
original buffer straight in the create_frag() function.
Change-Id: I8e7676642a13095783071275fbccc248f55e245c
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
When send_frag() is given the original buffer (from tx_fiber) the
tx_fiber itself takes care of unrefing in case of failure. We need to
therefore instruct send_frag() when it can fully assume to own the
buffer (in case it's a separately created fragment) and when it should
leave it alone in case of failure (when it's the original tx buffer).
Change-Id: If4804e1fe19a9c7a0aa0694fdc2cbb58b10ece2b
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This way we're both able to properly utilize the fragments pool as
well as ensure that no two buffers for this connection end up being
fragmented into the tx_queue in an interleaved fashion (which would
just confuse the controller).
Change-Id: I3934cd3fbfc5e190d61475eb691a34a2df13ed74
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Since bt_conn_send doesn't currently return an error code it must be
assumed to consume the buffer no matter what. The only failure
condition is the "not connected" case, so make sure the buffer is
unreffed there.
Change-Id: I30e9a81d6f801a67d90ab59c1040b6f55261e71c
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
With this split we get better control of the buffer sizes and counts.
We also anyway will need a fragments pool so a simple generic ACL_OUT
pool doesn't make sense anymore. The related Kconfig options for that
have been removed.
Change-Id: I616cf49915a1cc0dc0ddc724e2e182bcbe0c80f6
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
We know the needed values at build-time, so there's no point in having
a runtime mechanism of accessing them in the code. Having the values
as defines makes it e.g. possible to use them as input for defining
the size of buffer pools.
Change-Id: Ib7556644719bfb631e638fa5bf29f3d1747a5072
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This seems like a more appropriate place, and it's where we'll anyway
need to manage a separate pool for ACL_OUT fragments.
Change-Id: I6e0e2ec67d2f89a7f09787a3674405570d9b9cce
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This helps move the ACL_OUT buffer management into conn.c.
Change-Id: Ie5ef48e02eeef5077f433e42c1e2eba9bdb94f63
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This patch adds bt_conn_enc_key_size function which will be used
by application to check encryption keys size of a encrypted connection.
This will be used especialy by GATT applications, because some
attributes to be accessed require encryption with specified
minimum encryption key length.
> ACL Data RX: Handle 64 flags 0x02 dlen 7 [hci0] 708547.536685
ATT: Read Request (0x0a) len 2
Handle: 0x0003
< ACL Data TX: Handle 64 flags 0x00 dlen 9 [hci0] 708547.544302
ATT: Error Response (0x01) len 4
Read Request (0x0a)
Handle: 0x0003
Error: Insufficient Encryption Key Size (0x0c)
Change-Id: Idbc9afde7ec80504898bd8d1e193f3e71a93f3f9
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
JustWorks pairing should be forced only if both sides don't require
MITM. Code checking this was incorrect and forced JustWorks even if
one side required MITM.
Change-Id: I70312b6832218f430546896ae1f2283ae6ce7c60
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
Keys in struct conn are set before encryption is enabled so there is
no need to look-up those every time security level is updated.
Change-Id: Ib0edb3c40fd2c5deca00055ed3f3ae7414a5df8e
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
If no keys are set for connection look-up it done. If keys are already
present there is no need for another look-up.
Change-Id: I0518772c4c9d8458b4b79aa7cb34a049324fb552
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
It is more intuitive to assume that the driver send() consumes (takes
ownership) of the buffer given to it.
Change-Id: I53d9cbebc0564d1d11110fc78a62ce0bbb3cdfd2
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Isolates existing LE connection specific attributes and
prepares for now empty BR/EDR specific connection internals.
Change-Id: Ib423306fbf60e8451998e3933aee00cb672a1106
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
This removes some outdated comments, adds missing ones
and fixes some major typos.
Change-Id: I3e6c0c1b88c67852fc8c24eb2ff35d74af8bc656
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
Don't jump to BR/EDR read buffer size if LE read buffer size
returned LE data packet length value > 0 in le_init().
Change-Id: If0efa9f239ef75d832cf0f89ae6f227788cbf175
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
There could be cases where the destroy callback needs more
fine-grained control of step ordering than "1. destroy, 2. put back to
free FIFO". One case could be when the the pool needs to be protected
by a microkernel mutex or semaphore. In such a case the putting back
to the FIFO may need to happen before a custom action in the destroy
callback.
Making the destroy callback responsible for returning to the free FIFO
gives full flexibility regarding the order of the cleanup actions.
Change-Id: Ib9532d1dd70e0a2042af54ebd3e40a853dd42d33
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
l2cap_chan_le_recv and related code should only be compiled if
CONFIG_BLUETOOTH_L2CAP_DYNAMIC_CHANNEL is defined.
Change-Id: Ia83e2010cdf251afc0a5cbf24b54173926de84c5
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Fix format of bt_l2cap_server_register documentation.
Change-Id: I22322a235bb1d6b6752bfe13ce8e305481649125
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
If we fail to send an HCI command to the HCI driver we should give back the
semaphore that counts available commands.
Change-Id: I4aedf662c8b96d57ebafeb471deeb911c5f8ac7a
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
If we fail to send an ACL packet to the HCI driver we should give back
the semaphore that counts available buffers on the controller side.
Change-Id: Ibad4039d24bcd49fe40b1f87608e1ad4c0248251
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
We need at least 2 buffers in each direction in case of fragmentation,
and there's no need to have such a low maximum count.
Change-Id: Ie25f4ebb231176a855e9651cb896fa8b59279629
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
These make the code more readable when it comes to encoding and
decoding ACL handle values.
Change-Id: Ibd1972d6001c6c0c55428300f839b288dff1ce52
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Disconnect command is special since it is also used for cancelling
outgoing connection. Due to this is might be called with default_conn
set to NULL. To avoid conditional unref always pick extra reference
from default_conn for local use.
Change-Id: I59ad583becbf39a71366069d0307aa44f2c64174
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>