Commit Graph

617 Commits

Author SHA1 Message Date
Jukka Rissanen
e1359ab16b net: Add timeout to net_receive function
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>
2016-02-05 20:15:22 -05:00
Jukka Rissanen
0dc19ba88a net: Allow network buffer tweaking from Kconfig
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>
2016-02-05 20:15:22 -05:00
Jukka Rissanen
1d7caf6b52 net: Add debug print when receiving a buffer in rx queue
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>
2016-02-05 20:15:22 -05:00
Jukka Rissanen
d9e2a98a9b net: UDP packet reply callback was losing net_buf
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>
2016-02-05 20:15:22 -05:00
Jukka Rissanen
20aa77ce6f net: Network buffers could be lost when sending packets
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>
2016-02-05 20:15:22 -05:00
Jukka Rissanen
65ce2d8be1 net: contiki: Improve UDP connection matching debug prints
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>
2016-02-05 20:15:22 -05:00
Luiz Augusto von Dentz
0636edfdd7 Bluetooth: GATT: Add offset to bt_gatt_write
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>
2016-02-05 20:15:22 -05:00
Luiz Augusto von Dentz
752315a082 Bluetooth: ATT: Add bt_att_get_mtu
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>
2016-02-05 20:15:22 -05:00
Luiz Augusto von Dentz
2ee7df52f4 Bluetooth: ATT: Handle Execute Write response
This adds the callback necessary to parse Execute Write response PDU:

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

Change-Id: Ida1f73021097628bd5e60faa007441db9b92a38d
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:15:22 -05:00
Luiz Augusto von Dentz
fb0f86fd2b Bluetooth: ATT: Handle Prepare Write response
This adds the callback necessary to parse Prepare Write response PDU:

< ACL Data TX: Handle 3585 flags 0x00 dlen 10
      ATT: Prepare Write Request (0x16) len 5
        Handle: 0x0011
        Offset: 0x0001
          Data: 01
> ACL Data RX: Handle 3585 flags 0x02 dlen 10
      ATT: Prepare Write Response (0x17) len 5
        Handle: 0x0011
        Offset: 0x0001
          Data: 01

Change-Id: Iaa16ec1477f25a2ebdfbefa5c0056aa3177c930c
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:15:22 -05:00
Andrei Emeltchenko
ae3c6c00c2 Bluetooth: Fix alignment
Change-Id: If6b3b426bbcb763e4e089d330930bf68d4843282
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:14:44 -05:00
Andrei Emeltchenko
98e3e44655 Bluetooth: Allow Signing Info command after Address Info
Follow Key Distribution order: CSRK shall be sent after BDADDR Info.

Change-Id: I08a784ebc56d5f891e81bb9f2c7d215d47f1f6a5
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:14:44 -05:00
Luiz Augusto von Dentz
9c17e83d68 Bluetooth: ATT: Fix using uninitialized conn at find_info_cb
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>
2016-02-05 20:14:44 -05:00
Andrei Emeltchenko
2baab11485 Bluetooth: Implement processing signing info request
Store remote CSRK key upon receiving SMP Signing Info command.

Change-Id: I62e8fafc9bef5fd765edc5455b7eb17ea0961605
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:14:44 -05:00
Andrei Emeltchenko
ecc1a274a5 Bluetooth: Allow CSRK key generation and distribution
Include CSRK to Key Distribution fields in Pairing Request and
Response.

