During the Bossa Conference (Recife,Brazil, March 11th-14th) we held a meeting at an inhospitable location
the heat was unbearable, the beer was cold, the sun too strong and the views distracting. Even though, we stood strong and were able to gather enough concentration as to think over a draft of user space architecture for UWB, WiNET and WUSB.
In any case, we got together people with interests in UWB or knowledge on the areas that will touch it (John J5 Palmieri [Redhat, DBUS & NM maintainer], Daniel Gollub [SuSE, KDE Bluetooth maintainer], Claudio Takahashi [INdT, Maemo], Marcel Holtmann [Redhat, Bluez maintainer], Eduardo Rocha [INdt, Maemo], if I am forgetting anyone, please let me know, and me Inaky Perez-Gonzalez [Intel, UWB/WiNET/WUSB]).
More than an architecture it was a collection of ideas and then the different owners will put them together and we'll revisit them as needed. I took some notes and here they are. I've been rearranging them so they make some more sense.
UWB
UWB is the base radio protocol for Wireless USB and WiNET
UWB devices transmit in one channel out of a few (there are a handful, but 13, 14 and 15 are the most common now)
One each UWB channels, devices cluster in Beacon Groups. In order for devices to talk among each other, they need to be in the same beacon group.
[Marcel suggests] Hide the UWB operation details, expose WiNET and WUSB * [Iñaky] Might not be so easy; for example depending on which Channel and Beacon Group you select, you will see (or not) different WiNET networks.
- For WUSB is easier, as your devices will still find you.
When a new UWB device is found in the beacon group, a new device notification is sent by the kernel to udev, who notifies HAL. HAL can match keys for capabilities and signal other listeners as needed. For WiNET device, HAL signals NetworkManager
All operational settings need to be system and session based (need flexibility)
- Rationale: I want wireless USB mouse/speakers/keyboard etc to work for all users--if we clean out environment when logging out, we loose them
- Userspace defines policy, kernel/user enforce it
We need an option to block/blacklist devices trying to connect so the user is not bothered. Options: block all, blacklist, none Example: you are with your UmPC in the underground at rush hour, every stop forty people come in and out, and half of them have UWB enabled phones looking for connections.
WiNET
The (rough) process to join a WiNET network is:
- Scan for channels with activity
For each used channel, scan for beacon groups in the different channels
- For each beacon group collect a list of available WiNET networks
User selects WiNET network to join from the one
- Environment switches channel and beacon group if neccessary so the WiNET network is joined
- WUSB devices are bound by channel, so knwoledge of channel change will have to be given to the WUSB side in a complete implementation
- Other UWB devices might be using a channel/beacongroup combination and its operation might be disturbed by switching
NetworkManager will need knowledge of WiNET
NetworkManager needs a new hw type: WiNET
- NM would take care of exploring the UWB radio neighborhood looking for WiNET networks and get the user the option to which one to connect to
- We need that ability also on the command line--preferibly using sysfs so we don't need tools
- We'll need an agent interface for key collection in WiNET (security model is similar to that of WUSB--however, the knowledge is per network AFAIK--Iñaky)
Roaming Roaming between WiNET networks is going to be tricky. The WiNET spec calls for it. Marcel recommends that roaming should be driven from the kernel (briding, etc, so the interface doesn't go down). Needs more exploration
Wireless USB
We need a system wide service/daemon for WUSB device management, service and association (akin to Bluetooth pairing).
We need an agent for the association part.
Session specifics would be handled via communication with the system wide daemon.
For each device that has been connected, we have knowledge of
Connection Context (WUSB specific)
- Type of connection:
- autoconnect: allow it to connect, no questions asked
- confirm: confirm with the user if we want to allow it to connect
- disallow: don't allow the device to connect
onetime: once the device is connected once, forget about it (Example: friend loans you its WUSB Storage Dongle to copy some pics, you want to connect only once)
