Allow caller to specify a timeout in ticks while waiting
network data. The timeout value has following meaning:
TICKS_UNLIMITED wait forever
TICKS_NONE do not wait
value > 0 timeout value (only applicaple if
CONFIG_NANO_TIMEOUTS is defined)
Change-Id: Icbb33fa0eeb462659d4006dd9d948a04f39a87a9
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
User is able to tweak the number of network buffers via
Kconfig file. Default value of network buffers is 2.
Each buffer will occupy 1280 bytes and can either hold
received or sent IPv6 or IPv4 packet.
Change-Id: I81c099bc5d97972ec9cc1cae775f891f8b8f887c
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
Useful in order to see what is going on in the stack.
Change-Id: I9fa7d12d836d449b253a0339c70bb25f471059df
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
UDP reply handler was not freeing net_buf properly if the
context was not passed properly to the callback. This
happened because the callback user data pointer was having
incorrect value.
Change-Id: Idfefd37b29674129252aa8f903fa9fe55de191cb
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
When sending data to network, make sure to check the return
code from network driver. The driver should return these codes:
0 : If packet could not be sent. In this case buf should
not be released.
1 : If the packet was sent successfully. In this case the buf
should be released by either the send() or some other
lower layer function.
<0: If there is an error, the buf should not be released by
send() function.
Fixed the relevant part in Contiki code so that the tcpip_output()
return correct value
0 = packet was not sent, caller needs to free it
1 = packet was sent, network driver will free the net_buf
after sending it to medium
Change-Id: I4380d7747985fc057f5ef73ca97b76f6e9888a55
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
Make the debug prints a bit more useful by printing also
the relevant IP addresses.
Change-Id: I2029f7a7bc5e888d184467dee19802af9621e36e
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
This enables writing from offset using Prepare Write + Execute Write
procedures including Long Write procedure when the data is bigger than
the MTU.
Change-Id: Id35d66c011ba582a4ba92ffe75444226e479335a
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This can be used to check what is the configured MTU for the given
connection.
Change-Id: I292b06dbe079fbd567cd8d39615cfbc3dad6b2a5
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Follow Key Distribution order: CSRK shall be sent after BDADDR Info.
Change-Id: I08a784ebc56d5f891e81bb9f2c7d215d47f1f6a5
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
This leads to unexpected responses where the data can be bigger than
the MTU negotiated.
Change-Id: I395f85ce8b132b3c1727978eed8491ae4745b078
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Store remote CSRK key upon receiving SMP Signing Info command.
Change-Id: I62e8fafc9bef5fd765edc5455b7eb17ea0961605
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Include CSRK to Key Distribution fields in Pairing Request and
Response.
Change-Id: I0a564bd2675760b6b30f0288b6f26e24a161811f
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Connection Signature Resolving Keys allows to sign data sent over not
encrypted connection.
Change-Id: Ia73e5572acc99f53a183f94597d57865563279d1
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
If a device is disconnected and has not been paired remove any
subscriptions to the device since it wont be notifying once reconnected
the application will have to subscribe again.
Change-Id: I8ca7de0ccaefbc543b723ce5280ab8ee5f9157d1
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
bt_keys_get_addr creates a new entry if none is found so it cannot be used
to detect if the device have been paired, instead use bt_keys_find_addr.
Change-Id: I0fd1de4b6e3a0652d36aa70d50074fb5013fa99d
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
bt_keys_find_addr lookup for any keys for the given address thus it can
be used to check if bonding procedure has been perfomed.
Change-Id: Ia398866418a908e35c8cd70e19b2bb2aa0a0be96
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
These short init helper functions are only called from a single place.
Performing the necessary steps inline makes the code more readable.
Change-Id: I9fc9f35a9db01ec43998fa624166da77cef93da8
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
We need to be able to perform the init procedure asynchronously
through a callback. The RX fiber is a good candidate to use for the
callback since it's not active in its normal operation before
drv->open has been called. In order to prepare for a future
bt_disable() API the init API is renamed from bt_init() to
bt_enable(). If a NULL pointer is given as the callback the API
behaves synchronously like the old bt_init().
Change-Id: I4e78fa8f32dcf5477ea05a8db75aca5cdce591fd
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This is preparation for the next patch where we let the rx_fiber
perform part of the initialization procedure. This procedure needs to
make calls to functions that are defined after the old location of
hci_rx_fiber().
Change-Id: I5e4366a90dac22846b8bf4ef1a9ee41bfe30d36c
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Prepare room in connection object for result of LE read remote
features procedure.
Change-Id: I30a557656d44a6c35a2a022e8e6e574b52d257be
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
The slave may request a change to the connection parameters using
the L2CAP LE signaling channel if either the master or the slave
or both do not support the Connection Parameters Request procedure.
Therefore if local controller doesn't support this, the request
can be made for sure.
Change-Id: I23e70793763693e40dab3bfb6a9634816f5b02b2
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
This is consistent with the rest of the API since the attribute length
can be at most 512 bytes long.
Change-Id: Ia2e60cf8dadcb93d0d091cda5be1b80de98fae94
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
GATT Handles are always 16 bits long.
Change-Id: I745197f7d7d3af52cb44e5be87b02471a23e9d73
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Attribute length can be up to 512 bytes long so it needs to be at least
uint16_t, ATT already takes care that the MTU does not exceed 512 bytes.
Change-Id: I6c8dc80a4b63f212420c26c0a24d93939fa510fe
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Whole smp context is already cleared up in smp_init().
Change-Id: Ided5d61dc6e859bd1a17b8b8d410f1ef8b2bebb0
Signed-off-by: Szymon Janc <szymon.janc@tieto.com>
If user wants to add unicast and multicast address, the current
limit (2) is too small. Increasing the amount of configurable
IPv6 addresses to 4.
Change-Id: I4c652e6c45266d6d0ac9ebf207a045158efdd300
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
Now the echo-client can send multicast packets to server.
Change-Id: I9bb5ba2726a116a010c2e35981cde62f6af7e3e6
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
Allow user to add multiple addresses with the same port number.
This situation easily happens when application adds unicast
and multicast address for same port it wants to listen.
Change-Id: Iabe51f21ac2fe6aab8e6c3ff42371fa11e0cec1c
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
Disabling prints by default but have them around as we will need
them later.
Change-Id: I21d980018286be560b9a072ee08ef0be42b0e788
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
We have an array of UDP connections so just go through
the list in a most simple way. Set only the UDP connection
pointer if we found something and clear it otherwise.
This helps to avoid weird errors where multiple UDP connections
were added but only the first one was found during list traversal.
Change-Id: Iae90ee6803eee1d06e7a49211d77692b0cf5ca50
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
It is better to initialize the UDP connection array
fully in init instead of setting only the port number
to zero. This way we do not have any garbage bytes
left around.
Change-Id: I90dcf6dc39a5a108818f25796160ca7dc52ba9d9
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
It is difficult to know what multicast addresses were added
without this print.
Change-Id: I870a911b14a0349949f1581084d3b4ec4ffb0ecb
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
According to Core vol.3, part A 4.20, if we operate in slave mode,
and we receive a Connection Parameter Update Request, we should
respond with a Command Reject with reason Command not understood.
Change-Id: Icf67eae432836796b8249953f53890b15bc542bf
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
With this patch advertising state and scanning state are stored as flags.
Change-Id: I5d2dc37972620ee89aaf55d45e294e8be82863d3
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
Initial setting of allowable commands can be put in one
function since it repeats in few places.
Change-Id: I645731810a2d83179af3e095bc20eb66809d9d8f
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
In smp_init we reset smp so that Pairing Failed command is deleted
from allowable commands and the pointer to the associated conn is lost.
With this patch associated conn is copied and the Pairing Failed
command is marked as allowed.
Change-Id: I7a71f985ca9d9d332e392aeb9368053a8c084750
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
This adds bt_gatt_unsubscribe which can used to unsubscribe to attribute
value notification using CCC handle.
Change-Id: I8a3b1594787a3322834516d0306a84c8ef7792dd
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This adds bt_gatt_subscribe which can used to subscribe to attribute
value notification using CCC handle.
Change-Id: I0983843836b0c2253f750b34b7765dd880cb10a0
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This adds function handler for Handle Value Notification PDU:
> ACL Data RX: Handle 3585 flags 0x02 dlen 8
ATT: Handle Value Notification (0x1b) len 3
Handle: 0x0014
Data: 00
Change-Id: I6faf9c8a3a3f892f889389c08380551268c7202a
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
After each response the start_handle shall be updated otherwise it will
loop foverever reading the same range over and over.
Change-Id: I9712f7a6cf0ca5c36460732ea96cf40471631e8a
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Adds fiber which starts with some specified delay.
If the fiber is not cancelled, bt_disconnect is called to
cancel creation of connection.
Change-Id: I06667d970ba3398f205f19f1d2e76ab6c283f274
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
Updates instructions to use the new platform terminology and build variables
instead of the obsolete BSP nomenclature.
Change-Id: I165982c701cde6e645138b3346e42b4588706ffa
Signed-off-by: Peter Mitsis <peter.mitsis@windriver.com>
Packetbuf is not global now. Pass net_mbuf parameter to
packebuf apis.
Change-Id: Ie272e78c3294e26ad14ba0d350668ad5ac99f797
Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
Using swap_in_place algorithm allows to eliminate more buffers.
Change-Id: Ifefd291e45b84213114d665adff9839fb131a185
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Add local and remote Connection Signature Resolving Keys and helper
functions.
Change-Id: I63af2e566dccc6ffb5397d28bde6f04bc78b93b1
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Checking error returned by L2CAP & SMP allows to fail Bluetooth
initialization in case something goes wrong.
Change-Id: Ie1c796eb64bcdee0f9dc99638c79fd4d7c05e456
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
In a case there no crypto library, AES-CMAC Message Authentication Code
might be calculated with the help of Host Controller LE Encrypt command.
Change-Id: If7073bf4baa3f86c04728712f6789cc269673da7
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
This adds bt_gatt_write which can used to write attribute value.
Change-Id: I45a02e6dbf642ed1bcab8234180f2c48a28e2874
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This function operates on bt_conn so it should be in conn.c and
exported through conn.h. Rename it with the appropriate bt_conn_*
prefix.
Change-Id: Id17c67f0e95cc1afb10aa7742b2d2ce0110ea616
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Rename the hci_core.c (previously internal) variable 'dev' to 'bt_dev'
and export it through hci_core.h. This way e.g. bt_conn doesn't need
to store an internal reference to it.
Change-Id: Ic1368c8f20d307c6a13a412f80d8183b56d7a76b
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Let bt_le_scan_update() perform all necessary changes to active
scanning so that it's even more helpful to the start/stop scanning
APIs as well as the bt_connect_le() API.
Change-Id: I8ee2daf96297749f782d364dfb66c7d0bbc48f5e
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
The bt_disconnect deals with the bt_conn object and should therefore
reside in conn.c and be exported through conn.h. It should also have
the appropriate bt_conn_* prefix.
Change-Id: I75eb648fd9aa8ced9a991d472c319d25f4b772af
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
In case bt_att_send fails the buffer reference need to be dropped
otherwise it will never return to the buffer poll.
Change-Id: I644a0af52d9f64fcb43a982cf121a0c51b676b90
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This adds bt_gatt_read which can used to read attribute values.
Note: Attributes which values are bigger than the MTU need to be read
multiple time until the end since the stack cannot cache any data.
Change-Id: I09c502eeb674a577673182c35a0e1a84519fd3b7
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This makes it possible to take advantage of the function also from
bt_disconnect() in the CONNECT_SCAN state.
Change-Id: I8c740f2b49b7690b6020ffd5bff6f04f8f850a5d
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Prepare the function for more generic usage where it can also disable
scanning if necessary. Once all bt_conn related function are moved to
conn.c this needs to be exported, so use the proper bt_ prefix.
Change-Id: I07c1bc7981b25a516682a8d7e6566af36d3c1fd8
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
There's no state where we'd want the AUTO_CONNECT flag to stay enabled
when requesting explicit disconnection.
Change-Id: I76dc112071d30199bb5201e5d5633125e1035ad5
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Calling bt_conn_set_auto_conn one can decide if auto connect shall
be used. If so, everytime the connection is lost, passive scanning
will be enabled to listen for connectable advertisements from
remote device and re-establish the connection.
Auto connect can be disabled if one decide to disconnect from
this device using bt_disconnect or call bt_conn_set_auto_conn
with auto_conn flag set to false.
Change-Id: Ic9952e313cb8612ea6c72838be0755805daeffcf
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
To avoid a forward declaration in a subsequent patch.
Change-Id: Ib3fc482af8f1fadda8e27af99811f73e64cd175a
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
Modifies ATT transport bt_att_read_mult_req type used in read multiple
request.
Internally now it's been declared as array of handles.
For ensuring validness of minimum PDU length being 4 octets wide for
multiple read request, new define is introduced and used instead of
type sizeof evaluation.
Change-Id: I8b0096497d456c0e6fa6b5b1eb88bb1b8079ae04
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
Enables directly add 16-bit value at the end of operational buffer.
Value is converted to little-endian format before is appended.
Position of buffer's tail is updated during addition.
Usage of bt_buf_add() call enables monitoring available limited room
in the buffer when CONFIG_BLUETOOTH_DEBUG is on.
Change-Id: Id7ac62cd3b11ef03302e94185a7faae747eccb20
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
Add support for 802.15.4 dummy radio driver to send frames
through qemu uart and and receive frames through uart. So
two qemus can send and receive 802.15.4 frames.
Change-Id: I325281d04234f7ec07c66bf31691c18a9d7c4d93
Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
This adds bt_gatt_discover_descriptors which can used to discover all
descriptors in the given range.
Change-Id: Idf93852ef9d8ba3bfce20dc0b95f4e11aa0dc73d
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
If the advertising event type is not connectable, we shouldn't
try to establish connection with this device.
Change-Id: I5be6427858856a6318553ddc0acf53aa2d991b7b
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
If we have IRK stored for device we try to connect to,
it means we should look up bt_conn based on identity address,
not the address from advertising or connection complete event.
Change-Id: Iccbd766acf9a62cfe5e967cf54597854881f37d5
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
check_pending_conn gives more information about what this function
is actually doing.
Change-Id: Id21580e03bb1c341c7cf3671a666e385738fb3d4
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
During allocation ATT pdu buffer there's possibility to precheck
whether length of such buffer doesn't exceeds ATT MTU.
Change-Id: I7f729e4d7f7474d7f33e417ea61a00ceeb7426c5
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
This adds above function to stop ongoing advertising.
Change-Id: I16b3913524a61e844a81cbe733f2b8e6072ab442
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
When we already have bt_keys object and want to ensure that it
contains a certain key type it's wasteful to have to go and call
bt_keys_get_type() (because of the extra lookup it'll do).
Change-Id: I97831e6817e734d7e8b6aa18c7917736577f3438
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This adds function handler for Find Info Response PDU which call the
request callback:
< ACL Data TX: Handle 3585 flags 0x00 dlen 9
ATT: Find Information Request (0x04) len 4
Handle range: 0x0010-0x0011
> ACL Data RX: Handle 3585 flags 0x02 dlen 14
ATT: Find Information Response (0x05) len 9
Format: UUID-16 (0x01)
Handle: 0x0010
UUID: Characteristic (0x2803)
Handle: 0x0011
UUID: Heart Rate Control Point (0x2a39)
Change-Id: I981e9efe75f6eb032d9468549272c82720cb133d
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
With this patch, Identity Information and Identity Address
Information are properly received. There was a bug when
returning too early from smp_pairing_master function
and not setting BT_SMP_CMD_IDENT_INFO bit in allowed_cmds.
bt: bt_smp_recv (0x0010f054): Received SMP code 0x06 len 17
bt: smp_pairing_encrypt (0x0010f054):
bt: bt_smp_recv (0x0010f054): Received SMP code 0x07 len 11
bt: smp_pairing_master (0x0010f054):
bt: bt_smp_recv (0x0010f054): Received SMP code 0x08 len 17
bt: bt_smp_recv: Unexpected SMP code 0x08
bt: bt_smp_recv (0x0010f054): Received SMP code 0x09 len 8
bt: bt_smp_recv: Unexpected SMP code 0x09
The return should be after distributing LTK, EDIV and Rand if
IdKey was not set.
bt: bt_smp_recv (0x0010effc): Received SMP code 0x06 len 17
bt: smp_pairing_encrypt (0x0010effc):
bt: bt_smp_recv (0x0010effc): Received SMP code 0x07 len 11
bt: smp_pairing_master (0x0010effc):
bt: bt_smp_recv (0x0010effc): Received SMP code 0x08 len 17
bt: smp_ident_info (0x0010effc):
bt: bt_smp_recv (0x0010effc): Received SMP code 0x09 len 8
bt: smp_ident_addr_info (0x0010effc):
bt: smp_ident_addr_info (0x0010effc): identity 88:63:DF:88:0E:83 (public)
bt: bt_smp_disconnected (0x0010effc): conn 0x0010badc handle 64
Change-Id: Ic98cf6fd6ad2f7e41c6cd506d39fc9a9571a491f
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
Instead of caring about stop_scanning() failure it's better to have
bt_connect_le() do "best effort" and simply try to continue in this
case.
Change-Id: I14896a4dfbe0bfd2564a190080743f0c9b05d174
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
There's no need to check for BT_CONN_CONNECTED for these HCI events or
ACL data. Even if the connection is being disconnected the stack will
do the right thing when the disconnect_complete event occurs.
Furthermore, these branches were actually leaking the bt_conn if the
state wasn't connected after being looked up.
Change-Id: I2e22d67cb43a86e742663a896e853de02fe9e325
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Make the reference counting of bt_conn clearer by having the reference
taken by the first state transition and released by the last state
transition handled in the bt_conn_set_state() function.
Change-Id: Iee04758fcc7f770e6ccfd351f33be60e7d646f19
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This process handle by handle instead of first parsing the full PDU
storing the result in another variable to only then process the handles.
Change-Id: I5b6d5d7db4a78a03b34bc1c7e5217bbcd7f4c96b
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Check conn->att context at bt_att_recv and log an error.
Change-Id: Id49e941bdf55529b517b6962fe0d401bd9295c38
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This adds bt_gatt_discover_characteristic which can used to discover all
characteristics in the given range.
Change-Id: Ia7ddb93dfdb0f979409e133c902a1cbd9ae9fe71
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This adds function handler for Read By Type Response PDU which call the
request callback:
> ACL Data TX: Handle 3585 flags 0x00 dlen 11
ATT: Read By Type Request (0x08) len 6
Handle range: 0x0010-0x0011
Attribute type: Characteristic (0x2803)
> ACL Data RX: Handle 3585 flags 0x02 dlen 13
ATT: Read By Type Response (0x09) len 8
Attribute data length: 7
Attribute data list: 1 entry
Handle: 0x0010
Value: 081100392a
< ACL Data TX: Handle 3585 flags 0x00 dlen 11
ATT: Read By Type Request (0x08) len 6
Handle range: 0x0011-0x0011
Attribute type: Characteristic (0x2803)
> ACL Data RX: Handle 3585 flags 0x02 dlen 9
ATT: Error Response (0x01) len 4
Read By Type Request (0x08)
Handle: 0x0011
Error: Attribute Not Found (0x0a)
Change-Id: Ieba837f603b7d76a4adf95cd637b8423061246f7
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
If the function callback returns BT_GATT_ITER_STOP it should cause
the destroy callback to be called to indicate the discover is no longer
active.
Change-Id: Ifc35c375633e38483b2b4bace2c26bab7f02dcb6
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Instead of aaaa::/64 address space which is part of global
IPv6 address space, use the 2001:db8::/32 which is meant
for documentation purposes and is not routable.
Change-Id: I56db34da852f8c313379c764bdf75a19151c45bd
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
To limit the device_found function calls, passive scanning can
take advantage of Filter_Duplicates feature. For now, the stack
will be informed only if some new device will be found.
This solution requires a check if scan filter is used while adding
new address to connect to (bt_connect_le). If filter duplicates
is used (by active scan or passive scan), the scan should be
restarted to refresh scan results.
Change-Id: Ibf539e648288fdcd7a8119ec364cff2c97e4aab8
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
The IPv4 support is activated automatically if the IP address
parameter is a real IPv4 address.
Change-Id: Ief7b2a216a143416b5eec095cd6f813729a40b92
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
The tunslip program will setup the tun device for IPv4 traffic.
Change-Id: I1192a704f691e17016e187167dfca09df00b974f
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
The uip.c:uip_process() was not checking the upper bound of
the UDP connection list when traversing the connection list.
Now the code checks the upper bound of the array (UIP_UDP_CONNS)
and will not go beyond the max number of items in the array.
This commit fixes the IPv4 branch, the IPv6 branch was already
fixed by commit 07a5959c2ae9ffce27092c2a0a6161111facdb6c
Change-Id: I5c31176190e0f063b72d6742c4a9c23b433026ad
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
Enabling IPv4 support and modifying code so that it compiles ok.
Change-Id: I605cd94adfda7675be2f2cf798588c69eb1f152e
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
The declarations in this header file are already provided by
other header files so this file can be removed.
Change-Id: I63cd99ed201af7bebb14943bf965dafd11be14fe
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
This fix prevents from sending dummy buffer to kill tx fiber
if this fiber didn't started.
Tx fiber is started during transition from BT_CONN_CONNECT state
(for outgoing connections) or BT_CONN_DISCONNECTED (incoming)
to BT_CONN_CONNECTED state.
So the only states that have tx fiber running are BT_CONN_CONNECTED
and BT_CONN_DISCONNECT and only transitions from these states
should be taken into account.
Change-Id: I558c937812368b0bd305f6c9935cced565c70606
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
bt_gatt_discover can be used to discover primary GATT service by UUID in
a selected handle range, after it attribute found the function callback
is called so the user can interact the attribute found and decide to
continue to the next or stop.
Change-Id: I37514f00c82ce5520d7a14757a6ff12ee34f0736
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This adds function handler for Find By Type Response PDU which call the
request callback:
< ACL Data TX: Handle 3585 flags 0x00 dlen 13
ATT: Find By Type Value Request (0x06) len 8
Handle range: 0x000a-0xffff
Attribute type: Primary Service (0x2800)
UUID: Heart Rate (0x180d)
> ACL Data RX: Handle 3585 flags 0x02 dlen 9
ATT: Find By Type Value Response (0x07) len 4
Handle range: 0x000a-0x0011
< ACL Data TX: Handle 3585 flags 0x00 dlen 13
ATT: Find By Type Value Request (0x06) len 8
Handle range: 0x0011-0xffff
Attribute type: Primary Service (0x2800)
UUID: Heart Rate (0x180d)
> ACL Data RX: Handle 3585 flags 0x02 dlen 9
ATT: Error Response (0x01) len 4
Find By Type Value Request (0x06)
Handle: 0x0011
Error: Attribute Not Found (0x0a)
Change-Id: Ib5799d0530c8de40b7c7170f1b32312a42456484
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This check is already made in bt_start_scanning and is valid only
when task wants to enable active scanning when it's already enabled.
Change-Id: Ic8843d51d4c91a533250d8ddb4139814015f7aa4
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
bt_hci_start_scanning is called from API's bt_start_scanning to enable
active scanning and from trigger_scan to enable passive/active scan.
bt_start_scanning have already this check, it stops passive scanning
if enabled and then starts active scan.
So "if (dev.scan_enable)" check can be moved to trigger_scan to avoid
unnecessary checks.
Change-Id: I5eaa4bb5c611418b8519b0dda680f59a3a9332fc
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
Part of General Connection Establishment Procedure.
Active scanning is enabled by task and has higher priority than
passive scan. If passive scan is running and task wants to enable
scan (active) scanning will be restarted in active mode. Passive
scan is enabled implitly while app calls bt_connect_le.
Instead of directly call hci_le_create_conn, it is called from
device_found if addr obtained from advertisement matches address
we want to connect. App calling bt_stop_scanning can only stop
active scan.
Change-Id: I01805c51f3d821bbd827af75e5d1d4350169241d
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
Move bt_hci_start_scanning, bt_hci_stop_scanning and hci_le_create_conn.
It's needed to avoid a forward declaration in a subsequent patch.
Change-Id: I0ee048ca6e8add6a481ac4fdc8a8e2cbdf4f007c
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
This state will be used for connection establishment during passive scan.
This additional state is necessary, because only one connection can be
in BT_CONN_CONNECT state (LE Create Connection has been sent).
It's because the LE Create Connection Cancel looks for connection in this
state (we cannot look by address, if some controllers respond with
LE Create Connection with address set to 00:00:00:00:00:00).
If connection is BT_CONN_CONNECT_SCAN state it means that we wait for
an advertisement from remote to send LE Create Connection and then we
can change the bt_conn state to BT_CONN_CONNECT.
Change-Id: I48b0352fe08e438f7bfbb1dd12de3d1719f994d8
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
uip_lladdr is global variable which is used to generate link
local address based on mac address. Right now it is empty.
Change-Id: I89bf7ac4c7770858044ef0c4f3d667e9316c4269
Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
If HC1 or HC06 compression fails then send uncompressed ipv6 packet
by adding IPv6 dispatch header infront of the header.
Change-Id: Ie15fb9d61def45066fb606417ba4f46ae6c628b1
Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
Fix IPv6 packet lenght in header. packetbuf_copyfom clears all
pointers which is causing an issue, so assign uip_packetbuf_ptr
after packetbuf_copyfom.
Change-Id: I943273bb0a079d3ac86da0761c3f32043a280a87
Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
UIP_CONF_LL_802154: 802.15.4 support in uIP, default compression
is none(SICSLOWPAN_COMPRESSION_IPV6: just add IPV6 dispatch infront
of header, enable HC06 or HC1 depends upon requirement).
Change-Id: I5c298652783a560d227b77c293c3d13844647f56
Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
Add infrastructure and checks to validate the net_mbuf during
its lifecycle.
Change-Id: Id4b638fff991325d2247b1f24152552038888915
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
The code used wrong IPv6 address pointer for UDP registration.
This caused the packet sending to fail because the generated
IPv6 address was bogus and not routable.
Change-Id: I933d6920c6455b271e775f5cbe15afdaa948abae
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
We cannot use stack variable for local address as the address
needs to point to static memory. So change the type of the laddr
to be static. This is not a problem here as there is only one
local address defined anyway in the system.
Change-Id: Ie8763f761eea08997f0984394984050be946ae18
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
We need to reset the slip receive buffer pointers if we cannot
process the incoming message. If this is not done the rxbuf
will overflow and overwrite core kernel data.
Change-Id: If6a96177a3de57148268e48940fbc33d2e08b36a
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
Add macros that check that we are not trying to use already
freed net_buf and vice versa.
Change-Id: Ifdb6a7e24cd6d7a0de46fa7b991c358ea8828d6f
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
This client sends pre-defined UDP data to server, reads back
the reply and verifies that the data is the same.
This test application is only usable when running in Linux
host and it is not meant to be run inside Zephyr.
Change-Id: I6df83f3a5b1ab92c724b4d3c245738eb5c56a91f
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
This slip driver is needed for sending packets outside of qemu.
Change-Id: Ifc37181094ddebce08d97ae889f3a58c03d01ae1
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
We need to use correct IPv6 address when registering UDP
socket.
Change-Id: I38f55bc16f72a71cb8cd58d20b3288be2f4cd475
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
The net_reply() can be used if the application wants to reply
something to peer right after receiving the data. The function
will reverse the source and destination addresses and ports,
and set the uIP internal structures in such a way that the
reply is possible. Using this function saves the application
from allocating a separate net_buf for just sending simple
message back.
Change-Id: Ia960c83b77a8f300222159ee085fed99e2b007c2
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
If the Command Complete status is read, this status shall be returned.
Change-Id: Ic3fe102c16da4b01d002a2d39952fd401e9f832d
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
bt_gatt_exchange_mtu can be used to exchange MTU used by GATT, the MTU
is selected automatically based on the amount of data bt_buf can hold.
Change-Id: Id49a506663d922132e81c0a753a983b93579ffd0
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This adds function handler for Exchange MTU PDU which parses MTU received
and call the request callback:
< ACL Data TX: Handle 3585 flags 0x00 dlen 7
ATT: Exchange MTU Request (0x02) len 2
Client RX MTU: 65
> ACL Data RX: Handle 3585 flags 0x02 dlen 7
ATT: Exchange MTU Response (0x03) len 2
Server RX MTU: 517
Change-Id: I8daf0e32c1e1b838c45dc488fdef68a01451d55d
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
API remains the same, only adds helpers for common code which will be
used by active and passive scanning.
Change-Id: I3ef7845af766ba1634fe959f0a93d74601c6711c
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
This adds function handler for Error Response PDU which parses the
error code and call the request callback:
< ACL Data TX: Handle 3585 flags 0x00 dlen 5
ATT: Exchange MTU Request (0x02) len 0
invalid size
> ACL Data RX: Handle 3585 flags 0x02 dlen 9
ATT: Error Response (0x01) len 4
Exchange MTU Request (0x02)
Handle: 0x0000
Error: Invalid PDU (0x04)
Change-Id: I149dc20421690e63250d3e2ec388407a5600e089
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
If remote sends Pairing Failed any subsequent pairing procedure should
be restarted from Feature Exchange phase.
Change-Id: Ieccb4e64525e82092b8b0928bd3715f46eded9a2
Signed-off-by: Szymon Janc <szymon.janc@tieto.com>
This binary file should not be here so removing it.
Change-Id: I00d4b2de353f1b7ed75e9480252ea5f3f4b0c3a4
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
Specification clearly defines when each PDU is allowed to be send.
With this patch unexpected PDUs are rejected. This allows for better
resilience when remote device misbehaves. Another benefit is that
PDUs handlers doesn't have to do additional checks for unexpected
sequence or missing PDUs.
Specification is not clear on reject policy though. It could be
responding with Pairing Failed, disconnect link or just drop unexpected
data. This patch implements last option. Dropping unexpected data is
also present in other widely used implementations and proved to be
sufficient.
Change-Id: I9a28a0b7bea71775e656300f71172e60b2df3d9c
Signed-off-by: Szymon Janc <szymon.janc@tieto.com>
Master should distribute keys only after slave distributed own keys.
Change-Id: Ibd339bd18699fe054bf2443103a4dc5785f494ab
Signed-off-by: Szymon Janc <szymon.janc@tieto.com>
This is in preparation for distributing keys in correct order when
acting as a master.
Change-Id: I3054f167dfd5c7514ab1efaecab7854a24d8f11a
Signed-off-by: Szymon Janc <szymon.janc@tieto.com>
If address stored in conn structure is BT_ADDR_LE_ANY, it means
that this slot has been already freed up, and the data is invalid.
bt_addr_le_cmp(peer, &conns[i].dst) returns True if both arguments
are BT_ADDR_LE_ANY, so invalid conn with address BT_ADDR_LE_ANY
can be returned.
Change-Id: I78ecafe0f9d6e1bbca4c7bf2c44eaec858787247
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>