Change-Id: I0a564bd2675760b6b30f0288b6f26e24a161811f
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:14:44 -05:00
Andrei Emeltchenko
37bff2b3be Bluetooth: Generate and distribute local CSRK key
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>
2016-02-05 20:14:44 -05:00
Luiz Augusto von Dentz
0a918ae444 Bluetooth: GATT: Remove subscriptions on disconnect
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>
2016-02-05 20:14:44 -05:00
Luiz Augusto von Dentz
fb5c1bd381 Bluetooth: GATT: Fix bt_gatt_attr_write_ccc
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>
2016-02-05 20:14:44 -05:00
Luiz Augusto von Dentz
69130ed2c0 Bluetooth: keys: Add bt_keys_find_addr
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>
2016-02-05 20:14:44 -05:00
Johan Hedberg
d31003765c Bluetooth: Remove unnecessary init helper functions
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>
2016-02-05 20:14:44 -05:00
Johan Hedberg
79696d3b34 Bluetooth: Redesign Bluetooth init API
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>
2016-02-05 20:14:44 -05:00
Johan Hedberg
3ab32aa5f1 Bluetooth: Move hci_rx_fiber further down in hci_core.c
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>
2016-02-05 20:14:44 -05:00
Arkadiusz Lichwa
55607e5e9a Bluetooth: Allocate room for LE read remote features
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>
2016-02-05 20:14:44 -05:00
Arkadiusz Lichwa
d63811079f Bluetooth: Adjust update connection params over L2CAP
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>
2016-02-05 20:14:44 -05:00
Luiz Augusto von Dentz
7540844891 Bluetooth: GATT: Make bt_gatt_notify length parameter uint16_t
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>
2016-02-05 20:14:44 -05:00
Luiz Augusto von Dentz
870e466338 Bluetooth: GATT: Fix representing handle with uint8_t
GATT Handles are always 16 bits long.

Change-Id: I745197f7d7d3af52cb44e5be87b02471a23e9d73
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:44 -05:00
Luiz Augusto von Dentz
8697d207a0 Bluetooth: GATT: Fix using uint8_t for attribute length
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>
2016-02-05 20:14:44 -05:00
Szymon Janc
e98b08b377 Bluetooth: SMP: Remove not needed smp->tk initialization
Whole smp context is already cleared up in smp_init().

Change-Id: Ided5d61dc6e859bd1a17b8b8d410f1ef8b2bebb0
Signed-off-by: Szymon Janc <szymon.janc@tieto.com>
2016-02-05 20:14:44 -05:00
Jukka Rissanen
7918507b15 net: contiki: Increase number of configurable IPv6 addresses
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>
2016-02-05 20:14:44 -05:00
Jukka Rissanen
c94b69c542 net: tools: Add multicast support to echo-client
Now the echo-client can send multicast packets to server.

Change-Id: I9bb5ba2726a116a010c2e35981cde62f6af7e3e6
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-02-05 20:14:44 -05:00
Jukka Rissanen
2be43b3c47 net: context: Allow multicast address to be created
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>
2016-02-05 20:14:44 -05:00
Jukka Rissanen
f4a2245d8b net: contiki: Add debug printing when traversing UDP connections
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>
2016-02-05 20:14:44 -05:00
Jukka Rissanen
857017a9e3 net: contiki: Traverse UDP connection list properly
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>
2016-02-05 20:14:44 -05:00
Jukka Rissanen
6f059122f7 net: contiki: Init UDP connection list properly
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>
2016-02-05 20:14:44 -05:00
Jukka Rissanen
6a2e400076 net: contiki: Print info about added multicast addresses
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>
2016-02-05 20:14:43 -05:00
Mariusz Skamra
b79ea66038 Bluetooth: L2CAP: Reject a request for conn parameters update as slave
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>
2016-02-05 20:14:43 -05:00
Mariusz Skamra
6b4f7025f2 Bluetooth: Start using atomic flags to indicate bt_dev state
With this patch advertising state and scanning state are stored as flags.

