2012-10-02 12:08:34

by Frederic Danis

[permalink] [raw]
Subject: [RFC v2] Convert storage to use per-remote device directories

Hi everyone,

Here is my proposal for new storage directory structure using ini-file
format.

Each adapter directory (/var/lib/bluetooth/<adapter address>/) will contain:
- an adapter.conf file for the local adapter
- an attribute_db.conf file containing attributes of supported LE services
- one directory per remote device, named by remote device address. A
directory will contain:
- a device.conf file
- a key file accessible only by root
- an attribute_db.conf file containing attributes of remote LE services

So the directory structure should be:
/var/lib/bluetooth/<adapter address>/
./adapter.conf
./attribute_db.conf
./<remote device address>/
./device.conf
./keys.conf
./attribute_db.conf
./<remote device address>/
./device.conf
./keys.conf
./attribute_db.conf
...


The adapter config file just need to be converted to ini-file format
with only 1 group called [adapter], for example:
[Adapter]
Name=desktop-0
Class=0x780011
Pairable=true
OnMode=discoverable
Mode=discoverable

The attribute_db.conf file should be a list of handles (group name) with
UUID and Value as keys, for example:
[0x0001]
UUID=00002800-0000-1000-8000-00805f9b34fb
Value=0018

[0x0004]
UUID=00002803-0000-1000-8000-00805f9b34fb
Value=020600002A

[0x0006]
UUID=00002a00-0000-1000-8000-00805f9b34fb
Value=4578616D706C6520446576696365


Remote device config file will include a [device] group with general
device infos (name, alias, profiles or primary services list, ...), for
example:
[Device]
Name=MyPhone
Alias=Fred's phone
Class=0x180204
DeviceId=FFFF 0000 0000 0000
EIR=040D040218
Manufacturer=15
LmpVersion=2
LmpSubversion=777
Features=FFFE0D0008080000
LastSeen=2012-09-26 11:19:40 GMT
LastUsed=2012-09-26 11:43:42 GMT
Trusted=true

Profiles=00001101-0000-1000-8000-00805f9b34fb;00001103-0000-1000-8000-00805f9b34fb

For LE devices, LEAddressType entry should exist to distinguish
LE-Public from LE-Random address.

Keys file will include informations related to link key or long term
link key, for example:
[LinkKey]
Key=9EF4BDFA68C5438A176DF42ACD59816C
Type=0
Length=4

[LongTermKey]
Key=
Authenticated=
EncSize=
EDiv=
Rand=

--
Frederic Danis Open Source Technology Center
[email protected] Intel Corporation





2012-10-02 12:41:29

by Johan Hedberg

[permalink] [raw]
Subject: Re: [RFC v2] Convert storage to use per-remote device directories

Hi Frederic,

On Tue, Oct 02, 2012, Frederic Danis wrote:
> The adapter config file just need to be converted to ini-file format
> with only 1 group called [adapter], for example:
> [Adapter]
> Name=desktop-0
> Class=0x780011
> Pairable=true
> OnMode=discoverable
> Mode=discoverable

Looks ok, except I'd call the main section [General] to make it more
natural to extend the file with new sections in the future. This is also
consistent with what we have under /etc/bluetooth.

> Remote device config file will include a [device] group with general
> device infos (name, alias, profiles or primary services list, ...),
> for example:
> [Device]

Same thing as with adapter.conf, i.e. I'd call this simply [General]

> DeviceId=FFFF 0000 0000 0000

I'd move this into its own [DeviceID] section with separate Assigner,
Vendor, Product and Version fields.

> Keys file will include informations related to link key or long term
> link key, for example:
> [LinkKey]
> Key=9EF4BDFA68C5438A176DF42ACD59816C
> Type=0
> Length=4

I suppose s/Length/PINLength/ would be in order here.

Johan