Thread (25 messages) 25 messages, 3 authors, 2013-09-28

Re: [PATCH 3/8] Bluetooth: Test for HCI_SETUP and HCI_USER_CHANNEL in mgmt_valid_hdev()

From: Johan Hedberg <hidden>
Date: 2013-09-28 15:34:59

Hi Marcel,

On Sat, Sep 28, 2013, Marcel Holtmann wrote:
quoted
quoted
quoted
quoted
quoted
If either one of the HCI_SETUP or HCI_USER_CHANNEL flags is set the
device is not considered valid for mgmt. By having these checks inside
the mgmt_valid_hdev function the a couple of places using it can be
simplified.
I looked at doing this and decided not to. Reason was that the device
gets removed from mgmt anyway.
I'm not sure what significance you think "device gets removed from mgmt"
has. All that is is a mgmt event saying that index has been removed. In
addition to that we need to ensure that we don't send any more mgmt
events for such devices and that we don't include such devices in the
response to mgmt_read_index list.

These are the two places of the code that my patch simplifies, one is
the check for whether to send a "power on" mgmt event and the other the
response handling of read_index_list.
I have taken care of that part. It is done inside mgmt_control() and
in case of a controller in user channel mode it returns invalid index.
That's great, but it doesn't cover the read_index_list command which we
were talking about here since the command doesn't target any specific
controller (as per our mgmt-api.txt it has the value <non-controller> as
the controller index). The command handler will in this case be invoked
that that's where it'd be convenient to rely on mgmt_valid_hdev() for
constructing the response.
the read index list command has a special check for user channel. As I
said, I looked into this and opted against extending valid hdev macro
since we only need it in a few specific cases. Adding it there
resulted in simpler code then some magic macro that is used in more
places.

When I wrote the patches for user channel this felt cleaner. I had
patches for both ways, but decided to go this route.
Fair enough.
quoted
quoted
For the events, I have no idea on how we would generate events if we
are not going through hci_event.c when the user channel is active.
The "powered on" event in question doesn't come from hci_event.c but
from the hci_dev_open() function, so again this is not covered by the
existing user channel checks.
How would you trigger a power on event. When user channel is active
everything else is blocked. So every other operation will fail. That
is taken care of.

In addition you can only activate user channel on a controller that is
powered off. That was a conscious design decision. Keep it really
simple. User channel mode is exclusive and exclusive to one user at a
time.
Good point. The only hci_dev_open() call that comes to mind is the one
automatically triggered by the setup stage, but user space doesn't yet
know about the controller at that point.

Johan
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help