Change-Id: I5d2dc37972620ee89aaf55d45e294e8be82863d3
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
2016-02-05 20:14:43 -05:00
Mariusz Skamra
4dd751cf99 Bluetooth: SMP: Factor out duplicated code
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>
2016-02-05 20:14:43 -05:00
Mariusz Skamra
c9287c2bc2 Bluetooth: SMP: Fix zeroing smp
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>
2016-02-05 20:14:43 -05:00
Luiz Augusto von Dentz
7006b5ae92 Bluetooth: GATT: Add bt_gatt_unsubscribe
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>
2016-02-05 20:14:43 -05:00
Luiz Augusto von Dentz
fac5df2bae Bluetooth: GATT: Add bt_gatt_subscribe
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>
2016-02-05 20:14:43 -05:00
Luiz Augusto von Dentz
d354059ad4 Bluetooth: ATT: Handle Value Notification
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>
2016-02-05 20:14:43 -05:00
Luiz Augusto von Dentz
8ffb486829 Bluetooth: GATT: Fix bt_gatt_discover_characteristic
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>
2016-02-05 20:14:43 -05:00
Johan Hedberg
9e1c434ad9 Bluetooth: Move bt_conn timeout handling into conn.c
Change-Id: I865e86d41e2744a41653195f2b99d365426aee7d
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:43 -05:00
Mariusz Skamra
f3232cb999 Bluetooth: Add simple timeout for connection establishment
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>
2016-02-05 20:14:43 -05:00
Peter Mitsis
c41824b097 Update README file to reference platforms
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>
2016-02-05 20:14:43 -05:00
Peter Mitsis
83b83b5317 Fix typo: accomodate -> accommodate
Change-Id: I64d45055baf3f2b742585984f05f94f1af0ed9c9
Signed-off-by: Peter Mitsis <peter.mitsis@windriver.com>
2016-02-05 20:14:41 -05:00
Ravi kumar Veeramally
b5f988ea37 net: Fix packetbuf related calls
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>
2016-02-05 20:14:41 -05:00
Johan Hedberg
097046e85b Bluetooth: SMP: Minor coding style fix
Change-Id: Iaef6feb60a84dbbb636366f01d03de61a3542739
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:41 -05:00
Andrei Emeltchenko
13ef99257f Bluetooth: Eliminate tmp buffer using swap_in_place
Using swap_in_place algorithm allows to eliminate more buffers.

Change-Id: Ifefd291e45b84213114d665adff9839fb131a185
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:14:41 -05:00
Andrei Emeltchenko
ef703e1317 Bluetooth: Add local and remote CSRK keys
Add local and remote Connection Signature Resolving Keys and helper
functions.

Change-Id: I63af2e566dccc6ffb5397d28bde6f04bc78b93b1
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:14:41 -05:00
Andrei Emeltchenko
a7de88f972 Bluetooth: Propagate SMP & L2CAP init failures
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>
2016-02-05 20:14:41 -05:00
Andrei Emeltchenko
82fddc9cbc Bluetooth: Add AES-CMAC calculation based on AES 128 bit cipher
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>
2016-02-05 20:14:41 -05:00
Luiz Augusto von Dentz
dc55a3741e Bluetooth: GATT: Add bt_gatt_write
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>
2016-02-05 20:14:41 -05:00
Luiz Augusto von Dentz
0b28dbfc19 Bluetooth: ATT: Handle Write response
This adds function handler for Write Response PDU which call the request
callback:

< ACL Data TX: Handle 3585 flags 0x00 dlen 8
      ATT: Write Request (0x12) len 3
        Handle: 0x0011
          Data: 01
> ACL Data RX: Handle 3585 flags 0x02 dlen 5
      ATT: Write Response (0x13) len 0

Change-Id: Iea323bc37044822de034f92c8f9ef1d43276ec86
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:41 -05:00
Arkadiusz Lichwa
70c7e8825c Bluetooth: GATT: Add bt_gatt_read_multiple
Introduction of GATT client API to enable read attributes
determined by set of handles.

< ACL Data TX: Handle 64 flags 0x00 dlen 21
      ATT: Read Multiple Request (0x0e) len 16
        Handle: 0x0001
        Handle: 0x0002
        Handle: 0x0003
        Handle: 0x0004
        Handle: 0x0005
        Handle: 0x0006
        Handle: 0x000a
        Handle: 0x000b
> ACL Data RX: Handle 64 flags 0x02 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  ......
        70 68 65 72 61 6c

Change-Id: Ic8e6edcf79a63bc52cb4c657e5b09529fa87879e
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
2016-02-05 20:14:40 -05:00
Johan Hedberg
fe41cec885 Bluetooth: Move bt_security to conn.h and rename it appropriately
Change-Id: Ibea6e4ef08c68e9debf0c53036dd2e4f75ea9a72
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:40 -05:00
Johan Hedberg
e060c621d1 Bluetooth: Move le_conn_update() to conn.c
Change-Id: Iaaf1cce09aef2e09c0cb2cca3500368a5faec2ae
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:40 -05:00
Johan Hedberg
5f33744a4c Bluetooth: Move le_start_encryption to conn.c
Change-Id: Id9c042663e6f58aba6ec34165b7b244650317969
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:40 -05:00
Johan Hedberg
a33047f7a5 Bluetooth: Move bt_connect_le to conn.c and rename it appropriately
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>
2016-02-05 20:14:40 -05:00
Johan Hedberg
e0e6416065 Bluetooth: Export bt_dev through hci_core.h
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>
2016-02-05 20:14:40 -05:00
Johan Hedberg
7ed81c7a22 Bluetooth: Enhance bt_le_scan_update() for active scanning
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>
2016-02-05 20:14:40 -05:00
Johan Hedberg
824135122f Bluetooth: Move bt_disconnect to conn.[ch] and rename it appropriately
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>
2016-02-05 20:14:40 -05:00
Luiz Augusto von Dentz
79eb002a06 Bluetooth: GATT: Fix not dropping buffer reference
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>
2016-02-05 20:14:40 -05:00
Luiz Augusto von Dentz
d982120a7e Bluetooth: GATT: Add bt_gatt_read
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>
2016-02-05 20:14:40 -05:00
Luiz Augusto von Dentz
569d5e6fe3 Bluetooth: ATT: Handle Read Blob response
This adds function handler for Read Blob Response PDU which call the
request callback:

< ACL Data TX: Handle 3585 flags 0x00 dlen 9
      ATT: Read Blob Request (0x0c) len 4
        Handle: 0x0010
        Offset: 0x0001
> ACL Data RX: Handle 3585 flags 0x02 dlen 9
      ATT: Read Blob Response (0x0d) len 4
        11 00 39 2a

Change-Id: I7e098649d35e46bfe24259bf6a2a3d5b35873977
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:40 -05:00
Luiz Augusto von Dentz
a02df0f64a Bluetooth: ATT: Handle Read response
This adds function handler for Read Response PDU which call the request
callback:

< ACL Data TX: Handle 3585 flags 0x00 dlen 7
      ATT: Read Request (0x0a) len 2
        Handle: 0x0010
> ACL Data RX: Handle 3585 flags 0x02 dlen 10
      ATT: Read Response (0x0b) len 5
        Value: 081100392a

Change-Id: I68de7c7bcd62e5697669b9ddb9403e8ccd1b470c
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:40 -05:00
Johan Hedberg
776196d879 Bluetooth: Add "stop scan" functionality to bt_le_scan_update()
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>
2016-02-05 20:14:40 -05:00
Johan Hedberg
b8d8673dd2 Bluetooth: Rename trigger_scan() to bt_le_scan_update()
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>
2016-02-05 20:14:40 -05:00
Johan Hedberg
d0c31141cd Bluetooth: Clear AUTO_CONNECT for any state in bt_disconnect()
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>
2016-02-05 20:14:40 -05:00
Mariusz Skamra
b210d53172 Bluetooth: Add initial auto connect support
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>
2016-02-05 20:14:40 -05:00
Mariusz Skamra
eb67b0f110 Bluetooth: Move hci_disconn_complete function
To avoid a forward declaration in a subsequent patch.

Change-Id: Ib3fc482af8f1fadda8e27af99811f73e64cd175a
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
2016-02-05 20:14:40 -05:00
Arkadiusz Lichwa
c8b27ab8a5 Bluetooth: ATT: Update multiple read req object
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>
2016-02-05 20:14:40 -05:00
Arkadiusz Lichwa
8f7c8a3969 Bluetooth: buf: Add bt_buf_add_le16() API
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>
2016-02-05 20:14:40 -05:00
Johan Hedberg
5bb6b7b238 Bluetooth: buf: Take advantage of bt_buf_tail() helper macro
Change-Id: Ibd9d28e223be2e5299c8ae7e444cb19642bf8bc8
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:40 -05:00
Johan Hedberg
2cc87e319e Bluetooth: buf: Use appropriate macro for converting LE to CPU
Change-Id: I0f35c875bd2471d2e2279ae7c0a73a62c08cf080
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:40 -05:00
Ravi kumar Veeramally
de67ecb58b net: 15.4: Add support for data Tx/Rx between two qemus
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>
2016-02-05 20:14:40 -05:00
Luiz Augusto von Dentz
e0792a1ba2 Bluetooth: GATT: Add bt_gatt_discover_descriptor
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>
2016-02-05 20:14:40 -05:00
Mariusz Skamra
b672324c16 Bluetooth: Look up connections only for connectable adv events
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>
2016-02-05 20:14:40 -05:00
Mariusz Skamra
eda6b7c0e4 Bluetooth: Use identity address to look up for connections
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>
2016-02-05 20:14:40 -05:00
Mariusz Skamra
51e4fd4b8d Bluetooth: Rename device_found function
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>
2016-02-05 20:14:39 -05:00
Arkadiusz Lichwa
9bf8ad20df Bluetooth: ATT: Check ATT payload len against MTU
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>
2016-02-05 20:14:39 -05:00
Mariusz Skamra
66cf2511f1 Bluetooth: SMP: Add BT_KEYS_SLAVE_LTK key in bt_smp_distribute_keys
Without this patch, we send LTK Request Negative Reply after reconnection.
It fails in le_ltk_request:

	if (conn->keys && (conn->keys->keys & BT_KEYS_SLAVE_LTK) &&
	    conn->keys->slave_ltk.rand == evt->rand &&
	    conn->keys->slave_ltk.ediv == evt->ediv) {
		bt_hci_cmd_send(BT_HCI_OP_LE_LTK_REQ_REPLY, buf);
	} else {
		bt_hci_cmd_send(BT_HCI_OP_LE_LTK_REQ_NEG_REPLY, buf);
	}

Change-Id: I9b926b7ba01743dcfa79f51650271f6e12cc2ff8
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
2016-02-05 20:14:39 -05:00
Mariusz Skamra
f45bbec4a1 Bluetooth: hci: Add bt_stop_advertising
This adds above function to stop ongoing advertising.

Change-Id: I16b3913524a61e844a81cbe733f2b8e6072ab442
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
2016-02-05 20:14:39 -05:00
Johan Hedberg
d0950676e8 Bluetooth: Add bt_keys_add_type() convenience API
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>
2016-02-05 20:14:39 -05:00
Luiz Augusto von Dentz
001d29218a Bluetooth: ATT: Handle Find Info response
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>
2016-02-05 20:14:39 -05:00
Mariusz Skamra
fcda155262 Bluetooth: SMP: Fix invalid return from smp_pairing_master
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>
2016-02-05 20:14:39 -05:00
Johan Hedberg
47cb69458a Bluetooth: Remove unnecessary 'err' variable from bt_connect_le()
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>
2016-02-05 20:14:39 -05:00
Johan Hedberg
7d8e97c9a1 Bluetooth: Fix potential bt_conn leaks
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>
2016-02-05 20:14:39 -05:00
Johan Hedberg
636415212a Bluetooth: Fix various coding style issues
Change-Id: Iffcc0db1dca5eba16ce10039d918175e72ac8f2f
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:39 -05:00
Johan Hedberg
5ed9cb7b5b Bluetooth: Clean up bt_conn reference counting
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>
2016-02-05 20:14:39 -05:00
Johan Hedberg
1732e81c58 Bluetooth: SMP: Rename PDU handlers for consistency
Change-Id: Ifb7489b0c0631c0ce4285da97ef09bc2db3200f9
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:39 -05:00
Luiz Augusto von Dentz
8ee4a9e93d Bluetooth: GATT: Simplify handling of Read Multiple Request
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>
2016-02-05 20:14:36 -05:00
Luiz Augusto von Dentz
e24f6684cb Bluetooth: ATT: Use BT_ASSERT to check context
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>
2016-02-05 20:14:36 -05:00
Johan Hedberg
3303864d3b Bluetooth: Fix inverted assert conditions in buf.c
Change-Id: Idd858ba3a3bf779e6b8084b61459ee5c9347094b
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:36 -05:00
Johan Hedberg
d87232b2a1 Bluetooth: att: Fix minor coding style issues
Change-Id: I36019a726187363e41ab72d9a26b2b8ae5c7f4bb
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:36 -05:00
Johan Hedberg
9a52d396da Bluetooth: Take advantage of BT_ASSERT() macro
Change-Id: I0795820169c437e4348a9ab54c1184233067d5e9
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:36 -05:00
Luiz Augusto von Dentz
df92f7c4c6 Bluetooth: GATT: Add bt_gatt_discover_characteritic
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>
2016-02-05 20:14:36 -05:00
Luiz Augusto von Dentz
330846b39a Bluetooth: ATT: Handle Read By Type response
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>
2016-02-05 20:14:36 -05:00
Luiz Augusto von Dentz
cfb12dbb61 Bluetooth: GATT: Fix not always calling discover destroy callback
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>
2016-02-05 20:14:36 -05:00
Jukka Rissanen
bbe73173bb net: Use 2001:db8::/32 address space for sample apps
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>
2016-02-05 20:14:36 -05:00
Mariusz Skamra
105624a4a0 Bluetooth: Remove empty line
Change-Id: If17c18e8b970c568b0a46405c1f6b36073d5e565
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
2016-02-05 20:14:36 -05:00
Mariusz Skamra
e6d8bc3a59 Bluetooth: Use duplicate filtering policy in passive scanning
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>
2016-02-05 20:14:36 -05:00
Szymon Janc
0d7739f389 Bluetooth: Add support for enabling security as slave
As slave send Security Request for master to initiate security.

> HCI Event: LE Meta Event (0x3e) plen 19             [hci0] 569.228544
      LE Connection Complete (0x01)
        Status: Success (0x00)
        Handle: 64
        Role: Slave (0x01)
        Peer address type: Public (0x00)
        Peer address: 00:1B:DC:07:32:7E (Vencer Co., Ltd.)
        Connection interval: 70.00 msec (0x0038)
        Connection latency: 0.00 msec (0x0000)
        Supervision timeout: 420 msec (0x002a)
        Master clock accuracy: 0x01
.....

< ACL Data TX: Handle 64 flags 0x00 dlen 6            [hci0] 600.801709
      SMP: Security Request (0x0b) len 1
        Authentication requirement: Bonding, No MITM, Legacy,
          No Keypresses (0x01)
> ACL Data RX: Handle 64 flags 0x02 dlen 11           [hci0] 600.930641
      SMP: Pairing Request (0x01) len 6
        IO capability: DisplayYesNo (0x01)
        OOB data: Authentication data not present (0x00)
        Authentication requirement: Bonding, No MITM, Legacy,
          No Keypresses (0x01)
        Max encryption key size: 16
        Initiator key distribution: EncKey Sign (0x05)
        Responder key distribution: EncKey IdKey Sign (0x07)

Change-Id: I201cb99d7cbcf3115bc8a5e2968108034ab9189c
Signed-off-by: Szymon Janc <szymon.janc@tieto.com>
2016-02-05 20:14:35 -05:00
Szymon Janc
59e78e4d41 Bluetooth: SMP: Add support for sending security request
This allows to request sequrity as a slave.

Change-Id: Ieab15c2ab20403a5a22b13a331405276a7d4074f
Signed-off-by: Szymon Janc <szymon.janc@tieto.com>
2016-02-05 20:14:35 -05:00
Mariusz Skamra
8beeb0f3d3 Bluetooth: SMP: Fix smp_send_pairing_req function name
Prefix smp_send_pairing_req with bt_* to maintain proper
namespace in API.

Change-Id: Ia1f0d1291c5298034b9f1312b0d5a94aaa099cd0
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
2016-02-05 20:14:35 -05:00
Jukka Rissanen
ea970e2ce1 net: Change the remaining doxygen comments to javadoc style
Change-Id: I942558ca9e4c140145de6e4a1bcebf8d9d16f3d2
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-02-05 20:14:35 -05:00
Jukka Rissanen
f48fb5f3ec net: tools: Add IPv4 support for echo-client tool
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>
2016-02-05 20:14:35 -05:00
Jukka Rissanen
9a59d70cf5 net: tools: Add tunslip application for IPv4
The tunslip program will setup the tun device for IPv4 traffic.

Change-Id: I1192a704f691e17016e187167dfca09df00b974f
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-02-05 20:14:35 -05:00
Jukka Rissanen
f2886e2af3 net: uip: Traverse only through valid UDP connections
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>
2016-02-05 20:14:35 -05:00
Jukka Rissanen
e6020d1701 net: uip: Initial IPv4 support
Enabling IPv4 support and modifying code so that it compiles ok.

Change-Id: I605cd94adfda7675be2f2cf798588c69eb1f152e
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-02-05 20:14:35 -05:00
Jukka Rissanen
7d743ce57b net: uip: Remove obsolete file
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>
2016-02-05 20:14:35 -05:00
Johan Hedberg
d7ccefd0bd Bluetooth: Fix doxygen comment style
Change-Id: I37b85e83b54f7efb8aded70ec95fd87cafaf7e2b
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:35 -05:00
Mariusz Skamra
3fcf60a6e6 Bluetooth: Fix sending dummy buffer to kill invalid tx fiber
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>
2016-02-05 20:14:35 -05:00
Luiz Augusto von Dentz
4c640515c7 Bluetooth: GATT: Add bt_gatt_discover
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>
2016-02-05 20:14:35 -05:00
Luiz Augusto von Dentz
df0cc2697d Bluetooth: ATT: Handle Find By Type response
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>
2016-02-05 20:14:35 -05:00
Luiz Augusto von Dentz
f6f64c2cda Bluetooth: ATT: Fix missing new line in BT_DBG
Change-Id: I1a9643e3d5d22cfc23baa0ebf2e5722777eaf213
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:35 -05:00
Mariusz Skamra
f4d142e861 Bluetooth: Remove not needed code
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>
2016-02-05 20:14:35 -05:00
Mariusz Skamra
8ce5eda9bd Bluetooth: Move scan_enable check to trigger_scan()
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>
2016-02-05 20:14:35 -05:00
Mariusz Skamra
d699296a45 Bluetooth: Add passive scanning support
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>
2016-02-05 20:14:35 -05:00
Mariusz Skamra
911b91d82e Bluetooth: Move start_scanning stop_scanning and le_create_conn
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>
2016-02-05 20:14:35 -05:00
Mariusz Skamra
7ec1617b9f Bluetooth: Introduce BT_CONN_CONNECT_SCAN state
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>
2016-02-05 20:14:35 -05:00
Ravi kumar Veeramally
5d2e81c8ab net: Copy mac address to uip_lladdr
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>
2016-02-05 20:14:35 -05:00
Ravi kumar Veeramally
5d2e9db894 net: sicslowpan: if compression fails then send uncompressed packet
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>
2016-02-05 20:14:35 -05:00
Ravi kumar Veeramally
1f8cb9b4dc net: sicslowpan: Fix length and packetbuf issues
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>
2016-02-05 20:14:35 -05:00
Ravi kumar Veeramally
944b580266 net: Remove net_buf forward declaration in sisclowmac
Change-Id: I5f202c7241b885e85a428b625a7170a5300b7237
Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
2016-02-05 20:14:35 -05:00
Ravi kumar Veeramally
fda66bfa34 net: Enable 802.15.4 related macros
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>
2016-02-05 20:14:34 -05:00
Jukka Rissanen
cc3afa6346 net: Add net_mbuf validation
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>
2016-02-05 20:14:34 -05:00
Jukka Rissanen
4f4700e32c net: Use correct IPv6 address when registering UDP socket
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>
2016-02-05 20:14:34 -05:00
Jukka Rissanen
17b269682e net: The local address was allocated from stack
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>
2016-02-05 20:14:34 -05:00
Jukka Rissanen
d644eb8175 net: Add missing curly braces
Follow the style guide here.

Change-Id: Icd4053434f509aee4787bf2d5aae42cefb830a36
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-02-05 20:14:34 -05:00
Jukka Rissanen
fdadfc95a7 net: uip: Reset the rxbuf if we run out of buffers
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>
2016-02-05 20:14:34 -05:00
Jukka Rissanen
5ac5211093 net: uip: Free net_buf if it cannot be pushed to slip rx queue
This is a sanity check.

Change-Id: I1e747887b3f77203c6a2945810c8203243c41fe3
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-02-05 20:14:34 -05:00
Jukka Rissanen
90ca5ff779 net: Validate that net_buf allocation is correct
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>
2016-02-05 20:14:34 -05:00
Jukka Rissanen
a64f6995bb net: tools: Simple echo client that sends data to echo server
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>
2016-02-05 20:14:34 -05:00
Jukka Rissanen
3e4d890d72 net: slip: Add slip driver for testing purposes
This slip driver is needed for sending packets outside of qemu.

Change-Id: Ifc37181094ddebce08d97ae889f3a58c03d01ae1
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-02-05 20:14:34 -05:00
Jukka Rissanen
6421d6eba8 net: The UDP remote address was incorrectly set
We need to use correct IPv6 address when registering UDP
socket.

Change-Id: I38f55bc16f72a71cb8cd58d20b3288be2f4cd475
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-02-05 20:14:34 -05:00
Jukka Rissanen
54ab6fad20 net: Add net_reply() function
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>
2016-02-05 20:14:34 -05:00
Szymon Janc
bdb7044f09 Bluetooth: SMP: Make bt_smp_init parameters explicit void
Change-Id: I307ebd13cf031af3359176a19d6a9d4c067cf0ec
Signed-off-by: Szymon Janc <szymon.janc@tieto.com>
2016-02-05 20:14:34 -05:00
Mariusz Skamra
296c76c7a8 Bluetooth: Fix status returned by bt_stop_scanning and bt_start_scanning
If the Command Complete status is read, this status shall be returned.

Change-Id: Ic3fe102c16da4b01d002a2d39952fd401e9f832d
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
2016-02-05 20:14:34 -05:00
Luiz Augusto von Dentz
96fbd6636c Bluetooth: Add bt_gatt_exchange_mtu
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>
2016-02-05 20:14:34 -05:00
Luiz Augusto von Dentz
92477f7f65 Bluetooth: Handle ATT Exchange MTU Respose PDU
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>
2016-02-05 20:14:34 -05:00
Mariusz Skamra
a663540af6 Bluetooth: Factor out active scanning dependent code
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>
2016-02-05 20:14:34 -05:00
Luiz Augusto von Dentz
18f2299f24 Bluetooth: Handle ATT Error Response PDU
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>
2016-02-05 20:14:34 -05:00
Szymon Janc
668e161e4a Bluetooth: SMP: Add support for Pairing Failed PDU
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>
2016-02-05 20:14:34 -05:00
Jukka Rissanen
cefc8ea55c net: tools: Removing tunslip6 binary
This binary file should not be here so removing it.

Change-Id: I00d4b2de353f1b7ed75e9480252ea5f3f4b0c3a4
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-02-05 20:14:34 -05:00
Szymon Janc
4cd3cbf16a Bluetooth: SMP: Add strict checks for allowed PDUs
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>
2016-02-05 20:14:34 -05:00
Szymon Janc
5f36dbf0bb Bluetooth: SMP: Distribute keys in correct order when master
Master should distribute keys only after slave distributed own keys.

Change-Id: Ibd339bd18699fe054bf2443103a4dc5785f494ab
Signed-off-by: Szymon Janc <szymon.janc@tieto.com>
2016-02-05 20:14:34 -05:00
Szymon Janc
bf8bcbdb01 Bluetooth: SMP: Factor out key distribution
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>
2016-02-05 20:14:34 -05:00
Mariusz Skamra
7ba400c321 Bluetooth: Fix bt_conn_lookup_state
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>
2016-02-05 20:14:34 -05:00